@graview/core 0.1.50 → 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 (76) hide show
  1. package/dist/cli/describe.js +1 -1
  2. package/dist/cli/describe.js.map +1 -1
  3. package/dist/document.schema.json +2 -2
  4. package/dist/history.d.ts +45 -1
  5. package/dist/history.d.ts.map +1 -1
  6. package/dist/history.js +46 -6
  7. package/dist/history.js.map +1 -1
  8. package/dist/index.d.ts +3 -4
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -3
  11. package/dist/index.js.map +1 -1
  12. package/dist/mutations/type-text.d.ts +4 -1
  13. package/dist/mutations/type-text.d.ts.map +1 -1
  14. package/dist/mutations/type-text.js +6 -5
  15. package/dist/mutations/type-text.js.map +1 -1
  16. package/dist/ops/digest.d.ts +23 -0
  17. package/dist/ops/digest.d.ts.map +1 -1
  18. package/dist/ops/digest.js +43 -1
  19. package/dist/ops/digest.js.map +1 -1
  20. package/dist/presence.d.ts +18 -0
  21. package/dist/presence.d.ts.map +1 -1
  22. package/dist/presence.js +2 -1
  23. package/dist/presence.js.map +1 -1
  24. package/dist/schema/collaborative-of.d.ts +11 -0
  25. package/dist/schema/collaborative-of.d.ts.map +1 -0
  26. package/dist/schema/collaborative-of.js +45 -0
  27. package/dist/schema/collaborative-of.js.map +1 -0
  28. package/dist/schema/collaborative.d.ts +8 -10
  29. package/dist/schema/collaborative.d.ts.map +1 -1
  30. package/dist/schema/collaborative.js +1 -38
  31. package/dist/schema/collaborative.js.map +1 -1
  32. package/dist/store.d.ts +1 -1
  33. package/dist/store.d.ts.map +1 -1
  34. package/dist/store.js +20 -8
  35. package/dist/store.js.map +1 -1
  36. package/dist/subscription-shape.d.ts +21 -1
  37. package/dist/subscription-shape.d.ts.map +1 -1
  38. package/dist/subscription-shape.js.map +1 -1
  39. package/dist/subscriptions.d.ts +33 -1
  40. package/dist/subscriptions.d.ts.map +1 -1
  41. package/dist/subscriptions.js +146 -21
  42. package/dist/subscriptions.js.map +1 -1
  43. package/dist/text/since.d.ts +10 -1
  44. package/dist/text/since.d.ts.map +1 -1
  45. package/dist/text/since.js +23 -1
  46. package/dist/text/since.js.map +1 -1
  47. package/dist/text/splice.d.ts +0 -12
  48. package/dist/text/splice.d.ts.map +1 -1
  49. package/dist/text/splice.js +23 -48
  50. package/dist/text/splice.js.map +1 -1
  51. package/dist/text/transform.d.ts +14 -0
  52. package/dist/text/transform.d.ts.map +1 -0
  53. package/dist/text/transform.js +59 -0
  54. package/dist/text/transform.js.map +1 -0
  55. package/dist/text/typing-hook.d.ts +7 -1
  56. package/dist/text/typing-hook.d.ts.map +1 -1
  57. package/dist/text/typing-hook.js.map +1 -1
  58. package/dist/text/typing-spans.d.ts +11 -0
  59. package/dist/text/typing-spans.d.ts.map +1 -0
  60. package/dist/text/typing-spans.js +35 -0
  61. package/dist/text/typing-spans.js.map +1 -0
  62. package/dist/text/typing-words.d.ts +45 -0
  63. package/dist/text/typing-words.d.ts.map +1 -0
  64. package/dist/text/typing-words.js +85 -0
  65. package/dist/text/typing-words.js.map +1 -0
  66. package/dist/tidying.d.ts +2 -2
  67. package/dist/tidying.d.ts.map +1 -1
  68. package/dist/tidying.js +1 -1
  69. package/dist/tidying.js.map +1 -1
  70. package/dist/typing.d.ts +3 -1
  71. package/dist/typing.d.ts.map +1 -1
  72. package/dist/typing.js +98 -3
  73. package/dist/typing.js.map +1 -1
  74. package/dist/version.d.ts +1 -1
  75. package/dist/version.js +1 -1
  76. package/package.json +1 -1
