@graview/core 0.1.64 → 0.1.66

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 (142) hide show
  1. package/dist/archived-seen.js +2 -2
  2. package/dist/archived-seen.js.map +1 -1
  3. package/dist/capital.d.ts +8 -0
  4. package/dist/capital.d.ts.map +1 -1
  5. package/dist/capital.js +8 -0
  6. package/dist/capital.js.map +1 -1
  7. package/dist/catalog.d.ts +32 -2
  8. package/dist/catalog.d.ts.map +1 -1
  9. package/dist/catalog.js +1 -0
  10. package/dist/catalog.js.map +1 -1
  11. package/dist/columns.js +2 -2
  12. package/dist/columns.js.map +1 -1
  13. package/dist/compose.d.ts +25 -1
  14. package/dist/compose.d.ts.map +1 -1
  15. package/dist/compose.js +56 -0
  16. package/dist/compose.js.map +1 -1
  17. package/dist/conformance/index.d.ts +8 -0
  18. package/dist/conformance/index.d.ts.map +1 -1
  19. package/dist/conformance/index.js +4 -0
  20. package/dist/conformance/index.js.map +1 -1
  21. package/dist/conformance/plan-host.d.ts +73 -0
  22. package/dist/conformance/plan-host.d.ts.map +1 -0
  23. package/dist/conformance/plan-host.js +64 -0
  24. package/dist/conformance/plan-host.js.map +1 -0
  25. package/dist/conformance/told-host.d.ts +40 -0
  26. package/dist/conformance/told-host.d.ts.map +1 -0
  27. package/dist/conformance/told-host.js +57 -0
  28. package/dist/conformance/told-host.js.map +1 -0
  29. package/dist/conformance/view-fork-host.d.ts +26 -0
  30. package/dist/conformance/view-fork-host.d.ts.map +1 -0
  31. package/dist/conformance/view-fork-host.js +47 -0
  32. package/dist/conformance/view-fork-host.js.map +1 -0
  33. package/dist/conformance/view-revision-host.d.ts +36 -0
  34. package/dist/conformance/view-revision-host.d.ts.map +1 -0
  35. package/dist/conformance/view-revision-host.js +42 -0
  36. package/dist/conformance/view-revision-host.js.map +1 -0
  37. package/dist/css/tables.d.ts.map +1 -1
  38. package/dist/css/tables.js +5 -1
  39. package/dist/css/tables.js.map +1 -1
  40. package/dist/document/compile.d.ts.map +1 -1
  41. package/dist/document/compile.js +6 -2
  42. package/dist/document/compile.js.map +1 -1
  43. package/dist/document.schema.json +2 -2
  44. package/dist/friction-record.d.ts +2 -1
  45. package/dist/friction-record.d.ts.map +1 -1
  46. package/dist/friction.d.ts +4 -0
  47. package/dist/friction.d.ts.map +1 -1
  48. package/dist/friction.js +5 -4
  49. package/dist/friction.js.map +1 -1
  50. package/dist/graph/graph.d.ts.map +1 -1
  51. package/dist/graph/graph.js +3 -3
  52. package/dist/graph/graph.js.map +1 -1
  53. package/dist/index.d.ts +4 -3
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/intelligence-bridge.d.ts +9 -0
  58. package/dist/intelligence-bridge.d.ts.map +1 -1
  59. package/dist/mutations/derive-edits.d.ts.map +1 -1
  60. package/dist/mutations/derive-edits.js +3 -5
  61. package/dist/mutations/derive-edits.js.map +1 -1
  62. package/dist/ops/declines.d.ts +41 -0
  63. package/dist/ops/declines.d.ts.map +1 -0
  64. package/dist/ops/declines.js +118 -0
  65. package/dist/ops/declines.js.map +1 -0
  66. package/dist/ops/log.d.ts +12 -0
  67. package/dist/ops/log.d.ts.map +1 -1
  68. package/dist/ops/log.js.map +1 -1
  69. package/dist/ops/provenance.js +2 -2
  70. package/dist/ops/provenance.js.map +1 -1
  71. package/dist/ops/tidying.d.ts +23 -17
  72. package/dist/ops/tidying.d.ts.map +1 -1
  73. package/dist/ops/tidying.js +1 -76
  74. package/dist/ops/tidying.js.map +1 -1
  75. package/dist/plan-edits.d.ts +55 -0
  76. package/dist/plan-edits.d.ts.map +1 -0
  77. package/dist/plan-edits.js +84 -0
  78. package/dist/plan-edits.js.map +1 -0
  79. package/dist/presence.d.ts +10 -0
  80. package/dist/presence.d.ts.map +1 -1
  81. package/dist/presence.js.map +1 -1
  82. package/dist/revisions/beyond.d.ts +56 -0
  83. package/dist/revisions/beyond.d.ts.map +1 -0
  84. package/dist/revisions/beyond.js +112 -0
  85. package/dist/revisions/beyond.js.map +1 -0
  86. package/dist/revisions/pictured.d.ts +52 -0
  87. package/dist/revisions/pictured.d.ts.map +1 -0
  88. package/dist/revisions/pictured.js +85 -0
  89. package/dist/revisions/pictured.js.map +1 -0
  90. package/dist/revisions/pinned-dates.d.ts +30 -0
  91. package/dist/revisions/pinned-dates.d.ts.map +1 -0
  92. package/dist/revisions/pinned-dates.js +120 -0
  93. package/dist/revisions/pinned-dates.js.map +1 -0
  94. package/dist/revisions/problems.d.ts +57 -0
  95. package/dist/revisions/problems.d.ts.map +1 -0
  96. package/dist/revisions/problems.js +51 -0
  97. package/dist/revisions/problems.js.map +1 -0
  98. package/dist/revisions/sections.d.ts +18 -0
  99. package/dist/revisions/sections.d.ts.map +1 -0
  100. package/dist/revisions/sections.js +91 -0
  101. package/dist/revisions/sections.js.map +1 -0
  102. package/dist/revisions/touched.d.ts +59 -0
  103. package/dist/revisions/touched.d.ts.map +1 -0
  104. package/dist/revisions/touched.js +72 -0
  105. package/dist/revisions/touched.js.map +1 -0
  106. package/dist/revisions/view.d.ts +71 -0
  107. package/dist/revisions/view.d.ts.map +1 -0
  108. package/dist/revisions/view.js +338 -0
  109. package/dist/revisions/view.js.map +1 -0
  110. package/dist/revisions.d.ts +15 -0
  111. package/dist/revisions.d.ts.map +1 -0
  112. package/dist/revisions.js +24 -0
  113. package/dist/revisions.js.map +1 -0
  114. package/dist/scaffold/ui.d.ts.map +1 -1
  115. package/dist/scaffold/ui.js +30 -44
  116. package/dist/scaffold/ui.js.map +1 -1
  117. package/dist/schema/define-node.d.ts +7 -0
  118. package/dist/schema/define-node.d.ts.map +1 -1
  119. package/dist/schema/define-node.js +8 -1
  120. package/dist/schema/define-node.js.map +1 -1
  121. package/dist/seen.js +1 -1
  122. package/dist/seen.js.map +1 -1
  123. package/dist/store.d.ts +5 -1
  124. package/dist/store.d.ts.map +1 -1
  125. package/dist/store.js +12 -4
  126. package/dist/store.js.map +1 -1
  127. package/dist/tidying.d.ts +5 -2
  128. package/dist/tidying.d.ts.map +1 -1
  129. package/dist/tidying.js +12 -3
  130. package/dist/tidying.js.map +1 -1
  131. package/dist/told.d.ts +306 -0
  132. package/dist/told.d.ts.map +1 -0
  133. package/dist/told.js +409 -0
  134. package/dist/told.js.map +1 -0
  135. package/dist/version.d.ts +1 -1
  136. package/dist/version.js +1 -1
  137. package/dist/views/kept.d.ts +96 -0
  138. package/dist/views/kept.d.ts.map +1 -1
  139. package/dist/views/kept.js +75 -0
  140. package/dist/views/kept.js.map +1 -1
  141. package/dist/workflows/step-classify.js +1 -1
  142. package/package.json +9 -1
