@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.
- package/dist/answer-seen.js +2 -2
- package/dist/answer-seen.js.map +1 -1
- package/dist/app.d.ts +11 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js.map +1 -1
- package/dist/capabilities.d.ts +7 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/cli/check/index.d.ts +1 -0
- package/dist/cli/check/index.d.ts.map +1 -1
- package/dist/cli/check/index.js +1 -0
- package/dist/cli/check/index.js.map +1 -1
- package/dist/cli/check/publishing.d.ts +13 -0
- package/dist/cli/check/publishing.d.ts.map +1 -0
- package/dist/cli/check/publishing.js +36 -0
- package/dist/cli/check/publishing.js.map +1 -0
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +2 -1
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/describe.d.ts.map +1 -1
- package/dist/cli/describe.js +15 -0
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/document/compiled.d.ts.map +1 -1
- package/dist/document/compiled.js +5 -0
- package/dist/document/compiled.js.map +1 -1
- package/dist/document/field-spec.d.ts.map +1 -1
- package/dist/document/field-spec.js +8 -2
- package/dist/document/field-spec.js.map +1 -1
- package/dist/document/format-findings.d.ts.map +1 -1
- package/dist/document/format-findings.js +5 -0
- package/dist/document/format-findings.js.map +1 -1
- package/dist/document/schema.d.ts +13 -0
- package/dist/document/schema.d.ts.map +1 -1
- package/dist/document/schema.js +16 -0
- package/dist/document/schema.js.map +1 -1
- package/dist/document/to-document.d.ts.map +1 -1
- package/dist/document/to-document.js +1 -0
- package/dist/document/to-document.js.map +1 -1
- package/dist/document.schema.json +42 -2
- package/dist/field-sight.js +5 -4
- package/dist/field-sight.js.map +1 -1
- package/dist/format-error.d.ts +54 -0
- package/dist/format-error.d.ts.map +1 -0
- package/dist/format-error.js +73 -0
- package/dist/format-error.js.map +1 -0
- package/dist/formats.d.ts +16 -13
- package/dist/formats.d.ts.map +1 -1
- package/dist/formats.js +18 -17
- package/dist/formats.js.map +1 -1
- package/dist/graph/diff.js +1 -1
- package/dist/graph/diff.js.map +1 -1
- package/dist/graph/edge-fields.d.ts +20 -0
- package/dist/graph/edge-fields.d.ts.map +1 -0
- package/dist/graph/edge-fields.js +21 -0
- package/dist/graph/edge-fields.js.map +1 -0
- package/dist/graph/graph.d.ts +3 -0
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +57 -4
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/primitives.d.ts +22 -2
- package/dist/graph/primitives.d.ts.map +1 -1
- package/dist/graph/primitives.js +20 -0
- package/dist/graph/primitives.js.map +1 -1
- package/dist/graph/types.d.ts +15 -1
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/graph/types.js +0 -0
- package/dist/graph/types.js.map +1 -1
- package/dist/history.d.ts +68 -3
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +68 -8
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +17 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/integrity.d.ts.map +1 -1
- package/dist/integrity.js +2 -1
- package/dist/integrity.js.map +1 -1
- package/dist/linked.d.ts +1 -0
- package/dist/linked.d.ts.map +1 -1
- package/dist/linked.js +1 -0
- package/dist/linked.js.map +1 -1
- package/dist/mutations/define-mutation.d.ts +4 -0
- package/dist/mutations/define-mutation.d.ts.map +1 -1
- package/dist/mutations/define-mutation.js +32 -8
- package/dist/mutations/define-mutation.js.map +1 -1
- package/dist/mutations/keep-link.d.ts.map +1 -1
- package/dist/mutations/keep-link.js +4 -2
- package/dist/mutations/keep-link.js.map +1 -1
- package/dist/mutations/type-text.d.ts +52 -0
- package/dist/mutations/type-text.d.ts.map +1 -0
- package/dist/mutations/type-text.js +107 -0
- package/dist/mutations/type-text.js.map +1 -0
- package/dist/mutations/types.d.ts +8 -0
- package/dist/mutations/types.d.ts.map +1 -1
- package/dist/mutations/visitor-form.js +1 -1
- package/dist/mutations/visitor-form.js.map +1 -1
- package/dist/ops/digest.d.ts +40 -6
- package/dist/ops/digest.d.ts.map +1 -1
- package/dist/ops/digest.js +79 -16
- package/dist/ops/digest.js.map +1 -1
- package/dist/ops/kept-fields.d.ts +1 -1
- package/dist/ops/kept-fields.d.ts.map +1 -1
- package/dist/ops/kept-fields.js +4 -1
- package/dist/ops/kept-fields.js.map +1 -1
- package/dist/ops/log.d.ts.map +1 -1
- package/dist/ops/log.js +3 -0
- package/dist/ops/log.js.map +1 -1
- package/dist/ops/provenance.d.ts.map +1 -1
- package/dist/ops/provenance.js +3 -1
- package/dist/ops/provenance.js.map +1 -1
- package/dist/ops/revisions.d.ts +8 -2
- package/dist/ops/revisions.d.ts.map +1 -1
- package/dist/ops/revisions.js +12 -3
- package/dist/ops/revisions.js.map +1 -1
- package/dist/ops/served.d.ts.map +1 -1
- package/dist/ops/served.js +30 -4
- package/dist/ops/served.js.map +1 -1
- package/dist/ops/suggestions.d.ts +14 -0
- package/dist/ops/suggestions.d.ts.map +1 -1
- package/dist/ops/suggestions.js.map +1 -1
- package/dist/ops/types.d.ts +43 -3
- package/dist/ops/types.d.ts.map +1 -1
- package/dist/ops/types.js +16 -1
- package/dist/ops/types.js.map +1 -1
- package/dist/ops/undo.d.ts +15 -2
- package/dist/ops/undo.d.ts.map +1 -1
- package/dist/ops/undo.js +22 -3
- package/dist/ops/undo.js.map +1 -1
- package/dist/ops/withheld.d.ts.map +1 -1
- package/dist/ops/withheld.js +4 -0
- package/dist/ops/withheld.js.map +1 -1
- package/dist/ops/writers.d.ts.map +1 -1
- package/dist/ops/writers.js +3 -0
- package/dist/ops/writers.js.map +1 -1
- package/dist/past.d.ts +1 -0
- package/dist/past.d.ts.map +1 -1
- package/dist/past.js +9 -2
- package/dist/past.js.map +1 -1
- package/dist/persistence/memory.d.ts +1 -1
- package/dist/persistence/memory.d.ts.map +1 -1
- package/dist/persistence/memory.js +5 -1
- package/dist/persistence/memory.js.map +1 -1
- package/dist/persistence/sql.d.ts +1 -1
- package/dist/persistence/sql.d.ts.map +1 -1
- package/dist/persistence/sql.js +45 -5
- package/dist/persistence/sql.js.map +1 -1
- package/dist/persistence/sqlite.d.ts +1 -0
- package/dist/persistence/sqlite.d.ts.map +1 -1
- package/dist/persistence/sqlite.js +1 -0
- package/dist/persistence/sqlite.js.map +1 -1
- package/dist/persistence/types.d.ts +34 -1
- package/dist/persistence/types.d.ts.map +1 -1
- package/dist/persistence/types.js +35 -1
- package/dist/persistence/types.js.map +1 -1
- package/dist/presence.d.ts +20 -1
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js +4 -2
- package/dist/presence.js.map +1 -1
- package/dist/publish.d.ts +78 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +23 -0
- package/dist/publish.js.map +1 -0
- package/dist/publishing.d.ts +10 -0
- package/dist/publishing.d.ts.map +1 -0
- package/dist/publishing.js +168 -0
- package/dist/publishing.js.map +1 -0
- package/dist/refused.d.ts +13 -6
- package/dist/refused.d.ts.map +1 -1
- package/dist/refused.js +13 -6
- package/dist/refused.js.map +1 -1
- package/dist/schema/collaborative-of.d.ts +11 -0
- package/dist/schema/collaborative-of.d.ts.map +1 -0
- package/dist/schema/collaborative-of.js +45 -0
- package/dist/schema/collaborative-of.js.map +1 -0
- package/dist/schema/collaborative.d.ts +12 -0
- package/dist/schema/collaborative.d.ts.map +1 -0
- package/dist/schema/collaborative.js +28 -0
- package/dist/schema/collaborative.js.map +1 -0
- package/dist/seen.d.ts +44 -1
- package/dist/seen.d.ts.map +1 -1
- package/dist/seen.js +59 -14
- package/dist/seen.js.map +1 -1
- package/dist/store.d.ts +79 -5
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +138 -32
- package/dist/store.js.map +1 -1
- package/dist/subscription-shape.d.ts +21 -1
- package/dist/subscription-shape.d.ts.map +1 -1
- package/dist/subscription-shape.js.map +1 -1
- package/dist/subscriptions.d.ts +33 -1
- package/dist/subscriptions.d.ts.map +1 -1
- package/dist/subscriptions.js +155 -18
- package/dist/subscriptions.js.map +1 -1
- package/dist/sync/engine.d.ts.map +1 -1
- package/dist/sync/engine.js +43 -15
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/types.d.ts +10 -0
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js +8 -0
- package/dist/sync/types.js.map +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +1 -0
- package/dist/testing.js.map +1 -1
- package/dist/text/diff.d.ts +10 -0
- package/dist/text/diff.d.ts.map +1 -0
- package/dist/text/diff.js +26 -0
- package/dist/text/diff.js.map +1 -0
- package/dist/text/since.d.ts +38 -0
- package/dist/text/since.d.ts.map +1 -0
- package/dist/text/since.js +88 -0
- package/dist/text/since.js.map +1 -0
- package/dist/text/splice.d.ts +39 -0
- package/dist/text/splice.d.ts.map +1 -0
- package/dist/text/splice.js +46 -0
- package/dist/text/splice.js.map +1 -0
- package/dist/text/transform.d.ts +14 -0
- package/dist/text/transform.d.ts.map +1 -0
- package/dist/text/transform.js +59 -0
- package/dist/text/transform.js.map +1 -0
- package/dist/text/typing-hook.d.ts +43 -0
- package/dist/text/typing-hook.d.ts.map +1 -0
- package/dist/text/typing-hook.js +16 -0
- package/dist/text/typing-hook.js.map +1 -0
- package/dist/text/typing-spans.d.ts +11 -0
- package/dist/text/typing-spans.d.ts.map +1 -0
- package/dist/text/typing-spans.js +35 -0
- package/dist/text/typing-spans.js.map +1 -0
- package/dist/text/typing-words.d.ts +45 -0
- package/dist/text/typing-words.d.ts.map +1 -0
- package/dist/text/typing-words.js +85 -0
- package/dist/text/typing-words.js.map +1 -0
- package/dist/tidying.d.ts +3 -3
- package/dist/tidying.d.ts.map +1 -1
- package/dist/tidying.js +1 -1
- package/dist/tidying.js.map +1 -1
- package/dist/typing.d.ts +4 -0
- package/dist/typing.d.ts.map +1 -0
- package/dist/typing.js +204 -0
- package/dist/typing.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/who.d.ts +1 -1
- package/dist/who.d.ts.map +1 -1
- package/dist/who.js +5 -2
- package/dist/who.js.map +1 -1
- package/package.json +12 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing-spans.d.ts","sourceRoot":"","sources":["../../src/text/typing-spans.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgB9C,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,CAQjG;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAK/F"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { firstText } from "./since.js";
|
|
2
|
+
import { compose } from "./transform.js";
|
|
3
|
+
/*
|
|
4
|
+
* WHAT A RUN OF TYPING PUT IN AND TOOK OUT, span by span (Roadmap
|
|
5
|
+
* f-collab-text, phase 5): what a diff in history and a notification say of
|
|
6
|
+
* a field typed into, in place of its whole text before and after. Read by
|
|
7
|
+
* `@graview/core/history` and `/subscriptions` only.
|
|
8
|
+
*/
|
|
9
|
+
/** The spans one primitive changed of one field: a splice, or a first text written whole as the insert it is. */
|
|
10
|
+
function spliceOf(primitive, node, field) {
|
|
11
|
+
if (primitive.op === "splice-text")
|
|
12
|
+
return primitive.id === node && primitive.field === field ? primitive : undefined;
|
|
13
|
+
return firstText(primitive, node, field);
|
|
14
|
+
}
|
|
15
|
+
/** Spans one after another, keystrokes that touch made one. */
|
|
16
|
+
export function joinSpans(spans, more) {
|
|
17
|
+
const out = [...spans];
|
|
18
|
+
for (const splice of more) {
|
|
19
|
+
const joined = out.length > 0 ? compose(out.at(-1), splice) : undefined;
|
|
20
|
+
if (joined)
|
|
21
|
+
out[out.length - 1] = joined;
|
|
22
|
+
else
|
|
23
|
+
out.push({ at: splice.at, removed: splice.removed, inserted: splice.inserted });
|
|
24
|
+
}
|
|
25
|
+
return out.filter((one) => one.removed !== "" || one.inserted !== "");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* WHAT THESE OPS TYPED INTO ONE FIELD, as spans: oldest first, each against
|
|
29
|
+
* the text as the one before it left it, keystrokes that touch made one —
|
|
30
|
+
* " white today" put in at 15, "Paint " taken out at 0 — never the text.
|
|
31
|
+
*/
|
|
32
|
+
export function typedSpans(ops, node, field) {
|
|
33
|
+
return joinSpans([], ops.flatMap((op) => op.primitives.flatMap((primitive) => spliceOf(primitive, node, field) ?? [])));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=typing-spans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing-spans.js","sourceRoot":"","sources":["../../src/text/typing-spans.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC;;;;;GAKG;AAEH,iHAAiH;AACjH,SAAS,QAAQ,CAAC,SAAoB,EAAE,IAAY,EAAE,KAAa;IACjE,IAAI,SAAS,CAAC,EAAE,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,OAAO,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,KAA4B,EAAE,IAA2B;IACjF,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACvB,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,IAAI,MAAM;YAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;;YACpC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAyB,EAAE,IAAY,EAAE,KAAa;IAC/E,OAAO,SAAS,CACd,EAAE,EACF,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAClG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Author, Operation } from "../ops/types.js";
|
|
2
|
+
/** What a run of typing did to one field of one record: how much it put in and took out. */
|
|
3
|
+
export interface TypedRun {
|
|
4
|
+
readonly node: string;
|
|
5
|
+
readonly field: string;
|
|
6
|
+
/** Characters put in, counted as a person counts them: an emoji is one. */
|
|
7
|
+
readonly inserted: number;
|
|
8
|
+
/** Characters taken out. */
|
|
9
|
+
readonly removed: number;
|
|
10
|
+
}
|
|
11
|
+
/** The field a keystroke op typed into, by its call: `type-text`'s node and field. None for an undo, an op withheld from the reader, or any other act. */
|
|
12
|
+
export declare function typedField(op: Operation): {
|
|
13
|
+
readonly node: string;
|
|
14
|
+
readonly field: string;
|
|
15
|
+
} | undefined;
|
|
16
|
+
/** Whether two authors are the one person typing: the same kind and id (any tab of theirs), or the same name where neither has an id. */
|
|
17
|
+
export declare function sameTypist(a: Author, b: Author): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* WHAT A RUN OF TYPING DID: the field these ops typed into and how much,
|
|
20
|
+
* when every one of them is a keystroke (`type-text`) into that one field —
|
|
21
|
+
* a batch a person typed, or several in a row. None for anything else: an
|
|
22
|
+
* act, an undo, an op withheld from the reader, typing into two fields.
|
|
23
|
+
*/
|
|
24
|
+
export declare function typedRun(ops: readonly Operation[]): TypedRun | undefined;
|
|
25
|
+
/** Two runs of typing into one field as one: the counts added. */
|
|
26
|
+
export declare const joinRuns: (a: TypedRun, b: TypedRun) => TypedRun;
|
|
27
|
+
/** How much a run changed, in the brackets a sentence ends with: "(+42 −3)", "(+5)", "(−3)". */
|
|
28
|
+
export declare function typedCounts(run: Pick<TypedRun, "inserted" | "removed">): string;
|
|
29
|
+
type Declared = {
|
|
30
|
+
tryDefinition(kind: string): unknown;
|
|
31
|
+
};
|
|
32
|
+
type Records = {
|
|
33
|
+
getNode(id: string): unknown;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* A RUN OF TYPING, AS A CHANGE IS SAID — "Wrote in Kitchen's notes (+42
|
|
37
|
+
* −3)", the field in the declaration's words, named with its record when a
|
|
38
|
+
* graph is handed that holds it; "Wrote in Notes (+42 −3)" without one, or
|
|
39
|
+
* where the record is named beside it (`named: false`).
|
|
40
|
+
*/
|
|
41
|
+
export declare function typingWords(run: Pick<TypedRun, "node" | "field" | "inserted" | "removed">, schema: Declared, graph?: Records, named?: boolean): string;
|
|
42
|
+
/** Who wrote and what, in one sentence: "Ada wrote in Notes (+42 −3)". */
|
|
43
|
+
export declare function typingSentence(name: string, run: Pick<TypedRun, "node" | "field" | "inserted" | "removed">, schema: Declared, graph?: Records): string;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=typing-words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing-words.d.ts","sourceRoot":"","sources":["../../src/text/typing-words.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAazD,4FAA4F;AAC5F,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,0JAA0J;AAC1J,wBAAgB,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIvG;AAED,yIAAyI;AACzI,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAIxD;AAQD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,GAAG,QAAQ,GAAG,SAAS,CAuBxE;AAED,kEAAkE;AAClE,eAAO,MAAM,QAAQ,GAAI,GAAG,QAAQ,EAAE,GAAG,QAAQ,KAAG,QAAiH,CAAC;AAEtK,gGAAgG;AAChG,wBAAgB,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC,GAAG,MAAM,CAG/E;AAED,KAAK,QAAQ,GAAG;IAAE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AACzD,KAAK,OAAO,GAAG;IAAE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,UAAO,GAAG,MAAM,CAMnJ;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAGtJ"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { capitalize } from "../capital.js";
|
|
2
|
+
import { isUnset } from "../graph/primitives.js";
|
|
3
|
+
import { fieldWords, labelOf } from "../schema/define-node.js";
|
|
4
|
+
import { TYPE_TEXT } from "./typing-hook.js";
|
|
5
|
+
/** The field a keystroke op typed into, by its call: `type-text`'s node and field. None for an undo, an op withheld from the reader, or any other act. */
|
|
6
|
+
export function typedField(op) {
|
|
7
|
+
if (op.withheld === true || op.undoes !== undefined || op.mutation?.name !== TYPE_TEXT)
|
|
8
|
+
return undefined;
|
|
9
|
+
const { node, field } = (op.mutation.args ?? {});
|
|
10
|
+
return typeof node === "string" && typeof field === "string" ? { node, field } : undefined;
|
|
11
|
+
}
|
|
12
|
+
/** Whether two authors are the one person typing: the same kind and id (any tab of theirs), or the same name where neither has an id. */
|
|
13
|
+
export function sameTypist(a, b) {
|
|
14
|
+
if (a.kind !== b.kind)
|
|
15
|
+
return false;
|
|
16
|
+
if (a.id !== undefined || b.id !== undefined)
|
|
17
|
+
return a.id === b.id && a.onBehalfOf === b.onBehalfOf;
|
|
18
|
+
return (a.name ?? "") === (b.name ?? "");
|
|
19
|
+
}
|
|
20
|
+
const characters = (text) => {
|
|
21
|
+
let count = 0;
|
|
22
|
+
for (const _ of text)
|
|
23
|
+
count++;
|
|
24
|
+
return count;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* WHAT A RUN OF TYPING DID: the field these ops typed into and how much,
|
|
28
|
+
* when every one of them is a keystroke (`type-text`) into that one field —
|
|
29
|
+
* a batch a person typed, or several in a row. None for anything else: an
|
|
30
|
+
* act, an undo, an op withheld from the reader, typing into two fields.
|
|
31
|
+
*/
|
|
32
|
+
export function typedRun(ops) {
|
|
33
|
+
if (ops.length === 0)
|
|
34
|
+
return undefined;
|
|
35
|
+
const into = typedField(ops[0]);
|
|
36
|
+
if (!into)
|
|
37
|
+
return undefined;
|
|
38
|
+
let inserted = 0;
|
|
39
|
+
let removed = 0;
|
|
40
|
+
for (const op of ops) {
|
|
41
|
+
const field = typedField(op);
|
|
42
|
+
if (!field || field.node !== into.node || field.field !== into.field)
|
|
43
|
+
return undefined;
|
|
44
|
+
for (const primitive of op.primitives) {
|
|
45
|
+
if (primitive.op === "splice-text" && primitive.id === into.node && primitive.field === into.field) {
|
|
46
|
+
inserted += characters(primitive.inserted);
|
|
47
|
+
removed += characters(primitive.removed);
|
|
48
|
+
}
|
|
49
|
+
else if (primitive.op === "patch-node" && primitive.id === into.node && Object.prototype.hasOwnProperty.call(primitive.after, into.field)) {
|
|
50
|
+
// The first text, written whole into a field holding none.
|
|
51
|
+
const before = primitive.before[into.field];
|
|
52
|
+
const after = primitive.after[into.field];
|
|
53
|
+
inserted += typeof after === "string" ? characters(after) : 0;
|
|
54
|
+
removed += typeof before === "string" && !isUnset(before) ? characters(before) : 0;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { ...into, inserted, removed };
|
|
59
|
+
}
|
|
60
|
+
/** Two runs of typing into one field as one: the counts added. */
|
|
61
|
+
export const joinRuns = (a, b) => ({ node: a.node, field: a.field, inserted: a.inserted + b.inserted, removed: a.removed + b.removed });
|
|
62
|
+
/** How much a run changed, in the brackets a sentence ends with: "(+42 −3)", "(+5)", "(−3)". */
|
|
63
|
+
export function typedCounts(run) {
|
|
64
|
+
const parts = [...(run.inserted > 0 || run.removed === 0 ? [`+${run.inserted}`] : []), ...(run.removed > 0 ? [`−${run.removed}`] : [])];
|
|
65
|
+
return `(${parts.join(" ")})`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A RUN OF TYPING, AS A CHANGE IS SAID — "Wrote in Kitchen's notes (+42
|
|
69
|
+
* −3)", the field in the declaration's words, named with its record when a
|
|
70
|
+
* graph is handed that holds it; "Wrote in Notes (+42 −3)" without one, or
|
|
71
|
+
* where the record is named beside it (`named: false`).
|
|
72
|
+
*/
|
|
73
|
+
export function typingWords(run, schema, graph, named = true) {
|
|
74
|
+
const record = graph?.getNode(run.node);
|
|
75
|
+
const definition = record ? schema.tryDefinition(record.kind) : undefined;
|
|
76
|
+
const field = fieldWords(definition, run.field);
|
|
77
|
+
const where = record && named ? `${labelOf(definition, record)}'s ${field.toLowerCase()}` : field;
|
|
78
|
+
return `Wrote in ${where} ${typedCounts(run)}`;
|
|
79
|
+
}
|
|
80
|
+
/** Who wrote and what, in one sentence: "Ada wrote in Notes (+42 −3)". */
|
|
81
|
+
export function typingSentence(name, run, schema, graph) {
|
|
82
|
+
const said = typingWords(run, schema, graph);
|
|
83
|
+
return `${capitalize(name)} ${said.charAt(0).toLowerCase()}${said.slice(1)}`;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=typing-words.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing-words.js","sourceRoot":"","sources":["../../src/text/typing-words.ts"],"names":[],"mappings":"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"}
|
package/dist/tidying.d.ts
CHANGED
|
@@ -8,9 +8,9 @@ import type { ApplyOptions, ApplyResult, Store } from "./store.js";
|
|
|
8
8
|
export { declinedIn, declinesIn, meaningKey, suggestionKey, tidyingOf, tidyingRefusal } from "./ops/tidying.js";
|
|
9
9
|
export type { ActMeanings } from "./ops/tidying.js";
|
|
10
10
|
export { isDismissed, suggestionsIn } from "./ops/suggestions.js";
|
|
11
|
-
export type { Dismissal, Suggestion, WaitingOptions } from "./ops/suggestions.js";
|
|
12
|
-
export { digestWords, foldDigests, isSuggestionBatch } from "./ops/digest.js";
|
|
13
|
-
export type { ActivityRow } from "./ops/digest.js";
|
|
11
|
+
export type { Dismissal, DismissalStore, Suggestion, WaitingOptions } from "./ops/suggestions.js";
|
|
12
|
+
export { digestWords, foldDigests, isSuggestionBatch, typedRowWords } from "./ops/digest.js";
|
|
13
|
+
export type { ActivityRow, TypedRow } from "./ops/digest.js";
|
|
14
14
|
export { LEFT_ALONE } from "./graph/archived.js";
|
|
15
15
|
/**
|
|
16
16
|
* WHAT `suggest` TAKES: who suggests, and — required — what it is based on
|
package/dist/tidying.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tidying.d.ts","sourceRoot":"","sources":["../src/tidying.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE/F,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChH,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"tidying.d.ts","sourceRoot":"","sources":["../src/tidying.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE/F,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChH,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7F,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,0GAA0G;IAC1G,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CAC3C;AAqBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,CAuC5I;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,GAAE,kBAAuB,GAAG,SAAS,UAAU,EAAE,CAOhJ;AAWD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAAC,CAAC,CAAC,CAK7H;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAAC,CAAC,CAAC,CAK9H;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,GAAG,SAAS,CAGpH"}
|
package/dist/tidying.js
CHANGED
|
@@ -22,7 +22,7 @@ import { seatOf } from "./seat-of.js";
|
|
|
22
22
|
import { EMPTY_DIFF } from "./graph/diff.js";
|
|
23
23
|
export { declinedIn, declinesIn, meaningKey, suggestionKey, tidyingOf, tidyingRefusal } from "./ops/tidying.js";
|
|
24
24
|
export { isDismissed, suggestionsIn } from "./ops/suggestions.js";
|
|
25
|
-
export { digestWords, foldDigests, isSuggestionBatch } from "./ops/digest.js";
|
|
25
|
+
export { digestWords, foldDigests, isSuggestionBatch, typedRowWords } from "./ops/digest.js";
|
|
26
26
|
export { LEFT_ALONE } from "./graph/archived.js";
|
|
27
27
|
const keptOf = (store) => store;
|
|
28
28
|
const given = (key, value) => (value === undefined ? {} : { [key]: value });
|
package/dist/tidying.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tidying.js","sourceRoot":"","sources":["../src/tidying.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAmC,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAI5E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEhH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"tidying.js","sourceRoot":"","sources":["../src/tidying.ts"],"names":[],"mappings":"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"}
|
package/dist/typing.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { compose as composeSplices, transform as transformSplices } from "./text/transform.js";
|
|
2
|
+
export { diffSplice } from "./text/diff.js";
|
|
3
|
+
export { collaborativeFieldOf, isCollaborativeField } from "./schema/collaborative-of.js";
|
|
4
|
+
//# sourceMappingURL=typing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing.d.ts","sourceRoot":"","sources":["../src/typing.ts"],"names":[],"mappings":"AAmNA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/typing.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { inverseOf } from "./ops/inverse.js";
|
|
2
|
+
import { typeTextMutation, typeTextVia } from "./mutations/type-text.js";
|
|
3
|
+
import { collaborativeFieldOf } from "./schema/collaborative-of.js";
|
|
4
|
+
import { carried, firstText, splicesOn, textAt, wholeAsSplice, writesWhole } from "./text/since.js";
|
|
5
|
+
import { transform } from "./text/transform.js";
|
|
6
|
+
import { TYPE_TEXT, TYPING } from "./text/typing-hook.js";
|
|
7
|
+
/**
|
|
8
|
+
* A WHOLE VALUE WRITTEN OVER TEXT TYPED TOGETHER IS A SPLICE: a patch an
|
|
9
|
+
* act, an edit, an agent or an import writes to such a field, where the
|
|
10
|
+
* record holds text, is rewritten into the one splice that makes the change
|
|
11
|
+
* — against the text the caller read at the revision `base` names for it,
|
|
12
|
+
* else against the text now. A field that holds no text yet, or is cleared,
|
|
13
|
+
* is written whole, as before. Read in order, so a record the same op made
|
|
14
|
+
* or a field it already changed is read as it will be.
|
|
15
|
+
*/
|
|
16
|
+
function asSplices(store, primitives, base) {
|
|
17
|
+
if (!primitives.some((one) => one.op === "patch-node"))
|
|
18
|
+
return [...primitives];
|
|
19
|
+
const made = new Set();
|
|
20
|
+
const touched = new Set();
|
|
21
|
+
const out = [];
|
|
22
|
+
for (const primitive of primitives) {
|
|
23
|
+
if (primitive.op === "add-node")
|
|
24
|
+
made.add(primitive.node.id);
|
|
25
|
+
if (primitive.op !== "patch-node" || made.has(primitive.id)) {
|
|
26
|
+
if (primitive.op === "splice-text")
|
|
27
|
+
touched.add(`${primitive.id}\u0000${primitive.field}`);
|
|
28
|
+
out.push(primitive);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const record = store.graph.getNode(primitive.id);
|
|
32
|
+
const before = {};
|
|
33
|
+
const after = {};
|
|
34
|
+
const splices = [];
|
|
35
|
+
for (const [field, value] of Object.entries(primitive.after)) {
|
|
36
|
+
const current = record?.[field];
|
|
37
|
+
const at = `${primitive.id}\u0000${field}`;
|
|
38
|
+
if (typeof value === "string" && typeof current === "string" && current !== "" && !touched.has(at) && collaborativeFieldOf(store.schema, record?.kind, field)) {
|
|
39
|
+
const claimed = base?.find((entry) => entry.node === primitive.id && entry.field === field);
|
|
40
|
+
const splice = wholeAsSplice(current, value, claimed ? textAt(store.log.all(), store.log.horizon, primitive.id, field, claimed.rev, current) : undefined);
|
|
41
|
+
if (splice) {
|
|
42
|
+
splices.push({ op: "splice-text", id: primitive.id, field, ...splice });
|
|
43
|
+
touched.add(at);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Merged, it changes nothing: written as the caller wrote it, a patch of what the field already holds.
|
|
47
|
+
}
|
|
48
|
+
before[field] = primitive.before[field];
|
|
49
|
+
after[field] = value;
|
|
50
|
+
touched.add(at);
|
|
51
|
+
}
|
|
52
|
+
if (Object.keys(after).length > 0)
|
|
53
|
+
out.push(splices.length > 0 ? { op: "patch-node", id: primitive.id, before, after } : primitive);
|
|
54
|
+
out.push(...splices);
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* WHAT EACH OP OF AN UNDO PUTS BACK, newest first, as the store appends
|
|
60
|
+
* them: its inverse, with each splice in it carried over every splice of
|
|
61
|
+
* the same field that came after it — the rest of its own op, the log
|
|
62
|
+
* since, and what the undo has put back already. So an undo of one
|
|
63
|
+
* person's typing takes back only their words: text somebody else typed
|
|
64
|
+
* since stays where it went, and text of theirs somebody else already
|
|
65
|
+
* deleted shrinks out of what is taken back.
|
|
66
|
+
*/
|
|
67
|
+
function undone(log, ops) {
|
|
68
|
+
const putBack = [];
|
|
69
|
+
return [...ops]
|
|
70
|
+
.sort((a, b) => b.seq - a.seq)
|
|
71
|
+
.map((op) => {
|
|
72
|
+
const inverse = inverseOf(op);
|
|
73
|
+
if (!inverse.some((one) => one.op === "splice-text")) {
|
|
74
|
+
putBack.push(...inverse);
|
|
75
|
+
return { op, primitives: inverse };
|
|
76
|
+
}
|
|
77
|
+
const later = log.filter((one) => one.seq > op.seq).flatMap((one) => one.primitives);
|
|
78
|
+
const count = op.primitives.length;
|
|
79
|
+
const out = [];
|
|
80
|
+
inverse.forEach((one, at) => {
|
|
81
|
+
if (one.op !== "splice-text")
|
|
82
|
+
return void out.push(one);
|
|
83
|
+
const splice = carried(one, splicesOn([...op.primitives.slice(count - at), ...later, ...putBack, ...out], one.id, one.field));
|
|
84
|
+
if (splice.removed !== "" || splice.inserted !== "")
|
|
85
|
+
out.push({ op: "splice-text", id: one.id, field: one.field, ...splice });
|
|
86
|
+
});
|
|
87
|
+
putBack.push(...out);
|
|
88
|
+
return { op, primitives: out };
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* TYPING ON TEXT ONLY TYPED, SINCE, STANDS IN NOBODY'S WAY: a later op that
|
|
93
|
+
* only splices, into fields the undone ops wrote no other way than by
|
|
94
|
+
* splicing, read the record for its text, and the undo carries its inverse
|
|
95
|
+
* over that typing. Text written whole since — or the record taken out —
|
|
96
|
+
* still blocks an undo of typing into it, whatever that op read.
|
|
97
|
+
*/
|
|
98
|
+
function aside(targets, later) {
|
|
99
|
+
const wholes = (node, field) => targets.some((one) => writesWhole(one, node, field));
|
|
100
|
+
// An undo of typing carried to nothing — its words deleted already — put nothing back, and is in nobody's way.
|
|
101
|
+
if (later.undoes !== undefined && later.primitives.length === 0 && targets.some((one) => one.op === "splice-text"))
|
|
102
|
+
return true;
|
|
103
|
+
if (later.primitives.length > 0 && later.primitives.every((one) => one.op === "splice-text" && !wholes(one.id, one.field)))
|
|
104
|
+
return true;
|
|
105
|
+
return targets.flatMap((one) => (one.op === "splice-text" && later.primitives.some((other) => writesWhole(other, one.id, one.field)) ? [one.id] : []));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* A CLIENT'S OWN TYPING, CARRIED OVER WHAT THE SERVER SAYS (Roadmap
|
|
109
|
+
* f-collab-text, phase 3). A client keeps its keystrokes shown and pending
|
|
110
|
+
* while the server is asked, and when the server's ops land under them
|
|
111
|
+
* (`Store.rebase`) each keystroke is carried over every splice they took
|
|
112
|
+
* on its field — the client's half of the transform, so it reaches the
|
|
113
|
+
* text the server will (TP1). A keystroke is applied again where it now
|
|
114
|
+
* stands, against the text then (no `rev`), as the calls of its batch:
|
|
115
|
+
*
|
|
116
|
+
* - a landed op of somebody else's: each splice in it carried over this
|
|
117
|
+
* client's keystrokes on the field in order, and they over it;
|
|
118
|
+
* - the server's op for one of this client's batches (an echo): that
|
|
119
|
+
* batch's keystrokes are what it made, and the ones after it already
|
|
120
|
+
* stand on it;
|
|
121
|
+
* - a batch of this client's taken back with no echo (refused): the
|
|
122
|
+
* keystrokes after it carried over its inverse, so they no longer stand
|
|
123
|
+
* on what it typed.
|
|
124
|
+
*
|
|
125
|
+
* A batch that does anything but splice, or one on a field written whole
|
|
126
|
+
* meanwhile, is left to be applied again by its calls, as before.
|
|
127
|
+
*/
|
|
128
|
+
function carriedTyping(rolledBack, landed, pending) {
|
|
129
|
+
const out = new Map();
|
|
130
|
+
const typed = [];
|
|
131
|
+
const untyped = new Set();
|
|
132
|
+
for (const op of rolledBack) {
|
|
133
|
+
const only = op.primitives[0];
|
|
134
|
+
const args = op.mutation?.args;
|
|
135
|
+
// A keystroke is a splice, or — the first into an empty field — its text written whole, which is its insert at 0.
|
|
136
|
+
const splice = op.mutation?.name !== TYPE_TEXT || op.primitives.length !== 1 || !only ? undefined : only.op === "splice-text" ? only : firstText(only, String(args?.node), String(args?.field));
|
|
137
|
+
if (splice)
|
|
138
|
+
typed.push({ batch: op.batch, node: String(args?.node), field: String(args?.field), splice });
|
|
139
|
+
else
|
|
140
|
+
untyped.add(op.batch);
|
|
141
|
+
}
|
|
142
|
+
if (typed.length === 0)
|
|
143
|
+
return out;
|
|
144
|
+
const key = (one) => `${one.node}\u0000${one.field}`;
|
|
145
|
+
const whole = new Set();
|
|
146
|
+
const settled = new Set(rolledBack.map((op) => op.batch).filter((batch) => !pending.includes(batch)));
|
|
147
|
+
let mine = typed;
|
|
148
|
+
for (const op of landed) {
|
|
149
|
+
if (settled.has(op.batch)) {
|
|
150
|
+
// The server's own op for a batch of this client's: it is what that batch typed.
|
|
151
|
+
mine = mine.filter((one) => one.batch !== op.batch);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
for (const primitive of op.primitives) {
|
|
155
|
+
if (primitive.op === "add-edge" || primitive.op === "remove-edge")
|
|
156
|
+
continue;
|
|
157
|
+
const id = primitive.op === "add-node" || primitive.op === "remove-node" ? primitive.node.id : primitive.id;
|
|
158
|
+
for (const field of new Set(mine.filter((one) => one.node === id).map((one) => one.field))) {
|
|
159
|
+
// A splice of somebody else's — or their first text into a field empty here too — carried over this client's keystrokes on the field, and they over it.
|
|
160
|
+
let over = primitive.op === "splice-text" ? (primitive.field === field ? primitive : undefined) : firstText(primitive, id, field);
|
|
161
|
+
for (const one of mine) {
|
|
162
|
+
if (one.node !== id || one.field !== field)
|
|
163
|
+
continue;
|
|
164
|
+
if (over)
|
|
165
|
+
[over, one.splice] = transform(over, one.splice);
|
|
166
|
+
else if (writesWhole(primitive, one.node, one.field))
|
|
167
|
+
whole.add(key(one));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Taken back with no echo: what came after it no longer stands on it.
|
|
173
|
+
mine.forEach((one, at) => {
|
|
174
|
+
if (!settled.has(one.batch))
|
|
175
|
+
return;
|
|
176
|
+
let back = { at: one.splice.at, removed: one.splice.inserted, inserted: one.splice.removed };
|
|
177
|
+
for (const later of mine.slice(at + 1))
|
|
178
|
+
if (key(later) === key(one))
|
|
179
|
+
[back, later.splice] = transform(back, later.splice);
|
|
180
|
+
});
|
|
181
|
+
for (const batch of pending) {
|
|
182
|
+
const ones = mine.filter((one) => one.batch === batch);
|
|
183
|
+
if (ones.length === 0 || untyped.has(batch) || ones.some((one) => whole.has(key(one))))
|
|
184
|
+
continue;
|
|
185
|
+
out.set(batch, ones.map((one) => ({ name: TYPE_TEXT, args: { node: one.node, field: one.field, at: one.splice.at, remove: one.splice.removed.length, insert: one.splice.inserted } })));
|
|
186
|
+
}
|
|
187
|
+
return out;
|
|
188
|
+
}
|
|
189
|
+
TYPING.typeText = typeTextMutation;
|
|
190
|
+
TYPING.via = typeTextVia;
|
|
191
|
+
TYPING.collaborative = collaborativeFieldOf;
|
|
192
|
+
TYPING.asSplices = asSplices;
|
|
193
|
+
TYPING.undone = undone;
|
|
194
|
+
TYPING.aside = aside;
|
|
195
|
+
TYPING.carried = carriedTyping;
|
|
196
|
+
/*
|
|
197
|
+
* The transform and the reading of which fields are typed together, for a
|
|
198
|
+
* server and an editor: here, not on `@graview/core`, so a page that never
|
|
199
|
+
* types carries none of it.
|
|
200
|
+
*/
|
|
201
|
+
export { compose as composeSplices, transform as transformSplices } from "./text/transform.js";
|
|
202
|
+
export { diffSplice } from "./text/diff.js";
|
|
203
|
+
export { collaborativeFieldOf, isCollaborativeField } from "./schema/collaborative-of.js";
|
|
204
|
+
//# sourceMappingURL=typing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing.js","sourceRoot":"","sources":["../src/typing.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/dist/who.d.ts
CHANGED
package/dist/who.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"who.d.ts","sourceRoot":"","sources":["../src/who.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"who.d.ts","sourceRoot":"","sources":["../src/who.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,YAAY,CAAC,EAC3D,KAAK,EAAE;IACL,QAAQ,CAAC,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;KAAE,CAAC;IAC9G,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;IACtF,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,GACA,MAAM,CAgCR"}
|
package/dist/who.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { authorKindOf } from "./ops/types.js";
|
|
1
2
|
import { labelOf } from "./schema/define-node.js";
|
|
2
3
|
/**
|
|
3
4
|
* AN AUTHOR BY NAME. A principal's id is its user node's id where the app
|
|
@@ -17,8 +18,10 @@ export function nameOfAuthor(author, where) {
|
|
|
17
18
|
const { onBehalfOf, ...itself } = author;
|
|
18
19
|
return `${nameOfAuthor(itself, where)}, for ${nameOfAuthor(onBehalfOf, where)}`;
|
|
19
20
|
}
|
|
21
|
+
// A kind a newer build wrote reads as the app itself (`authorKindOf`).
|
|
22
|
+
const kind = authorKindOf(author);
|
|
20
23
|
if (author.id === undefined)
|
|
21
|
-
return author.name ?? (
|
|
24
|
+
return author.name ?? (kind === "agent" ? "an agent" : kind === "visitor" ? "a visitor" : kind);
|
|
22
25
|
const node = where.graph.getNode(author.id);
|
|
23
26
|
if (node)
|
|
24
27
|
return labelOf(where.schema.tryDefinition(node.kind), node);
|
|
@@ -44,7 +47,7 @@ export function nameOfAuthor(author, where) {
|
|
|
44
47
|
return "a visitor via a form";
|
|
45
48
|
// A plain name ("kai") is how a host without seats names somebody; a namespaced id is not a name.
|
|
46
49
|
if (/[:_/]/.test(author.id))
|
|
47
|
-
return { human: "somebody", agent: "an agent", rule: "a rule", system: "the system" }[
|
|
50
|
+
return { human: "somebody", visitor: "a visitor", agent: "an agent", rule: "a rule", system: "the system" }[kind];
|
|
48
51
|
return author.id;
|
|
49
52
|
}
|
|
50
53
|
//# sourceMappingURL=who.js.map
|
package/dist/who.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"who.js","sourceRoot":"","sources":["../src/who.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"who.js","sourceRoot":"","sources":["../src/who.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAmBlD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,MAA2D,EAC3D,KAMC;IAED;;;OAGG;IACH,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IAClF,CAAC;IACD,uEAAuE;IACvE,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7H,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;IACxE,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACzH,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAC/B,sHAAsH;IACtH,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACpC;;;;;OAKG;IACH,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAAE,OAAO,aAAa,CAAC;IAC5D,qHAAqH;IACrH,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,sBAAsB,CAAC;IACjE,kGAAkG;IAClG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IAC/I,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graview/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.51",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -93,10 +93,18 @@
|
|
|
93
93
|
"types": "./dist/seat.d.ts",
|
|
94
94
|
"default": "./dist/seat.js"
|
|
95
95
|
},
|
|
96
|
+
"./publishing": {
|
|
97
|
+
"types": "./dist/publishing.d.ts",
|
|
98
|
+
"default": "./dist/publishing.js"
|
|
99
|
+
},
|
|
96
100
|
"./field-sight": {
|
|
97
101
|
"types": "./dist/field-sight.d.ts",
|
|
98
102
|
"default": "./dist/field-sight.js"
|
|
99
103
|
},
|
|
104
|
+
"./typing": {
|
|
105
|
+
"types": "./dist/typing.d.ts",
|
|
106
|
+
"default": "./dist/typing.js"
|
|
107
|
+
},
|
|
100
108
|
"./search": {
|
|
101
109
|
"types": "./dist/search.d.ts",
|
|
102
110
|
"default": "./dist/search.js"
|
|
@@ -181,7 +189,9 @@
|
|
|
181
189
|
],
|
|
182
190
|
"sideEffects": [
|
|
183
191
|
"./dist/field-sight.js",
|
|
184
|
-
"./src/field-sight.ts"
|
|
192
|
+
"./src/field-sight.ts",
|
|
193
|
+
"./dist/publishing.js",
|
|
194
|
+
"./src/publishing.ts"
|
|
185
195
|
],
|
|
186
196
|
"repository": {
|
|
187
197
|
"type": "git",
|