@@ -33,6 +33,8 @@ import { parseExpr } from "./document/expr/parse.js";
33
33
  import { evaluateExpr, ExprEvalError } from "./document/expr/evaluate.js";
34
34
  import { shapesOfSchema } from "./document/rules.js";
35
35
  import { isUnset, splicedRecord } from "./graph/primitives.js";
36
+ import { joinRuns, typedRun, typingSentence, typingWords } from "./text/typing-words.js";
37
+ import { joinSpans } from "./text/typing-spans.js";
36
38
  import { isWithheld, redact, WITHHELD_AUTHOR } from "./ops/withheld.js";
37
39
  import { actingAs } from "./permissions/policy.js";
38
40
  import { actTitle, fieldWords, humanizeField, labelOf, nounOf, pluralOf, withArticle } from "./schema/define-node.js";
@@ -282,8 +284,10 @@ export function matchSubscriptions(store, ops, subscriptions, options = {}) {
282
284
  const whole = open.length === served.length;
283
285
  const shownBy = whole ? by : WITHHELD_AUTHOR;
284
286
  const byName = whole ? nameOfAuthor(by, { graph: seen.graph, schema: any.schema, ...(options.seats ? { seats: options.seats } : {}) }) : (WITHHELD_AUTHOR.name ?? "Someone");
285
- const intent = (whole ? first.batchIntent : undefined) ?? (open.length > 0 ? open.map((op) => op.intent).join("; ") : recordsSaid(records));
286
- matches.push({
287
+ // A run of typing is said as one: "Wrote in Kitchen's notes (+5 −1)", read over what the subscriber is served.
288
+ const typed = whole ? typedRun(served) : undefined;
289
+ const intent = typed ? typingWords(typed, any.schema, seen.graph) : ((whole ? first.batchIntent : undefined) ?? (open.length > 0 ? open.map((op) => op.intent).join("; ") : recordsSaid(records)));
290
+ const match = {
287
291
  subscription,
288
292
  app: subscription.app,
289
293
  batch: first.batch,
@@ -294,13 +298,113 @@ export function matchSubscriptions(store, ops, subscriptions, options = {}) {
294
298
  intent,
295
299
  acts: [...new Set(open.flatMap((op) => (op.mutation ? [op.mutation.name] : [])))],
296
300
  records,
297
- said: `${byName}: ${intent}`,
301
+ said: typed ? typingSentence(byName, typed, any.schema, seen.graph) : `${byName}: ${intent}`,
298
302
  at: last.at,
299
- });
303
+ };
304
+ if (typed)
305
+ typing.set(match, { run: typed, author: by, schema: any.schema, graph: seen.graph });
306
+ matches.push(match);
300
307
  }
301
308
  }
302
309
  return matches;
303
310
  }