@@ -0,0 +1,91 @@
1
+ /*
2
+ * THE SECTIONS OF A DRAWING, BY NAME (Roadmap f-revisions-say-what-broke).
3
+ *
4
+ * What a person would call a part of a page: a heading's words, and a
5
+ * landmark — a `<section>` or a `role="region"` named by its `aria-label`,
6
+ * its `aria-labelledby` or its own first heading; a `<nav>`, a `<main>`, a
7
+ * header, a footer or an aside, by its name or by what it is. A worker
8
+ * view's host draws a landmark's element as a `<div>` that says what it was
9
+ * asked to be (`data-graview-as`), and that is read as the landmark.
10
+ *
11
+ * Read from anything shaped like an element — a page's DOM, a headless
12
+ * run's tree (`@graview/guest/headless`) — and nothing is laid out here.
13
+ */
14
+ const HEADING = /^h([1-6])$/;
15
+ /** The landmarks a page is read by, and what one with no name of its own is called. */
16
+ const LANDMARKS = {
17
+ section: null,
18
+ article: null,
19
+ form: null,
20
+ region: null,
21
+ nav: "navigation",
22
+ navigation: "navigation",
23
+ main: "main content",
24
+ header: "header",
25
+ banner: "header",
26
+ footer: "footer",
27
+ contentinfo: "footer",
28
+ aside: "aside",
29
+ complementary: "aside",
30
+ search: "search",
31
+ };
32
+ const isElement = (node) => typeof node === "object" && node !== null && typeof node.getAttribute === "function" && (node.nodeType === undefined || node.nodeType === 1);
33
+ const said = (text) => (text ?? "").replace(/\s+/g, " ").trim();
34
+ /** Every element under `root`, `root` first, in document order. */
35
+ export function* elementsOf(root) {
36
+ yield root;
37
+ for (const child of Array.from(root.childNodes))
38
+ if (isElement(child))
39
+ yield* elementsOf(child);
40
+ }
41
+ /** What an element is asked to be: the landmark a host drew as a `<div>`, else its own name. */
42
+ const tagOf = (element) => (element.getAttribute("data-graview-as") ?? element.localName ?? "").toLowerCase();
43
+ /** The heading level an element is, if it is one. */
44
+ function headingLevel(element) {
45
+ const tag = HEADING.exec(tagOf(element));
46
+ if (tag)
47
+ return Number(tag[1]);
48
+ return element.getAttribute("role") === "heading" ? Number(element.getAttribute("aria-level") ?? 2) : undefined;
49
+ }
50
+ /** The sections a drawing has, each once by name, in document order. */
51
+ export function sectionsOfDrawing(root) {
52
+ const all = [...elementsOf(root)];
53
+ const byId = new Map();
54
+ for (const element of all) {
55
+ const id = element.getAttribute("id");
56
+ if (id)
57
+ byId.set(id, element);
58
+ }
59
+ const out = [];
60
+ const seen = new Set();
61
+ const add = (name, as) => {
62
+ const key = name.toLowerCase();
63
+ if (!name || seen.has(key))
64
+ return;
65
+ seen.add(key);
66
+ out.push({ name: name.length > 80 ? `${name.slice(0, 79)}…` : name, as });
67
+ };
68
+ for (const element of all) {
69
+ if (element.getAttribute("aria-hidden") === "true" || element.getAttribute("hidden") !== null)
70
+ continue;
71
+ const level = headingLevel(element);
72
+ if (level !== undefined) {
73
+ add(said(element.textContent), "heading");
74
+ continue;
75
+ }
76
+ const tag = tagOf(element);
77
+ const role = (element.getAttribute("role") ?? "").toLowerCase();
78
+ const what = role in LANDMARKS ? role : tag in LANDMARKS ? tag : undefined;
79
+ if (!what)
80
+ continue;
81
+ const namedBy = (element.getAttribute("aria-labelledby") ?? "")
82
+ .split(/\s+/)
83
+ .flatMap((id) => (byId.get(id) ? [said(byId.get(id).textContent)] : []))
84
+ .join(" ");
85
+ const heading = [...elementsOf(element)].find((one) => one !== element && headingLevel(one) !== undefined);
86
+ const name = said(element.getAttribute("aria-label")) || namedBy || (heading ? said(heading.textContent) : "") || LANDMARKS[what] || "";
87
+ add(name, what === "region" ? "section" : what);
88
+ }
89
+ return out;
90
+ }
91
+ //# sourceMappingURL=sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/revisions/sections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { GraviewApp } from "../app.js";
2
+ import type { Primitive } from "../graph/primitives.js";
3
+ import type { AnySchema } from "../schema/schema.js";
4
+ import { type PinnedDate } from "./pinned-dates.js";
5
+ /** A view the host keeps, as its manifest says it, and its source where the host has it. */
6
+ export interface TouchedView {
7
+ readonly name: string;
8
+ readonly title?: string;
9
+ /** The kind it is a picture of, or "home". */
10
+ readonly attach: string;
11
+ readonly cardinality?: "one" | "many";
12
+ readonly hidden?: boolean;
13
+ /** The other kinds it is handed (its manifest's `reads.kinds`). */
14
+ readonly reads?: {
15
+ readonly kinds?: readonly string[];
16
+ };
17
+ /** Its script, read for a day it pins. */
18
+ readonly source?: string;
19
+ }
20
+ export interface PlacesTouchedOptions {
21
+ /** A record's kind by its id, for an op that names a record without carrying it (a field changed, a link made): `(id) => store.graph.getNode(id)?.kind`. */
22
+ readonly kindOf?: (id: string) => string | undefined;
23
+ /** The views the host keeps. */
24
+ readonly views?: readonly TouchedView[];
25
+ /** The app's today (`store.today() ?? isoToday()`): with it, a view's source is read for a day it pins. */
26
+ readonly today?: string;
27
+ readonly locale?: string;
28
+ }
29
+ /** A place that draws a record a change touched. */
30
+ export interface TouchedPlace {
31
+ readonly slug: string;
32
+ readonly title: string;
33
+ readonly address: string;
34
+ /** The kinds of the touched records it draws. */
35
+ readonly kinds: readonly string[];
36
+ /** The host's view that draws it, by name, when a script view does: what to look at after the change. */
37
+ readonly view?: string;
38
+ /** What that view's source pins a day to, each in a sentence. */
39
+ readonly pinned?: readonly PinnedDate[];
40
+ }
41
+ export interface PlacesTouched {
42
+ /** The kinds of the records the ops touched. */
43
+ readonly kinds: readonly string[];
44
+ readonly places: readonly TouchedPlace[];
45
+ readonly said: readonly string[];
46
+ /** "These appear on Home and Tasks. Home is drawn by a view (front): look at it after this change." */
47
+ readonly text: string;
48
+ }
49
+ /**
50
+ * THE PLACES THAT DRAW WHAT A COMMIT TOUCHED: given its ops (`Operation`s,
51
+ * or anything with their `primitives`), each place of the app — the home,
52
+ * a lens, a kind's list, a view the host keeps — that draws a record of a
53
+ * kind it made, changed, removed or linked, in the app's order, with the
54
+ * view that draws it and what that view pins a day to.
55
+ */
56
+ export declare function placesTouched<S extends AnySchema>(app: GraviewApp<S>, ops: readonly {
57
+ readonly primitives: readonly Primitive[];
58
+ }[], options?: PlacesTouchedOptions): PlacesTouched;
59
+ //# sourceMappingURL=touched.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touched.d.ts","sourceRoot":"","sources":["../../src/revisions/touched.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEjE,4FAA4F;AAC5F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IACxD,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,4JAA4J;IAC5J,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACrD,gCAAgC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,2GAA2G;IAC3G,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,yGAAyG;IACzG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,uGAAuG;IACvG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AA2BD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS;IAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,EAAE,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa,CA+BvL"}
@@ -0,0 +1,72 @@
1
+ import { placesOf } from "../app-places.js";
2
+ import { HOME_SLUG, OVERVIEW_SLUG } from "../places.js";
3
+ import { datesPinned } from "./pinned-dates.js";
4
+ const andList = (items) => (items.length <= 1 ? items.join("") : `${items.slice(0, -1).join(", ")} and ${items.at(-1)}`);
5
+ /** The kinds of the records a commit's primitives touch: a record made, changed or removed, and both ends of a link. */
6
+ function kindsTouched(ops, kindOf) {
7
+ const kinds = new Set();
8
+ const add = (kind) => kind !== undefined && kinds.add(kind);
9
+ for (const op of ops) {
10
+ for (const one of op.primitives ?? []) {
11
+ if (one.op === "add-node" || one.op === "remove-node")
12
+ add(one.node.kind);
13
+ else if (one.op === "patch-node" || one.op === "splice-text")
14
+ add(kindOf(one.id));
15
+ else if (one.op === "add-edge" || one.op === "remove-edge") {
16
+ add(kindOf(one.edge.from));
17
+ add(kindOf(one.edge.to));
18
+ }
19
+ }
20
+ }
21
+ return [...kinds];
22
+ }
23
+ /** The kinds a declared home's blocks list (`all('task')`), read from their text. */
24
+ function kindsOfDeclaredHome(home, kinds) {
25
+ const text = JSON.stringify(home ?? null);
26
+ return kinds.filter((kind) => new RegExp(`['"]${kind.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\\\?['"]`).test(text));
27
+ }
28
+ /**
29
+ * THE PLACES THAT DRAW WHAT A COMMIT TOUCHED: given its ops (`Operation`s,
30
+ * or anything with their `primitives`), each place of the app — the home,
31
+ * a lens, a kind's list, a view the host keeps — that draws a record of a
32
+ * kind it made, changed, removed or linked, in the app's order, with the
33
+ * view that draws it and what that view pins a day to.
34
+ */
35
+ export function placesTouched(app, ops, options = {}) {
36
+ const kinds = kindsTouched(ops, options.kindOf ?? (() => undefined));
37
+ const views = options.views ?? [];
38
+ const declared = app.schema.kinds;
39
+ const pinnedBy = (view, title) => view?.source !== undefined && options.today !== undefined ? datesPinned(view.source, { today: options.today, title, ...(options.locale ? { locale: options.locale } : {}) }) : [];
40
+ const places = [];
41
+ for (const place of placesOf(app, { views })) {
42
+ if (place.slug === OVERVIEW_SLUG)
43
+ continue;
44
+ let drawn;
45
+ let view;
46
+ if (place.slug === HOME_SLUG) {
47
+ view = views.find((one) => one.attach === "home");
48
+ drawn = view ? (view.reads?.kinds ?? []) : (app.home?.length ?? 0) > 0 ? kindsOfDeclaredHome(app.home, declared) : declared.filter((kind) => !(app.pages?.hide ?? []).includes(kind));
49
+ }
50
+ else {
51
+ view = place.view !== undefined ? views.find((one) => one.name === place.view) : undefined;
52
+ drawn = [...(place.over ?? (place.kind ? [place.kind] : [])), ...(view?.reads?.kinds ?? [])];
53
+ }
54
+ const touched = kinds.filter((kind) => drawn.includes(kind));
55
+ if (touched.length === 0)
56
+ continue;
57
+ const pinned = pinnedBy(view, place.title);
58
+ places.push({ slug: place.slug, title: place.title, address: place.address, kinds: touched, ...(view ? { view: view.name } : {}), ...(pinned.length > 0 ? { pinned } : {}) });
59
+ }
60
+ const said = [];
61
+ if (places.length > 0)
62
+ said.push(`These appear on ${andList(places.map((place) => place.title))}.`);
63
+ for (const place of places) {
64
+ if (!place.view)
65
+ continue;
66
+ said.push(place.pinned ? `${place.title} is drawn by a view (${place.view}) that writes its own dates: look at it after this change.` : `${place.title} is drawn by a view (${place.view}): look at it after this change.`);
67
+ for (const one of place.pinned ?? [])
68
+ said.push(one.says);
69
+ }
70
+ return { kinds, places, said, text: said.length > 0 ? said.join(" ") : "Nothing this change touched is drawn on a place of this app." };
71
+ }
72
+ //# sourceMappingURL=touched.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touched.js","sourceRoot":"","sources":["../../src/revisions/touched.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { type DrawnSection, type ElementLike } from "./sections.js";
2
+ /** One side of a revision: the view's source, and what a run of it drew where the host has it. */
3
+ export interface ViewRevisionSide {
4
+ /** The view's whole source. */
5
+ readonly source: string;
6
+ /** The stylesheet it drew with (`HeadlessDescribed.css`, or the page's): read from the source's strings when left out. */
7
+ readonly css?: string;
8
+ /** What it drew (`HeadlessDescribed.drawing.root`, or a page's element): its classes and sections are read from it. */
9
+ readonly drawing?: ElementLike;
10
+ /** The classes its drawing uses, where the host has a list and no tree. */
11
+ readonly classes?: readonly string[];
12
+ /** How tall the page it is drawn on is, in CSS pixels, where the host measured it. */
13
+ readonly height?: number;
14
+ }
15
+ /** A class the revision still draws that a rule styled before and none styles now. */
16
+ export interface UnstyledClass {
17
+ readonly class: string;
18
+ /** The selectors that styled it before. */
19
+ readonly styledBy: readonly string[];
20
+ }
21
+ /** A selector the revision took out, while the markup it matched is still drawn. */
22
+ export interface RemovedSelector {
23
+ readonly selector: string;
24
+ /** The classes (`.name`) and ids (`#name`) in it, each still drawn. */
25
+ readonly names: readonly string[];
26
+ }
27
+ export interface HeightChange {
28
+ readonly before: number;
29
+ readonly after: number;
30
+ /** `after - before`, in CSS pixels. */
31
+ readonly change: number;
32
+ /** The change as a part of `before`: -0.5 is half as tall. */
33
+ readonly ratio: number;
34
+ }
35
+ /** What a revision broke, as entries and in words. */
36
+ export interface ViewRevision {
37
+ /** True when anything below was found; a height that moved less than a tenth is not. */
38
+ readonly regressed: boolean;
39
+ readonly unstyled: readonly UnstyledClass[];
40
+ readonly selectorsRemoved: readonly RemovedSelector[];
41
+ /** Sections drawn before and not now, by name. */
42
+ readonly sectionsMissing: readonly DrawnSection[];
43
+ readonly height?: HeightChange;
44
+ /** Where each side was read from: its drawing and stylesheet, or its source alone. */
45
+ readonly read: {
46
+ readonly before: "drawing" | "source";
47
+ readonly after: "drawing" | "source";
48
+ };
49
+ /** One sentence per finding. */
50
+ readonly said: readonly string[];
51
+ /** The sentences together, or one saying nothing was lost. */
52
+ readonly text: string;
53
+ }
54
+ /**
55
+ * THE STRINGS A SCRIPT SAYS: each quoted string and template's text, an
56
+ * interpolation left as a hole. Comments and regular expressions are passed
57
+ * over; nothing is run.
58
+ */
59
+ export declare function stringsOfSource(source: string): string[];
60
+ /** Every style rule's selector in a stylesheet, each once, in order. A keyframe's steps and a font's face are not selectors. */
61
+ export declare function selectorsOfStylesheet(css: string): string[];
62
+ /** The classes and ids a selector names, as `.name` and `#name`; what is inside `[…]` and strings is not read. */
63
+ export declare function namesInSelector(selector: string): string[];
64
+ /**
65
+ * WHAT A REVISION OF A VIEW BROKE, against the version it replaces: the
66
+ * classes it still draws that lost every rule styling them, the selectors
67
+ * taken out while the markup they matched is still drawn, the sections
68
+ * drawn before and not now, and how the page's height moved.
69
+ */
70
+ export declare function compareViewRevision(before: ViewRevisionSide, after: ViewRevisionSide): ViewRevision;
71
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/revisions/view.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAiC,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnG,kGAAkG;AAClG,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0HAA0H;IAC1H,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,uHAAuH;IACvH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,sFAAsF;IACtF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,sFAAsF;AACtF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,eAAe,EAAE,CAAC;IACtD,kDAAkD;IAClD,QAAQ,CAAC,eAAe,EAAE,SAAS,YAAY,EAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAA;KAAE,CAAC;IAC/F,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAoFxD;AA8BD,gIAAgI;AAChI,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAwD3D;AAED,kHAAkH;AAClH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAG1D;AA6DD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAgDnG"}