@graview/guest 0.1.9 → 0.1.10
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/README.md +301 -2
- package/client.js +2 -0
- package/dist/channel.d.ts +11 -3
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +5 -1
- package/dist/channel.js.map +1 -1
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +75 -0
- package/dist/cli.js.map +1 -0
- package/dist/client-script.d.ts +3 -0
- package/dist/client-script.d.ts.map +1 -0
- package/dist/client-script.js +21 -0
- package/dist/client-script.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.generated.d.ts +4 -0
- package/dist/client.generated.d.ts.map +1 -0
- package/dist/client.generated.js +9 -0
- package/dist/client.generated.js.map +1 -0
- package/dist/client.js +12 -0
- package/dist/client.js.map +1 -0
- package/dist/headless/describe.d.ts +19 -0
- package/dist/headless/describe.d.ts.map +1 -0
- package/dist/headless/describe.js +255 -0
- package/dist/headless/describe.js.map +1 -0
- package/dist/headless/draw.d.ts +17 -0
- package/dist/headless/draw.d.ts.map +1 -0
- package/dist/headless/draw.js +25 -0
- package/dist/headless/draw.js.map +1 -0
- package/dist/headless/index.d.ts +99 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +143 -0
- package/dist/headless/index.js.map +1 -0
- package/dist/headless/judge.d.ts +16 -0
- package/dist/headless/judge.d.ts.map +1 -0
- package/dist/headless/judge.js +52 -0
- package/dist/headless/judge.js.map +1 -0
- package/dist/headless/node.d.ts +8 -0
- package/dist/headless/node.d.ts.map +1 -0
- package/dist/headless/node.js +80 -0
- package/dist/headless/node.js.map +1 -0
- package/dist/headless/protocol.d.ts +71 -0
- package/dist/headless/protocol.d.ts.map +1 -0
- package/dist/headless/protocol.js +14 -0
- package/dist/headless/protocol.js.map +1 -0
- package/dist/headless/runtime.d.ts +2 -0
- package/dist/headless/runtime.d.ts.map +1 -0
- package/dist/headless/runtime.generated.d.ts +2 -0
- package/dist/headless/runtime.generated.d.ts.map +1 -0
- package/dist/headless/runtime.generated.js +8 -0
- package/dist/headless/runtime.generated.js.map +1 -0
- package/dist/headless/runtime.js +171 -0
- package/dist/headless/runtime.js.map +1 -0
- package/dist/headless/tree.d.ts +54 -0
- package/dist/headless/tree.d.ts.map +1 -0
- package/dist/headless/tree.js +128 -0
- package/dist/headless/tree.js.map +1 -0
- package/dist/host/css.d.ts +118 -0
- package/dist/host/css.d.ts.map +1 -0
- package/dist/host/css.js +963 -0
- package/dist/host/css.js.map +1 -0
- package/dist/host/draw-budget.d.ts +10 -0
- package/dist/host/draw-budget.d.ts.map +1 -0
- package/dist/host/draw-budget.js +29 -0
- package/dist/host/draw-budget.js.map +1 -0
- package/dist/host/frame.d.ts +19 -1
- package/dist/host/frame.d.ts.map +1 -1
- package/dist/host/frame.js +21 -2
- package/dist/host/frame.js.map +1 -1
- package/dist/host/index.d.ts +4 -3
- package/dist/host/index.d.ts.map +1 -1
- package/dist/host/index.js +7 -1
- package/dist/host/index.js.map +1 -1
- package/dist/host/kit.d.ts +6 -2
- package/dist/host/kit.d.ts.map +1 -1
- package/dist/host/kit.js +12 -5
- package/dist/host/kit.js.map +1 -1
- package/dist/host/links.d.ts +24 -0
- package/dist/host/links.d.ts.map +1 -0
- package/dist/host/links.js +35 -0
- package/dist/host/links.js.map +1 -0
- package/dist/host/manifest.d.ts +50 -0
- package/dist/host/manifest.d.ts.map +1 -0
- package/dist/host/manifest.js +103 -0
- package/dist/host/manifest.js.map +1 -0
- package/dist/host/open-draw.d.ts +44 -0
- package/dist/host/open-draw.d.ts.map +1 -0
- package/dist/host/open-draw.js +108 -0
- package/dist/host/open-draw.js.map +1 -0
- package/dist/host/open-judge.d.ts +53 -0
- package/dist/host/open-judge.d.ts.map +1 -0
- package/dist/host/open-judge.js +95 -0
- package/dist/host/open-judge.js.map +1 -0
- package/dist/host/open-render.d.ts +32 -0
- package/dist/host/open-render.d.ts.map +1 -0
- package/dist/host/open-render.js +262 -0
- package/dist/host/open-render.js.map +1 -0
- package/dist/host/press.d.ts +15 -0
- package/dist/host/press.d.ts.map +1 -0
- package/dist/host/press.js +156 -0
- package/dist/host/press.js.map +1 -0
- package/dist/host/react.d.ts +15 -2
- package/dist/host/react.d.ts.map +1 -1
- package/dist/host/react.js +13 -5
- package/dist/host/react.js.map +1 -1
- package/dist/host/session.d.ts +94 -1
- package/dist/host/session.d.ts.map +1 -1
- package/dist/host/session.js +103 -14
- package/dist/host/session.js.map +1 -1
- package/dist/host/theme.d.ts +14 -0
- package/dist/host/theme.d.ts.map +1 -0
- package/dist/host/theme.js +51 -0
- package/dist/host/theme.js.map +1 -0
- package/dist/host/view-runtime.generated.d.ts +2 -0
- package/dist/host/view-runtime.generated.d.ts.map +1 -0
- package/dist/host/view-runtime.generated.js +7 -0
- package/dist/host/view-runtime.generated.js.map +1 -0
- package/dist/host/view-source.d.ts +5 -0
- package/dist/host/view-source.d.ts.map +1 -0
- package/dist/host/view-source.js +39 -0
- package/dist/host/view-source.js.map +1 -0
- package/dist/host/view.d.ts +134 -0
- package/dist/host/view.d.ts.map +1 -0
- package/dist/host/view.js +381 -0
- package/dist/host/view.js.map +1 -0
- package/dist/host/views.d.ts +10 -0
- package/dist/host/views.d.ts.map +1 -0
- package/dist/host/views.js +15 -0
- package/dist/host/views.js.map +1 -0
- package/dist/host/worker-react.d.ts +51 -0
- package/dist/host/worker-react.d.ts.map +1 -0
- package/dist/host/worker-react.js +123 -0
- package/dist/host/worker-react.js.map +1 -0
- package/dist/host/worker-start.d.ts +49 -0
- package/dist/host/worker-start.d.ts.map +1 -0
- package/dist/host/worker-start.js +122 -0
- package/dist/host/worker-start.js.map +1 -0
- package/dist/host/worker.d.ts +17 -12
- package/dist/host/worker.d.ts.map +1 -1
- package/dist/host/worker.js +58 -117
- package/dist/host/worker.js.map +1 -1
- package/dist/host/writes.d.ts +49 -0
- package/dist/host/writes.d.ts.map +1 -0
- package/dist/host/writes.js +76 -0
- package/dist/host/writes.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/open-kit.d.ts +148 -0
- package/dist/open-kit.d.ts.map +1 -0
- package/dist/open-kit.js +321 -0
- package/dist/open-kit.js.map +1 -0
- package/dist/protocol.d.ts +109 -3
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +13 -0
- package/dist/protocol.js.map +1 -1
- package/dist/worker/harden.d.ts +13 -2
- package/dist/worker/harden.d.ts.map +1 -1
- package/dist/worker/harden.js +10 -4
- package/dist/worker/harden.js.map +1 -1
- package/dist/worker/natives.d.ts +1 -0
- package/dist/worker/natives.d.ts.map +1 -1
- package/dist/worker/natives.js +4 -0
- package/dist/worker/natives.js.map +1 -1
- package/dist/worker/view-global.d.ts +70 -0
- package/dist/worker/view-global.d.ts.map +1 -0
- package/dist/worker/view-global.js +264 -0
- package/dist/worker/view-global.js.map +1 -0
- package/dist/worker/view.d.ts +14 -0
- package/dist/worker/view.d.ts.map +1 -0
- package/dist/worker/view.js +64 -0
- package/dist/worker/view.js.map +1 -0
- package/package.json +30 -4
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { TreeElement, TreeText } from "./tree.js";
|
|
2
|
+
const HEADINGS = { h1: 1, h2: 2, h3: 3, h4: 4, h5: 5, h6: 6 };
|
|
3
|
+
/** What flows inside a line of text, rather than standing as a block of its own. */
|
|
4
|
+
const INLINE = new Set(["a", "abbr", "b", "bdi", "bdo", "br", "cite", "code", "data", "del", "dfn", "em", "i", "ins", "kbd", "q", "s", "samp", "small", "span", "strong", "sub", "sup", "time", "u", "var", "wbr", "label"]);
|
|
5
|
+
const SKIPPED = new Set(["style", "template", "datalist", "option"]);
|
|
6
|
+
const squash = (text) => text.replace(/\s+/g, " ").trim();
|
|
7
|
+
const isElement = (node) => node instanceof TreeElement;
|
|
8
|
+
const hidden = (element) => element.hasAttribute("hidden") || element.getAttribute("aria-hidden") === "true";
|
|
9
|
+
/** The text a person reads in a node: hidden parts, stylesheets and options left out. */
|
|
10
|
+
function textOf(node) {
|
|
11
|
+
if (node instanceof TreeText)
|
|
12
|
+
return node.data;
|
|
13
|
+
if (!isElement(node))
|
|
14
|
+
return "";
|
|
15
|
+
if (hidden(node) || SKIPPED.has(node.localName))
|
|
16
|
+
return "";
|
|
17
|
+
if (node.localName === "br")
|
|
18
|
+
return " ";
|
|
19
|
+
if (node.localName === "img")
|
|
20
|
+
return node.getAttribute("alt") ?? "";
|
|
21
|
+
return node.childNodes.map(textOf).join(node.localName === "td" || node.localName === "th" ? " " : "");
|
|
22
|
+
}
|
|
23
|
+
/** Every element under one, in order. */
|
|
24
|
+
function* elementsUnder(element) {
|
|
25
|
+
for (const child of element.childNodes) {
|
|
26
|
+
if (!isElement(child))
|
|
27
|
+
continue;
|
|
28
|
+
yield child;
|
|
29
|
+
yield* elementsUnder(child);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function describeDrawing(root, context) {
|
|
33
|
+
const problems = [];
|
|
34
|
+
const acts = new Set();
|
|
35
|
+
const records = new Set();
|
|
36
|
+
const shown = new Map();
|
|
37
|
+
for (const node of [...(context.props.node ? [context.props.node] : []), ...(context.props.nodes ?? [])])
|
|
38
|
+
shown.set(node.id, node);
|
|
39
|
+
const places = new Set(context.places);
|
|
40
|
+
/* What the drawing binds, wherever it is: acts, records and places, and anything it names that is not there. */
|
|
41
|
+
for (const element of elementsUnder(root)) {
|
|
42
|
+
const act = element.getAttribute("data-act");
|
|
43
|
+
if (act !== null)
|
|
44
|
+
acts.add(act);
|
|
45
|
+
const record = element.getAttribute("data-record");
|
|
46
|
+
if (record !== null) {
|
|
47
|
+
records.add(record);
|
|
48
|
+
if (!shown.has(record))
|
|
49
|
+
problems.push({ at: `drawing <${element.localName} data-record="${record}">`, says: `It names "${record}", which this seat was not shown: the host will not follow it.` });
|
|
50
|
+
}
|
|
51
|
+
const place = element.getAttribute("data-place");
|
|
52
|
+
if (place !== null && !places.has(place))
|
|
53
|
+
problems.push({ at: `drawing <${element.localName} data-place="${place}">`, says: `It names the place "${place}", which this app does not have.` });
|
|
54
|
+
}
|
|
55
|
+
/** The record an element stands for: its own `data-record`, a `data-key` that is a shown record's id, or the one record linked inside it. */
|
|
56
|
+
const recordOf = (element) => {
|
|
57
|
+
const own = element.getAttribute("data-record");
|
|
58
|
+
if (own !== null)
|
|
59
|
+
return own;
|
|
60
|
+
const key = element.getAttribute("data-key") ?? element.getAttribute("id");
|
|
61
|
+
if (key !== null && shown.has(key))
|
|
62
|
+
return key;
|
|
63
|
+
const linked = new Set();
|
|
64
|
+
for (const inner of elementsUnder(element)) {
|
|
65
|
+
const id = inner.getAttribute("data-record");
|
|
66
|
+
if (id !== null)
|
|
67
|
+
linked.add(id);
|
|
68
|
+
}
|
|
69
|
+
return linked.size === 1 ? [...linked][0] : undefined;
|
|
70
|
+
};
|
|
71
|
+
/** A record as its row or card says it: its title (a heading, its link, its strong words, or its first line) and the rest. */
|
|
72
|
+
const item = (element, id) => {
|
|
73
|
+
const node = shown.get(id);
|
|
74
|
+
const kind = node?.kind ?? (id.includes(":") ? id.slice(0, id.indexOf(":")) : "");
|
|
75
|
+
const candidates = [...elementsUnder(element)];
|
|
76
|
+
const titled = candidates.find((one) => one.localName in HEADINGS) ??
|
|
77
|
+
candidates.find((one) => one.localName === "a" && one.getAttribute("data-record") === id) ??
|
|
78
|
+
candidates.find((one) => one.localName === "strong" || one.localName === "b");
|
|
79
|
+
const title = squash(titled ? textOf(titled) : "") || node?.label || id;
|
|
80
|
+
const parts = blocks(element, titled);
|
|
81
|
+
/* With no element of its own for the title, its first line was the title. */
|
|
82
|
+
if (!titled && parts[0]?.t === "text" && squash(parts[0].text) === title)
|
|
83
|
+
parts.shift();
|
|
84
|
+
return { id, kind, title, parts };
|
|
85
|
+
};
|
|
86
|
+
/** One table's body rows as items: the first cell their title, the rest their fields under the head's labels. */
|
|
87
|
+
const table = (element) => {
|
|
88
|
+
const rows = [...elementsUnder(element)].filter((one) => one.localName === "tr" && !hidden(one));
|
|
89
|
+
const head = rows.find((row) => row.parentElement?.localName === "thead" || row.childNodes.every((cell) => !isElement(cell) || cell.localName === "th"));
|
|
90
|
+
const labels = head ? head.childNodes.filter(isElement).map((cell) => squash(textOf(cell))) : [];
|
|
91
|
+
const items = rows
|
|
92
|
+
.filter((row) => row !== head)
|
|
93
|
+
.map((row) => {
|
|
94
|
+
const cells = row.childNodes.filter(isElement);
|
|
95
|
+
const id = recordOf(row);
|
|
96
|
+
const node = id ? shown.get(id) : undefined;
|
|
97
|
+
return {
|
|
98
|
+
id: id ?? "",
|
|
99
|
+
kind: node?.kind ?? "",
|
|
100
|
+
title: squash(textOf(cells[0] ?? row)),
|
|
101
|
+
parts: cells.slice(1).map((cell, index) => ({ t: "field", label: labels[index + 1] ?? "", text: squash(textOf(cell)) })),
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
return { t: "list", as: "row", columns: 1, groups: [{ items }] };
|
|
105
|
+
};
|
|
106
|
+
/** The parts a block element's children make, `skip` left out (an item's title). */
|
|
107
|
+
function blocks(element, skip) {
|
|
108
|
+
const out = [];
|
|
109
|
+
let line = "";
|
|
110
|
+
const flush = () => {
|
|
111
|
+
const text = squash(line);
|
|
112
|
+
line = "";
|
|
113
|
+
if (text)
|
|
114
|
+
out.push({ t: "text", text });
|
|
115
|
+
};
|
|
116
|
+
const children = element.childNodes;
|
|
117
|
+
for (let index = 0; index < children.length; index += 1) {
|
|
118
|
+
const child = children[index];
|
|
119
|
+
if (child === skip)
|
|
120
|
+
continue;
|
|
121
|
+
if (child instanceof TreeText) {
|
|
122
|
+
line += child.data;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (!isElement(child) || hidden(child) || SKIPPED.has(child.localName))
|
|
126
|
+
continue;
|
|
127
|
+
if (skip && [...elementsUnder(child)].includes(skip)) {
|
|
128
|
+
/* The title is somewhere inside: say the rest of this child, inline or not. */
|
|
129
|
+
flush();
|
|
130
|
+
out.push(...blocks(child, skip));
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
/* A run of siblings each standing for a record is a list of those records. */
|
|
134
|
+
const run = [];
|
|
135
|
+
for (let at = index; at < children.length; at += 1) {
|
|
136
|
+
const one = children[at];
|
|
137
|
+
if (one instanceof TreeText && squash(one.data) === "")
|
|
138
|
+
continue;
|
|
139
|
+
if (!isElement(one) || hidden(one) || INLINE.has(one.localName) || one.localName in HEADINGS)
|
|
140
|
+
break;
|
|
141
|
+
const id = recordOf(one);
|
|
142
|
+
if (!id)
|
|
143
|
+
break;
|
|
144
|
+
run.push({ element: one, id });
|
|
145
|
+
index = at;
|
|
146
|
+
}
|
|
147
|
+
if (run.length > 0) {
|
|
148
|
+
flush();
|
|
149
|
+
const rows = run.every((one) => one.element.localName === "li" || one.element.localName === "tr");
|
|
150
|
+
out.push({ t: "list", as: rows ? "row" : "card", columns: 1, groups: [{ items: run.map((one) => item(one.element, one.id)) }] });
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
out.push(...one(child, (text) => (line += text), flush));
|
|
154
|
+
}
|
|
155
|
+
flush();
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
/** One element's parts; inline ones add to the line being read. */
|
|
159
|
+
function one(element, inline, flush) {
|
|
160
|
+
const name = element.localName;
|
|
161
|
+
if (INLINE.has(name) && name !== "label") {
|
|
162
|
+
inline(textOf(element));
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
if (name === "mark") {
|
|
166
|
+
flush();
|
|
167
|
+
const text = squash(textOf(element));
|
|
168
|
+
return text ? [{ t: "badge", text }] : [];
|
|
169
|
+
}
|
|
170
|
+
flush();
|
|
171
|
+
const level = HEADINGS[name] ?? (element.getAttribute("role") === "heading" ? Number(element.getAttribute("aria-level") ?? 2) : undefined);
|
|
172
|
+
if (level !== undefined) {
|
|
173
|
+
const text = squash(textOf(element));
|
|
174
|
+
return text ? [{ t: "heading", level, text }] : [];
|
|
175
|
+
}
|
|
176
|
+
switch (name) {
|
|
177
|
+
case "ul":
|
|
178
|
+
case "ol":
|
|
179
|
+
case "menu": {
|
|
180
|
+
const items = element.childNodes.filter((child) => isElement(child) && child.localName === "li" && !hidden(child));
|
|
181
|
+
return [{ t: "list", as: "row", columns: 1, groups: [{ items: items.map((li) => {
|
|
182
|
+
const id = recordOf(li);
|
|
183
|
+
if (id)
|
|
184
|
+
return item(li, id);
|
|
185
|
+
const parts = blocks(li);
|
|
186
|
+
const first = parts[0];
|
|
187
|
+
const title = first && (first.t === "text" || first.t === "heading") ? first.text : "";
|
|
188
|
+
return { id: "", kind: "", title, parts: title ? parts.slice(1) : parts };
|
|
189
|
+
}) }] }];
|
|
190
|
+
}
|
|
191
|
+
case "table":
|
|
192
|
+
return [table(element)];
|
|
193
|
+
case "dl": {
|
|
194
|
+
const parts = [];
|
|
195
|
+
let label = "";
|
|
196
|
+
for (const child of element.childNodes.filter(isElement)) {
|
|
197
|
+
if (child.localName === "dt")
|
|
198
|
+
label = squash(textOf(child));
|
|
199
|
+
else if (child.localName === "dd")
|
|
200
|
+
parts.push({ t: "field", label, text: squash(textOf(child)) });
|
|
201
|
+
else if (child.localName === "div")
|
|
202
|
+
for (const inner of child.childNodes.filter(isElement)) {
|
|
203
|
+
if (inner.localName === "dt")
|
|
204
|
+
label = squash(textOf(inner));
|
|
205
|
+
else if (inner.localName === "dd")
|
|
206
|
+
parts.push({ t: "field", label, text: squash(textOf(inner)) });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return parts;
|
|
210
|
+
}
|
|
211
|
+
case "figure": {
|
|
212
|
+
const caption = element.childNodes.find((child) => isElement(child) && child.localName === "figcaption");
|
|
213
|
+
const text = squash(element.childNodes.filter((child) => child !== caption).map(textOf).join(" "));
|
|
214
|
+
const label = caption ? squash(textOf(caption)) : "";
|
|
215
|
+
return text ? [{ t: "figure", text, ...(label ? { label } : {}) }] : label ? [{ t: "text", text: label }] : [];
|
|
216
|
+
}
|
|
217
|
+
case "meter":
|
|
218
|
+
case "progress": {
|
|
219
|
+
const value = Number(element.getAttribute("value") ?? 0);
|
|
220
|
+
const max = Number(element.getAttribute("max") ?? 1) || 1;
|
|
221
|
+
const label = element.getAttribute("aria-label") ?? element.getAttribute("title") ?? "";
|
|
222
|
+
return [{ t: "progress", label, text: `${Math.round((value / max) * 100)}%` }];
|
|
223
|
+
}
|
|
224
|
+
case "svg": {
|
|
225
|
+
const title = element.childNodes.find((child) => isElement(child) && child.localName === "title");
|
|
226
|
+
const label = squash(element.getAttribute("aria-label") ?? (title ? textOf(title) : ""));
|
|
227
|
+
if (label)
|
|
228
|
+
return [{ t: "text", text: label, tone: "picture" }];
|
|
229
|
+
const words = [...elementsUnder(element)].filter((inner) => inner.localName === "text").map((inner) => squash(textOf(inner))).filter(Boolean);
|
|
230
|
+
return words.length > 0 ? [{ t: "text", text: words.join(" · "), tone: "picture" }] : [];
|
|
231
|
+
}
|
|
232
|
+
case "img": {
|
|
233
|
+
const alt = squash(element.getAttribute("alt") ?? "");
|
|
234
|
+
return alt ? [{ t: "text", text: alt, tone: "picture" }] : [];
|
|
235
|
+
}
|
|
236
|
+
case "button": {
|
|
237
|
+
const text = squash(textOf(element));
|
|
238
|
+
return text ? [{ t: "text", text, tone: "button" }] : [];
|
|
239
|
+
}
|
|
240
|
+
case "input":
|
|
241
|
+
case "textarea":
|
|
242
|
+
case "select": {
|
|
243
|
+
const label = squash(element.getAttribute("aria-label") ?? element.getAttribute("placeholder") ?? element.getAttribute("name") ?? "");
|
|
244
|
+
const value = name === "select" ? squash(textOf(element.childNodes.find((child) => isElement(child) && child.localName === "option" && child.selected) ?? element)) : element.value;
|
|
245
|
+
return [{ t: "field", label, text: value }];
|
|
246
|
+
}
|
|
247
|
+
case "label":
|
|
248
|
+
return blocks(element);
|
|
249
|
+
default:
|
|
250
|
+
return blocks(element);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return { parts: blocks(root), problems, acts: [...acts], records: [...records] };
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=describe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/headless/describe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ViewRefusal } from "../host/open-draw.js";
|
|
2
|
+
import { type TreeElement } from "./tree.js";
|
|
3
|
+
export interface DrawnTranscript {
|
|
4
|
+
readonly root: TreeElement;
|
|
5
|
+
readonly refused: readonly ViewRefusal[];
|
|
6
|
+
/** How many nodes are drawn. */
|
|
7
|
+
readonly size: number;
|
|
8
|
+
/** It went past `maxNodes`. */
|
|
9
|
+
readonly over: boolean;
|
|
10
|
+
/** The stylesheet as a page would draw it. */
|
|
11
|
+
readonly css: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function drawTranscript(renders: readonly unknown[], css: string | undefined, options: {
|
|
14
|
+
readonly maxNodes: number;
|
|
15
|
+
readonly origin?: string;
|
|
16
|
+
}): DrawnTranscript;
|
|
17
|
+
//# sourceMappingURL=draw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../src/headless/draw.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAUzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAkBtK"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { sanitizeStylesheet } from "../host/css.js";
|
|
2
|
+
import { createOpenRenderer } from "../host/open-render.js";
|
|
3
|
+
import { createTree } from "./tree.js";
|
|
4
|
+
export function drawTranscript(renders, css, options) {
|
|
5
|
+
const { root } = createTree();
|
|
6
|
+
let over = false;
|
|
7
|
+
const renderer = createOpenRenderer(root, {
|
|
8
|
+
/* No page, so no `blob:` of its own: an image is a `data:` image or nothing. */
|
|
9
|
+
origin: options.origin ?? "null",
|
|
10
|
+
maxNodes: options.maxNodes,
|
|
11
|
+
onOverBudget: () => (over = true),
|
|
12
|
+
});
|
|
13
|
+
for (const batch of renders)
|
|
14
|
+
renderer.apply(batch);
|
|
15
|
+
const refused = [...renderer.refused];
|
|
16
|
+
let kept = "";
|
|
17
|
+
if (typeof css === "string") {
|
|
18
|
+
const judged = sanitizeStylesheet(css);
|
|
19
|
+
kept = judged.css;
|
|
20
|
+
for (const one of judged.refused)
|
|
21
|
+
refused.push({ reason: "css", name: "stylesheet", css: one });
|
|
22
|
+
}
|
|
23
|
+
return { root, refused, size: renderer.size, over, css: kept };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=draw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draw.js","sourceRoot":"","sources":["../../src/headless/draw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AAqBzD,MAAM,UAAU,cAAc,CAAC,OAA2B,EAAE,GAAuB,EAAE,OAAgE;IACnJ,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;IAC9B,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAuB,EAAE;QAC3D,gFAAgF;QAChF,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;KAClC,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,OAAO;QAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,OAAO,GAAkB,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { AnySchema, Principal, Store } from "@graview/core";
|
|
2
|
+
import type { PlaceDescription } from "@graview/core/describe";
|
|
3
|
+
import { type WorkerViewManifest } from "../host/manifest.js";
|
|
4
|
+
import type { GuestViewInput } from "../host/session.js";
|
|
5
|
+
import type { WorkerViewLimits } from "../host/view.js";
|
|
6
|
+
import type { GuestPlace, GuestProps, GuestTheme } from "../protocol.js";
|
|
7
|
+
import { HEADLESS_ENTRY, type HeadlessFailureReason, type HeadlessTranscript } from "./protocol.js";
|
|
8
|
+
export { describeDrawing } from "./describe.js";
|
|
9
|
+
export type { DescribeDrawingContext, DescribedDrawing } from "./describe.js";
|
|
10
|
+
export { drawTranscript } from "./draw.js";
|
|
11
|
+
export type { DrawnTranscript } from "./draw.js";
|
|
12
|
+
export { judgeTranscript, sayRefusal } from "./judge.js";
|
|
13
|
+
export type { Judged } from "./judge.js";
|
|
14
|
+
export { HEADLESS_ENTRY, HEADLESS_VIEW } from "./protocol.js";
|
|
15
|
+
export type { HeadlessFailureReason, HeadlessInput, HeadlessOutcome, HeadlessTranscript } from "./protocol.js";
|
|
16
|
+
export { createTree, TreeDocument, TreeElement, TreeText } from "./tree.js";
|
|
17
|
+
/**
|
|
18
|
+
* WHAT THE HOST'S ISOLATE IS HANDED. Load `script` into the isolate as code
|
|
19
|
+
* (a classic script, or the body of a module), call the global function it
|
|
20
|
+
* leaves under the name `entry` with `input`, once, and hand back the
|
|
21
|
+
* string it resolves with. Stop the isolate past `timeoutMs`.
|
|
22
|
+
*/
|
|
23
|
+
export interface HeadlessPayload {
|
|
24
|
+
/** The headless runtime, then the view: one strict script that loads nothing. */
|
|
25
|
+
readonly script: string;
|
|
26
|
+
/** The global the script leaves: call it once with `input`. */
|
|
27
|
+
readonly entry: typeof HEADLESS_ENTRY;
|
|
28
|
+
/** What the view is shown and held to, as JSON text. Pass it through untouched. */
|
|
29
|
+
readonly input: string;
|
|
30
|
+
/** How long the isolate may run, in milliseconds, before the host stops it. */
|
|
31
|
+
readonly timeoutMs: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* THE HOST'S ISOLATE: run a payload where the host's own context is not.
|
|
35
|
+
* Resolve with the text the entry resolved with. Reject when the isolate
|
|
36
|
+
* stopped it; an error whose `reason` is `"slow"` says it ran past
|
|
37
|
+
* `timeoutMs`, any other says the isolate could not run it.
|
|
38
|
+
*/
|
|
39
|
+
export type HeadlessRun = (payload: HeadlessPayload) => Promise<string>;
|
|
40
|
+
/** The script a host's isolate runs for a view's source: the headless runtime, then the view, as a function handed to it at once. */
|
|
41
|
+
export declare function headlessScript(source: string): string;
|
|
42
|
+
/** The limits a headless run holds a view to: a page's (FR-94), and how long the isolate may take at all. */
|
|
43
|
+
export interface HeadlessLimits extends Pick<WorkerViewLimits, "maxSourceBytes" | "maxNodes" | "messages" | "pushMs"> {
|
|
44
|
+
/** How long the whole run may take in the isolate, loading included, in milliseconds. 5 000 by default. */
|
|
45
|
+
readonly runMs?: number;
|
|
46
|
+
}
|
|
47
|
+
export interface RunWorkerViewHeadlessOptions<S extends AnySchema> {
|
|
48
|
+
/** The view: its manifest, and its plain source against the `graview` global (FR-96). */
|
|
49
|
+
readonly manifest: WorkerViewManifest;
|
|
50
|
+
readonly source: string;
|
|
51
|
+
/** The store, seated as the one principal the view is run for: it is handed their sight, cut to its manifest (FR-91). */
|
|
52
|
+
readonly store: Store<S>;
|
|
53
|
+
readonly principal: Principal;
|
|
54
|
+
/** The isolate the host picked. Required: there is no in-process fallback. */
|
|
55
|
+
readonly run: HeadlessRun;
|
|
56
|
+
/** Where the view is drawn: the record, or the members, a face would hand it. Every member the seat sees by default. */
|
|
57
|
+
readonly input?: GuestViewInput;
|
|
58
|
+
/** The app's look. A light one in the framework's own colours by default. */
|
|
59
|
+
readonly theme?: GuestTheme;
|
|
60
|
+
/** The app's named places, which the view may link to (FR-93). */
|
|
61
|
+
readonly places?: readonly GuestPlace[];
|
|
62
|
+
readonly limits?: HeadlessLimits;
|
|
63
|
+
/**
|
|
64
|
+
* The width it is said at, in CSS pixels, as `describePlace` takes it:
|
|
65
|
+
* 1440 by default. Nothing is laid out headless, so it changes the words
|
|
66
|
+
* "phone" and "wide", never what is listed.
|
|
67
|
+
*/
|
|
68
|
+
readonly width?: number;
|
|
69
|
+
}
|
|
70
|
+
/** Why a view will not do, and a sentence saying it. */
|
|
71
|
+
export interface HeadlessFailure {
|
|
72
|
+
readonly ok: false;
|
|
73
|
+
readonly reason: HeadlessFailureReason;
|
|
74
|
+
readonly detail: string;
|
|
75
|
+
/** What it sent before it was stopped, when it got that far. */
|
|
76
|
+
readonly transcript?: HeadlessTranscript;
|
|
77
|
+
}
|
|
78
|
+
/** What a view drew for one seat, said as a place is said. */
|
|
79
|
+
export interface HeadlessDescribed {
|
|
80
|
+
readonly ok: true;
|
|
81
|
+
/** In `describePlace`'s shape (FR-89), drawn by `view:<name>`. */
|
|
82
|
+
readonly description: PlaceDescription;
|
|
83
|
+
/** What it was shown. */
|
|
84
|
+
readonly props: GuestProps;
|
|
85
|
+
/** What it sent: every batch it drew, its stylesheet, the acts it asked for and where it asked to go. */
|
|
86
|
+
readonly transcript: HeadlessTranscript;
|
|
87
|
+
}
|
|
88
|
+
export type HeadlessResult = HeadlessDescribed | HeadlessFailure;
|
|
89
|
+
/** The framework's own look, light, for a run that is handed none. */
|
|
90
|
+
export declare const HEADLESS_THEME: GuestTheme;
|
|
91
|
+
/**
|
|
92
|
+
* RUN A WORKER VIEW ONCE, HEADLESS, IN THE HOST'S ISOLATE, AND SAY WHAT IT
|
|
93
|
+
* DREW FOR ONE SEAT. The manifest is checked against the app and the
|
|
94
|
+
* source against what a view may say before anything runs; the view is
|
|
95
|
+
* handed the seat's sight cut to its manifest; what comes back is judged
|
|
96
|
+
* here, in the host's context, from the transcript alone.
|
|
97
|
+
*/
|
|
98
|
+
export declare function runWorkerViewHeadless<S extends AnySchema>(options: RunWorkerViewHeadlessOptions<S>): Promise<HeadlessResult>;
|
|
99
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/headless/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { checkManifest, manifestActs, workerViewProps } from "../host/manifest.js";
|
|
2
|
+
import { checkViewSource } from "../host/view-source.js";
|
|
3
|
+
import { judgeTranscript } from "./judge.js";
|
|
4
|
+
import { HEADLESS_ENTRY, HEADLESS_VIEW } from "./protocol.js";
|
|
5
|
+
import { HEADLESS_RUNTIME } from "./runtime.generated.js";
|
|
6
|
+
export { describeDrawing } from "./describe.js";
|
|
7
|
+
export { drawTranscript } from "./draw.js";
|
|
8
|
+
export { judgeTranscript, sayRefusal } from "./judge.js";
|
|
9
|
+
export { HEADLESS_ENTRY, HEADLESS_VIEW } from "./protocol.js";
|
|
10
|
+
export { createTree, TreeDocument, TreeElement, TreeText } from "./tree.js";
|
|
11
|
+
/** The script a host's isolate runs for a view's source: the headless runtime, then the view, as a function handed to it at once. */
|
|
12
|
+
export function headlessScript(source) {
|
|
13
|
+
return `${HEADLESS_RUNTIME}\n;${HEADLESS_VIEW}(function (graview) {\n"use strict";\n${source}\n});\n`;
|
|
14
|
+
}
|
|
15
|
+
/** The framework's own look, light, for a run that is handed none. */
|
|
16
|
+
export const HEADLESS_THEME = {
|
|
17
|
+
scheme: "light",
|
|
18
|
+
accent: "#2f7d8c",
|
|
19
|
+
ground: "#f6f8f9",
|
|
20
|
+
panel: "#ffffff",
|
|
21
|
+
ink: "#14212b",
|
|
22
|
+
inkMuted: "#4f6470",
|
|
23
|
+
edge: "rgba(20, 33, 43, 0.14)",
|
|
24
|
+
fontBody: "system-ui, sans-serif",
|
|
25
|
+
fontMono: "ui-monospace, monospace",
|
|
26
|
+
};
|
|
27
|
+
const failed = (reason, detail, transcript) => ({ ok: false, reason, detail, ...(transcript ? { transcript } : {}) });
|
|
28
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
29
|
+
const REASONS = ["manifest", "source", "refused", "error", "silent", "nodes", "flood", "slow", "act", "isolate"];
|
|
30
|
+
/** A transcript as an isolate said it, held to its shape: anything else is no transcript. */
|
|
31
|
+
function transcriptOf(value) {
|
|
32
|
+
if (!isRecord(value))
|
|
33
|
+
return undefined;
|
|
34
|
+
const { renders, css, asked, went, ms, logs, messages } = value;
|
|
35
|
+
if (!Array.isArray(renders) || !renders.every(Array.isArray) || !Array.isArray(asked) || !Array.isArray(went) || !Array.isArray(logs))
|
|
36
|
+
return undefined;
|
|
37
|
+
if (typeof ms !== "number" || typeof messages !== "number" || (css !== undefined && typeof css !== "string"))
|
|
38
|
+
return undefined;
|
|
39
|
+
return {
|
|
40
|
+
renders: renders,
|
|
41
|
+
...(typeof css === "string" ? { css } : {}),
|
|
42
|
+
asked: asked.filter(isRecord).map((one) => ({ name: String(one["name"]), args: one["args"] })),
|
|
43
|
+
went: went.filter(isRecord).flatMap((one) => (typeof one["record"] === "string" ? [{ record: one["record"] }] : typeof one["place"] === "string" ? [{ place: one["place"] }] : [])),
|
|
44
|
+
ms,
|
|
45
|
+
logs: logs.map(String).slice(0, 50),
|
|
46
|
+
messages,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** The seat a description is for, said as `describePlace` says it. */
|
|
50
|
+
const seatOf = (principal) => (principal.kind === "system" ? "the system" : (principal.roles ?? []).length > 0 ? (principal.roles ?? []).join(", ") : principal.kind);
|
|
51
|
+
const slugOf = (title) => title.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
52
|
+
/**
|
|
53
|
+
* RUN A WORKER VIEW ONCE, HEADLESS, IN THE HOST'S ISOLATE, AND SAY WHAT IT
|
|
54
|
+
* DREW FOR ONE SEAT. The manifest is checked against the app and the
|
|
55
|
+
* source against what a view may say before anything runs; the view is
|
|
56
|
+
* handed the seat's sight cut to its manifest; what comes back is judged
|
|
57
|
+
* here, in the host's context, from the transcript alone.
|
|
58
|
+
*/
|
|
59
|
+
export async function runWorkerViewHeadless(options) {
|
|
60
|
+
if (typeof options.run !== "function") {
|
|
61
|
+
throw new TypeError("runWorkerViewHeadless runs a view only in an isolate the host supplies (`run`); it never runs one in the host's own context.");
|
|
62
|
+
}
|
|
63
|
+
const { manifest, source, store, principal } = options;
|
|
64
|
+
const limits = {
|
|
65
|
+
maxSourceBytes: options.limits?.maxSourceBytes ?? 256_000,
|
|
66
|
+
maxNodes: options.limits?.maxNodes ?? 5_000,
|
|
67
|
+
messages: options.limits?.messages ?? 120,
|
|
68
|
+
pushMs: options.limits?.pushMs ?? 1_000,
|
|
69
|
+
runMs: options.limits?.runMs ?? 5_000,
|
|
70
|
+
};
|
|
71
|
+
const findings = checkManifest(manifest, store);
|
|
72
|
+
if (findings.length > 0)
|
|
73
|
+
return failed("manifest", findings.join(" "));
|
|
74
|
+
if (typeof source !== "string")
|
|
75
|
+
return failed("source", "A view's source is text.");
|
|
76
|
+
if (new TextEncoder().encode(source).length > limits.maxSourceBytes)
|
|
77
|
+
return failed("source", `Its code is longer than the ${limits.maxSourceBytes.toLocaleString("en-US")} bytes a view may be.`);
|
|
78
|
+
const unloadable = checkViewSource(source);
|
|
79
|
+
if (unloadable.length > 0)
|
|
80
|
+
return failed("source", unloadable.join(" "));
|
|
81
|
+
const places = options.places ?? [];
|
|
82
|
+
const props = workerViewProps(store, principal, { manifest, ...(options.input ? { input: options.input } : {}), theme: options.theme ?? HEADLESS_THEME, places });
|
|
83
|
+
const input = {
|
|
84
|
+
props,
|
|
85
|
+
acts: manifestActs(manifest).map((one) => one.as ?? one.act),
|
|
86
|
+
places: places.map((place) => place.as),
|
|
87
|
+
limits: { maxNodes: limits.maxNodes, messages: limits.messages, pushMs: limits.pushMs },
|
|
88
|
+
};
|
|
89
|
+
/* The isolate, the host's: past `runMs` it is stopped, whatever its runner does. */
|
|
90
|
+
let text;
|
|
91
|
+
let stop;
|
|
92
|
+
try {
|
|
93
|
+
const ran = options.run({ script: headlessScript(source), entry: HEADLESS_ENTRY, input: JSON.stringify(input), timeoutMs: limits.runMs });
|
|
94
|
+
const late = new Promise((_, reject) => {
|
|
95
|
+
stop = setTimeout(() => reject(Object.assign(new Error("past runMs"), { reason: "slow" })), limits.runMs + 1_000);
|
|
96
|
+
});
|
|
97
|
+
text = await Promise.race([ran, late]);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (isRecord(error) && error["reason"] === "slow")
|
|
101
|
+
return failed("slow", `It ran longer than the ${limits.runMs.toLocaleString("en-US")} ms a headless run may take.`);
|
|
102
|
+
return failed("isolate", `The isolate could not run it: ${error instanceof Error ? error.message : String(error)}`);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
if (stop !== undefined)
|
|
106
|
+
clearTimeout(stop);
|
|
107
|
+
}
|
|
108
|
+
let outcome;
|
|
109
|
+
try {
|
|
110
|
+
outcome = JSON.parse(String(text));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return failed("isolate", "The isolate answered with something that is not an outcome.");
|
|
114
|
+
}
|
|
115
|
+
if (!isRecord(outcome))
|
|
116
|
+
return failed("isolate", "The isolate answered with something that is not an outcome.");
|
|
117
|
+
const transcript = transcriptOf(outcome["transcript"]);
|
|
118
|
+
if (outcome["ok"] !== true) {
|
|
119
|
+
const reason = REASONS.includes(outcome["reason"]) ? outcome["reason"] : "isolate";
|
|
120
|
+
return failed(reason, typeof outcome["detail"] === "string" ? outcome["detail"].slice(0, 2_000) : "It failed, and the isolate did not say why.", transcript);
|
|
121
|
+
}
|
|
122
|
+
if (!transcript)
|
|
123
|
+
return failed("isolate", "The isolate answered without what the view sent.");
|
|
124
|
+
/* Judged again here, from the transcript alone. */
|
|
125
|
+
const judged = judgeTranscript(transcript, input);
|
|
126
|
+
if (!judged.ok)
|
|
127
|
+
return failed(judged.reason, judged.detail, transcript);
|
|
128
|
+
const title = manifest.title ?? manifest.name;
|
|
129
|
+
const slug = manifest.title ? slugOf(manifest.title) : manifest.name;
|
|
130
|
+
const kind = manifest.attach === "home" ? null : manifest.attach;
|
|
131
|
+
const description = {
|
|
132
|
+
place: { slug: manifest.attach === "home" ? "home" : slug, title, kind, address: manifest.attach === "home" ? "/" : `/places/${encodeURIComponent(slug)}` },
|
|
133
|
+
seat: seatOf(principal),
|
|
134
|
+
width: options.width ?? 1440,
|
|
135
|
+
variant: (options.width ?? 1440) < 640 ? "phone" : "wide",
|
|
136
|
+
drawnBy: `view:${manifest.name}`,
|
|
137
|
+
parts: judged.parts,
|
|
138
|
+
problems: judged.problems,
|
|
139
|
+
};
|
|
140
|
+
const { placeText } = await import("@graview/core/describe");
|
|
141
|
+
return { ok: true, description: { ...description, text: placeText(description) }, props, transcript };
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/headless/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DescribedPart, DescribedProblem } from "@graview/core/describe";
|
|
2
|
+
import type { ViewRefusal } from "../host/open-draw.js";
|
|
3
|
+
import type { HeadlessFailureReason, HeadlessInput, HeadlessTranscript } from "./protocol.js";
|
|
4
|
+
export type Judged = {
|
|
5
|
+
readonly ok: true;
|
|
6
|
+
readonly parts: readonly DescribedPart[];
|
|
7
|
+
readonly problems: readonly DescribedProblem[];
|
|
8
|
+
} | {
|
|
9
|
+
readonly ok: false;
|
|
10
|
+
readonly reason: HeadlessFailureReason;
|
|
11
|
+
readonly detail: string;
|
|
12
|
+
};
|
|
13
|
+
/** One refusal of the open kit's, said to the author of the view. */
|
|
14
|
+
export declare function sayRefusal(refusal: ViewRefusal): DescribedProblem;
|
|
15
|
+
export declare function judgeTranscript(transcript: HeadlessTranscript, input: HeadlessInput): Judged;
|
|
16
|
+
//# sourceMappingURL=judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/headless/judge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAW9F,MAAM,MAAM,MAAM,GACd;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,GAC/G;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5F,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CAqBjE;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAmB5F"}
|