311
+ /** The run of typing a match is, kept beside it: what holding it until the run ends reads. */
312
+ const typing = new WeakMap();
313
+ /**
314
+ * HOW LONG A RUN OF TYPING IS HELD before it is told (Roadmap f-collab-text,
315
+ * phase 5): a person writing a paragraph sends a run every word, and a
316
+ * subscriber hears of it once, when they stop — this long after their last
317
+ * keystroke into the field, or as soon as anything else matches the same
318
+ * subscription.
319
+ */
320
+ export const TYPING_QUIET_MS = 5_000;
321
+ /**
322
+ * TYPING TOLD AT THE END OF A RUN, NOT EVERY WORD (Roadmap f-collab-text,
323
+ * phase 5). Between `matchSubscriptions` and a host's hook: a match that is
324
+ * a run of typing is held, and the next run by the same person into the
325
+ * same field for the same subscription joins it — one match, every batch
326
+ * (`batches`), the counts added and the spans one after the other, said
327
+ * again ("Ada wrote in Kitchen's notes (+42 −3)") — until `quietMs` pass
328
+ * with no more, or another match for that subscription comes, which is
329
+ * told after it so the order holds. Any other match is told at once.
330
+ * `watchSubscriptions` and `@graview/ship`'s handler both hold through it.
331
+ */
332
+ export function holdTypingRuns(hook, options = {}) {
333
+ const quiet = options.quietMs ?? TYPING_QUIET_MS;
334
+ const held = new Map();
335
+ const keyOf = (match, run, author) => JSON.stringify([match.subscription.id, author.kind, author.id ?? "", author.name ?? "", run.node, run.field]);
336
+ const release = (key) => {
337
+ const one = held.get(key);
338
+ if (!one)
339
+ return;
340
+ held.delete(key);
341
+ if (one.timer)
342
+ clearTimeout(one.timer);
343
+ hook(one.match);
344
+ };
345
+ const releaseFor = (subscription, except) => {
346
+ for (const [key, one] of [...held])
347
+ if (one.match.subscription.id === subscription && key !== except)
348
+ release(key);
349
+ };
350
+ return {
351
+ tell(match) {
352
+ const typed = typing.get(match);
353
+ if (!typed || quiet <= 0) {
354
+ releaseFor(match.subscription.id);
355
+ hook(match);
356
+ return;
357
+ }
358
+ const key = keyOf(match, typed.run, typed.author);
359
+ releaseFor(match.subscription.id, key);
360
+ const was = held.get(key);
361
+ const joined = was ? joinMatches(was.match, match) : match;
362
+ if (was?.timer)
363
+ clearTimeout(was.timer);
364
+ const timer = setTimeout(() => release(key), quiet);
365
+ timer.unref?.();
366
+ held.set(key, { match: joined, timer });
367
+ },
368
+ flush() {
369
+ for (const key of [...held.keys()])
370
+ release(key);
371
+ },
372
+ };
373
+ }
374
+ /** Two matches of one person's typing into one field, as one: the later's moment, both runs' counts and spans. */
375
+ function joinMatches(a, b) {
376
+ const one = typing.get(a);
377
+ const two = typing.get(b);
378
+ const run = joinRuns(one.run, two.run);
379
+ const records = b.records.map((record) => {
380
+ const before = a.records.find((other) => other.id === record.id);
381
+ if (!before?.fields || !record.fields)
382
+ return record;
383
+ return {
384
+ ...record,
385
+ fields: [
386
+ ...before.fields.filter((field) => !record.fields.some((other) => other.field === field.field)),
387
+ ...record.fields.map((field) => {
388
+ const was = before.fields.find((other) => other.field === field.field);
389
+ if (!was?.typed || !field.typed)
390
+ return was && "before" in was ? { ...field, before: was.before } : field;
391
+ return { ...field, typed: { inserted: was.typed.inserted + field.typed.inserted, removed: was.typed.removed + field.typed.removed, spans: joinSpans(was.typed.spans, field.typed.spans) } };
392
+ }),
393
+ ],
394
+ };
395
+ });
396
+ const intent = typingWords(run, two.schema, two.graph);
397
+ const joined = {
398
+ ...b,
399
+ batches: [...(a.batches ?? [a.batch]), ...(b.batches ?? [b.batch])],
400
+ ops: [...a.ops, ...b.ops],
401
+ intent,
402
+ records,
403
+ said: typingSentence(b.byName, run, two.schema, two.graph),
404
+ };
405
+ typing.set(joined, { ...two, run });
406
+ return joined;
407
+ }
304
408
  /** What happened to the records, said without who or why: "Added “Call the plumber”". */
305
409
  function recordsSaid(records) {
306
410
  const verb = { created: "Added", changed: "Changed", removed: "Removed" };
@@ -333,11 +437,15 @@ function matchOne(store, seen, subscription, ops) {
333
437
  const fields = new Map();
334
438
  for (const primitive of primitives) {
335
439
  if (primitive.op === "splice-text" && primitive.id === id) {
336
- // A splice says part of the text: the field is said whole, as it was before the batch and as it is.
440
+ // A splice says part of the text, and is said as that part — what was put in and taken out — never the text whole twice (Roadmap f-collab-text, phase 5).
337
441
  const held = fields.get(primitive.field);
338
- const before = held ? held.before : nodeBefore(now, id, primitives)?.[primitive.field];
339
- const after = now?.[primitive.field];
340
- fields.set(primitive.field, { ...(before === undefined ? {} : { before }), ...(after === undefined ? {} : { after }) });
442
+ const span = { at: primitive.at, removed: primitive.removed, inserted: primitive.inserted };
443
+ const typed = { inserted: [...primitive.inserted].length + (held?.typed?.inserted ?? 0), removed: [...primitive.removed].length + (held?.typed?.removed ?? 0), spans: joinSpans(held?.typed?.spans ?? [], [span]) };
444
+ if (held && !held.typed)
445
+ fields.set(primitive.field, { ...held, ...(now?.[primitive.field] === undefined ? {} : { after: now[primitive.field] }) });
446
+ else
447
+ fields.set(primitive.field, { typed });
448
+ continue;
341
449
  }
342
450
  if (primitive.op !== "patch-node" || primitive.id !== id)
343
451
  continue;
@@ -352,7 +460,16 @@ function matchOne(store, seen, subscription, ops) {
352
460
  kind,
353
461
  label,
354
462
  change,
355
- ...(fields.size > 0 ? { fields: [...fields].map(([field, values]) => ({ field, words: fieldWords(definition, field), ...values })) } : {}),
463
+ ...(fields.size > 0
464
+ ? {
465
+ fields: [...fields].map(([field, { typed, ...values }]) => ({
466
+ field,
467
+ words: fieldWords(definition, field),
468
+ ...values,
469
+ ...(typed ? { typed: { inserted: typed.inserted, removed: typed.removed, spans: typed.spans } } : {}),
470
+ })),
471
+ }
472
+ : {}),
356
473
  };
357
474
  };
358
475
  const touched = [...new Set(primitives.flatMap(aboutOf))];
@@ -403,23 +520,26 @@ function servedAs(seen, node) {
403
520
  * subscriptions on each commit, and hands each match to the hook. A store
404
521
  * that lists at once is matched at once; one that answers a promise is
405
522
  * matched when it answers, against each record as it stood just after the
406
- * batch. Answers the way to stop.
523
+ * batch. A run of typing is told once the typist stops (`holdTypingRuns`).
524
+ * Answers the way to stop, which tells what it held.
407
525
  */
408
526
  export function watchSubscriptions(store, options) {
409
527
  const report = options.onError ?? ((error) => console.error("A subscription could not be judged:", error));
410
- const tell = (matches) => {
411
- for (const match of matches) {
412
- try {
413
- const told = options.onSubscriptionMatch(match);
414
- if (told && typeof told.then === "function")
415
- told.catch(report);
416
- }
417
- catch (error) {
418
- report(error);
419
- }
528
+ const held = holdTypingRuns((match) => {
529
+ try {
530
+ const told = options.onSubscriptionMatch(match);
531
+ if (told && typeof told.then === "function")
532
+ told.catch(report);
533
+ }
534
+ catch (error) {
535
+ report(error);
420
536
  }
537
+ }, options.typingQuietMs !== undefined ? { quietMs: options.typingQuietMs } : {});
538
+ const tell = (matches) => {
539
+ for (const match of matches)
540
+ held.tell(match);
421
541
  };
422
- return store.subscribe((_diff, ops) => {
542
+ const stop = store.subscribe((_diff, ops) => {
423
543
  if (ops.length === 0)
424
544
  return;
425
545
  try {
@@ -433,5 +553,10 @@ export function watchSubscriptions(store, options) {
433
553
  report(error);
434
554
  }
435
555
  });
556
+ // Stopping tells what typing it held: nothing matched is lost.
557
+ return () => {
558
+ stop();
559
+ held.flush();
560
+ };
436
561
  }
437
562
  //# sourceMappingURL=subscriptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Primitive } from "../graph/primitives.js";
1
+ import { type Primitive } from "../graph/primitives.js";
2
2
  import type { Operation } from "../ops/types.js";
3
3
  import { type TextSplice } from "./splice.js";
4
4
  /** The text at a revision, and the splices the log took on the field since, oldest first. */
@@ -8,6 +8,15 @@ export interface TextThen {
8
8
  }
9
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
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;
11
20
  /** The splices on one field among these primitives, in order. */
12
21
  export declare const splicesOn: (primitives: readonly Primitive[], node: string, field: string) => TextSplice[];
13
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"since.d.ts","sourceRoot":"","sources":["../../src/text/since.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAetE,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,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,CAoBnJ;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"}
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"}
@@ -1,5 +1,7 @@
1
+ import { isUnset } from "../graph/primitives.js";
1
2
  import { diffSplice } from "./diff.js";
2
- import { applySplice, transform } from "./splice.js";
3
+ import { applySplice } from "./splice.js";
4
+ import { transform } from "./transform.js";
3
5
  /** Whether a primitive changes one field of one record otherwise than by a splice: written whole, or its record made or taken out. */
4
6
  export function writesWhole(primitive, node, field) {
5
7
  switch (primitive.op) {
@@ -12,6 +14,21 @@ export function writesWhole(primitive, node, field) {
12
14
  return false;
13
15
  }
14
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
+ }
15
32
  /** The splices on one field among these primitives, in order. */
16
33
  export const splicesOn = (primitives, node, field) => primitives.flatMap((one) => (one.op === "splice-text" && one.id === node && one.field === field ? [one] : []));
17
34
  /**
@@ -28,6 +45,11 @@ export function textAt(ops, horizon, node, field, rev, current) {
28
45
  if (op.seq <= rev)
29
46
  continue;
30
47
  for (const primitive of op.primitives) {
48
+ const first = firstText(primitive, node, field);
49
+ if (first) {
50
+ since.push(first);
51
+ continue;
52
+ }
31
53
  if (writesWhole(primitive, node, field))
32
54
  return undefined;
33
55
  if (primitive.op === "splice-text" && primitive.id === node && primitive.field === field)
@@ -1 +1 @@
1
- {"version":3,"file":"since.js","sourceRoot":"","sources":["../../src/text/since.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"since.js","sourceRoot":"","sources":["../../src/text/since.ts"],"names":[],"mappings":"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"}
@@ -29,18 +29,6 @@ export interface TextSplice {
29
29
  }
30
30
  /** The text with the splice made; throws when the text does not hold `removed` at `at`. */
31
31
  export declare function applySplice(text: string, splice: TextSplice): string;
32
- /**
33
- * Two splices made against the same text, `a` the earlier in the log:
34
- * `[a', b']`, `a'` to make after `b` and `b'` after `a`, so that both
35
- * orders give the same text (TP1). Where they touch, both insertions are
36
- * kept, left to right, `a`'s first at the same offset.
37
- */
38
- export declare function transform(a: TextSplice, b: TextSplice): [TextSplice, TextSplice];
39
- /**
40
- * `a` then `b` as one splice, when they touch (a run of keystrokes); none
41
- * when they do not, since what lies between them is in neither.
42
- */
43
- export declare function compose(a: TextSplice, b: TextSplice): TextSplice | undefined;
44
32
  /**
45
33
  * Where a caret in the text before `splice` is after it. Before the splice
46
34
  * it stays, past it it moves by what changed, and on it — text inserted
@@ -1 +1 @@
1
- {"version":3,"file":"splice.d.ts","sourceRoot":"","sources":["../../src/text/splice.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;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;AAWD,2FAA2F;AAC3F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAKpE;AAmBD;;;;;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;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,QAAQ,GAAG,OAAiB,GAAG,MAAM,CAI5G"}
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"}
@@ -1,11 +1,28 @@
1
- import { diffSplice } from "./diff.js";
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
+ */
2
24
  /** Where a splice's removed text ends, in the text it was made against. */
3
25
  const end = (splice) => splice.at + splice.removed.length;
4
- /** A splice that says only what changes: what its removed and inserted text share at either end left alone. */
5
- function trimmed(splice) {
6
- const said = diffSplice(splice.removed, splice.inserted);
7
- return { ...said, at: splice.at + said.at };
8
- }
9
26
  /** The text with the splice made; throws when the text does not hold `removed` at `at`. */
10
27
  export function applySplice(text, splice) {
11
28
  if (!Number.isInteger(splice.at) || splice.at < 0 || splice.at > text.length || text.slice(splice.at, end(splice)) !== splice.removed) {
@@ -13,48 +30,6 @@ export function applySplice(text, splice) {
13
30
  }
14
31
  return text.slice(0, splice.at) + splice.inserted + text.slice(end(splice));
15
32
  }
16
- /**
17
- * `splice` as it applies after `over`, both made against the same text.
18
- * Apart, it only moves by what `over` added. Touching or overlapping, the
19
- * two take out everything either removed and put in both insertions — the
20
- * one further left first, and at the same offset the one earlier in the
21
- * log (`overEarlier`) — so whichever lands first, the text comes out the same.
22
- */
23
- function rebase(splice, over, overEarlier) {
24
- if (end(splice) < over.at)
25
- return splice;
26
- if (splice.at > end(over))
27
- return { ...splice, at: splice.at + over.inserted.length - over.removed.length };
28
- const from = Math.min(splice.at, over.at);
29
- const past = end(splice) - end(over);
30
- const removed = splice.removed.slice(0, over.at - from) + over.inserted + (past > 0 ? splice.removed.slice(splice.removed.length - past) : "");
31
- const overFirst = over.at < splice.at || (over.at === splice.at && overEarlier);
32
- return trimmed({ at: from, removed, inserted: overFirst ? over.inserted + splice.inserted : splice.inserted + over.inserted });
33
- }
34
- /**
35
- * Two splices made against the same text, `a` the earlier in the log:
36
- * `[a', b']`, `a'` to make after `b` and `b'` after `a`, so that both
37
- * orders give the same text (TP1). Where they touch, both insertions are
38
- * kept, left to right, `a`'s first at the same offset.
39
- */
40
- export function transform(a, b) {
41
- return [rebase(a, b, false), rebase(b, a, true)];
42
- }
43
- /**
44
- * `a` then `b` as one splice, when they touch (a run of keystrokes); none
45
- * when they do not, since what lies between them is in neither.
46
- */
47
- export function compose(a, b) {
48
- const made = a.at + a.inserted.length;
49
- if (end(b) < a.at || b.at > made)
50
- return undefined;
51
- const from = Math.min(a.at, b.at);
52
- const past = end(b) - made;
53
- const before = b.removed.slice(0, a.at - from);
54
- const after = past > 0 ? b.removed.slice(b.removed.length - past) : "";
55
- const inserted = applySplice(before + a.inserted + after, { ...b, at: b.at - from });
56
- return trimmed({ at: from, removed: before + a.removed + after, inserted });
57
- }
58
33
  /**
59
34
  * Where a caret in the text before `splice` is after it. Before the splice
60
35
  * it stays, past it it moves by what changed, and on it — text inserted
@@ -1 +1 @@
1
- {"version":3,"file":"splice.js","sourceRoot":"","sources":["../../src/text/splice.ts"],"names":[],"mappings":"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"}
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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"}