@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.
Files changed (173) hide show
  1. package/README.md +301 -2
  2. package/client.js +2 -0
  3. package/dist/channel.d.ts +11 -3
  4. package/dist/channel.d.ts.map +1 -1
  5. package/dist/channel.js +5 -1
  6. package/dist/channel.js.map +1 -1
  7. package/dist/cli.d.ts +16 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +75 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/client-script.d.ts +3 -0
  12. package/dist/client-script.d.ts.map +1 -0
  13. package/dist/client-script.js +21 -0
  14. package/dist/client-script.js.map +1 -0
  15. package/dist/client.d.ts +2 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.generated.d.ts +4 -0
  18. package/dist/client.generated.d.ts.map +1 -0
  19. package/dist/client.generated.js +9 -0
  20. package/dist/client.generated.js.map +1 -0
  21. package/dist/client.js +12 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/headless/describe.d.ts +19 -0
  24. package/dist/headless/describe.d.ts.map +1 -0
  25. package/dist/headless/describe.js +255 -0
  26. package/dist/headless/describe.js.map +1 -0
  27. package/dist/headless/draw.d.ts +17 -0
  28. package/dist/headless/draw.d.ts.map +1 -0
  29. package/dist/headless/draw.js +25 -0
  30. package/dist/headless/draw.js.map +1 -0
  31. package/dist/headless/index.d.ts +99 -0
  32. package/dist/headless/index.d.ts.map +1 -0
  33. package/dist/headless/index.js +143 -0
  34. package/dist/headless/index.js.map +1 -0
  35. package/dist/headless/judge.d.ts +16 -0
  36. package/dist/headless/judge.d.ts.map +1 -0
  37. package/dist/headless/judge.js +52 -0
  38. package/dist/headless/judge.js.map +1 -0
  39. package/dist/headless/node.d.ts +8 -0
  40. package/dist/headless/node.d.ts.map +1 -0
  41. package/dist/headless/node.js +80 -0
  42. package/dist/headless/node.js.map +1 -0
  43. package/dist/headless/protocol.d.ts +71 -0
  44. package/dist/headless/protocol.d.ts.map +1 -0
  45. package/dist/headless/protocol.js +14 -0
  46. package/dist/headless/protocol.js.map +1 -0
  47. package/dist/headless/runtime.d.ts +2 -0
  48. package/dist/headless/runtime.d.ts.map +1 -0
  49. package/dist/headless/runtime.generated.d.ts +2 -0
  50. package/dist/headless/runtime.generated.d.ts.map +1 -0
  51. package/dist/headless/runtime.generated.js +8 -0
  52. package/dist/headless/runtime.generated.js.map +1 -0
  53. package/dist/headless/runtime.js +171 -0
  54. package/dist/headless/runtime.js.map +1 -0
  55. package/dist/headless/tree.d.ts +54 -0
  56. package/dist/headless/tree.d.ts.map +1 -0
  57. package/dist/headless/tree.js +128 -0
  58. package/dist/headless/tree.js.map +1 -0
  59. package/dist/host/css.d.ts +118 -0
  60. package/dist/host/css.d.ts.map +1 -0
  61. package/dist/host/css.js +963 -0
  62. package/dist/host/css.js.map +1 -0
  63. package/dist/host/draw-budget.d.ts +10 -0
  64. package/dist/host/draw-budget.d.ts.map +1 -0
  65. package/dist/host/draw-budget.js +29 -0
  66. package/dist/host/draw-budget.js.map +1 -0
  67. package/dist/host/frame.d.ts +19 -1
  68. package/dist/host/frame.d.ts.map +1 -1
  69. package/dist/host/frame.js +21 -2
  70. package/dist/host/frame.js.map +1 -1
  71. package/dist/host/index.d.ts +4 -3
  72. package/dist/host/index.d.ts.map +1 -1
  73. package/dist/host/index.js +7 -1
  74. package/dist/host/index.js.map +1 -1
  75. package/dist/host/kit.d.ts +6 -2
  76. package/dist/host/kit.d.ts.map +1 -1
  77. package/dist/host/kit.js +12 -5
  78. package/dist/host/kit.js.map +1 -1
  79. package/dist/host/links.d.ts +24 -0
  80. package/dist/host/links.d.ts.map +1 -0
  81. package/dist/host/links.js +35 -0
  82. package/dist/host/links.js.map +1 -0
  83. package/dist/host/manifest.d.ts +50 -0
  84. package/dist/host/manifest.d.ts.map +1 -0
  85. package/dist/host/manifest.js +103 -0
  86. package/dist/host/manifest.js.map +1 -0
  87. package/dist/host/open-draw.d.ts +44 -0
  88. package/dist/host/open-draw.d.ts.map +1 -0
  89. package/dist/host/open-draw.js +108 -0
  90. package/dist/host/open-draw.js.map +1 -0
  91. package/dist/host/open-judge.d.ts +53 -0
  92. package/dist/host/open-judge.d.ts.map +1 -0
  93. package/dist/host/open-judge.js +95 -0
  94. package/dist/host/open-judge.js.map +1 -0
  95. package/dist/host/open-render.d.ts +32 -0
  96. package/dist/host/open-render.d.ts.map +1 -0
  97. package/dist/host/open-render.js +262 -0
  98. package/dist/host/open-render.js.map +1 -0
  99. package/dist/host/press.d.ts +15 -0
  100. package/dist/host/press.d.ts.map +1 -0
  101. package/dist/host/press.js +156 -0
  102. package/dist/host/press.js.map +1 -0
  103. package/dist/host/react.d.ts +15 -2
  104. package/dist/host/react.d.ts.map +1 -1
  105. package/dist/host/react.js +13 -5
  106. package/dist/host/react.js.map +1 -1
  107. package/dist/host/session.d.ts +94 -1
  108. package/dist/host/session.d.ts.map +1 -1
  109. package/dist/host/session.js +103 -14
  110. package/dist/host/session.js.map +1 -1
  111. package/dist/host/theme.d.ts +14 -0
  112. package/dist/host/theme.d.ts.map +1 -0
  113. package/dist/host/theme.js +51 -0
  114. package/dist/host/theme.js.map +1 -0
  115. package/dist/host/view-runtime.generated.d.ts +2 -0
  116. package/dist/host/view-runtime.generated.d.ts.map +1 -0
  117. package/dist/host/view-runtime.generated.js +7 -0
  118. package/dist/host/view-runtime.generated.js.map +1 -0
  119. package/dist/host/view-source.d.ts +5 -0
  120. package/dist/host/view-source.d.ts.map +1 -0
  121. package/dist/host/view-source.js +39 -0
  122. package/dist/host/view-source.js.map +1 -0
  123. package/dist/host/view.d.ts +134 -0
  124. package/dist/host/view.d.ts.map +1 -0
  125. package/dist/host/view.js +381 -0
  126. package/dist/host/view.js.map +1 -0
  127. package/dist/host/views.d.ts +10 -0
  128. package/dist/host/views.d.ts.map +1 -0
  129. package/dist/host/views.js +15 -0
  130. package/dist/host/views.js.map +1 -0
  131. package/dist/host/worker-react.d.ts +51 -0
  132. package/dist/host/worker-react.d.ts.map +1 -0
  133. package/dist/host/worker-react.js +123 -0
  134. package/dist/host/worker-react.js.map +1 -0
  135. package/dist/host/worker-start.d.ts +49 -0
  136. package/dist/host/worker-start.d.ts.map +1 -0
  137. package/dist/host/worker-start.js +122 -0
  138. package/dist/host/worker-start.js.map +1 -0
  139. package/dist/host/worker.d.ts +17 -12
  140. package/dist/host/worker.d.ts.map +1 -1
  141. package/dist/host/worker.js +58 -117
  142. package/dist/host/worker.js.map +1 -1
  143. package/dist/host/writes.d.ts +49 -0
  144. package/dist/host/writes.d.ts.map +1 -0
  145. package/dist/host/writes.js +76 -0
  146. package/dist/host/writes.js.map +1 -0
  147. package/dist/index.d.ts +1 -1
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/open-kit.d.ts +148 -0
  150. package/dist/open-kit.d.ts.map +1 -0
  151. package/dist/open-kit.js +321 -0
  152. package/dist/open-kit.js.map +1 -0
  153. package/dist/protocol.d.ts +109 -3
  154. package/dist/protocol.d.ts.map +1 -1
  155. package/dist/protocol.js +13 -0
  156. package/dist/protocol.js.map +1 -1
  157. package/dist/worker/harden.d.ts +13 -2
  158. package/dist/worker/harden.d.ts.map +1 -1
  159. package/dist/worker/harden.js +10 -4
  160. package/dist/worker/harden.js.map +1 -1
  161. package/dist/worker/natives.d.ts +1 -0
  162. package/dist/worker/natives.d.ts.map +1 -1
  163. package/dist/worker/natives.js +4 -0
  164. package/dist/worker/natives.js.map +1 -1
  165. package/dist/worker/view-global.d.ts +70 -0
  166. package/dist/worker/view-global.d.ts.map +1 -0
  167. package/dist/worker/view-global.js +264 -0
  168. package/dist/worker/view-global.js.map +1 -0
  169. package/dist/worker/view.d.ts +14 -0
  170. package/dist/worker/view.d.ts.map +1 -0
  171. package/dist/worker/view.js +64 -0
  172. package/dist/worker/view.js.map +1 -0
  173. package/package.json +30 -4
@@ -0,0 +1,264 @@
1
+ /*
2
+ * THE `graview` GLOBAL, WHEREVER A VIEW RUNS (FR-90, FR-95).
3
+ *
4
+ * What a view is handed — `props`, `onProps`, `render`, `style`, `on`,
5
+ * `act`, `navigate`, `html` — made over Remote DOM's polyfilled document
6
+ * and a way out the runtime gives it: the port to the host, in a worker
7
+ * (worker/view.ts), or the transcript of a headless run, in an isolate a
8
+ * host chose (headless/runtime.ts). Either way the view is the same script
9
+ * and is handed the same global, so what it draws headless is what it
10
+ * draws in the page.
11
+ *
12
+ * `render` keeps what is already drawn where it can — same element, same
13
+ * key (`data-key` or `id`) — and changes only what moved, so a field the
14
+ * viewer is typing in keeps its text and its focus across a push.
15
+ */
16
+ import { RemoteRootElement, remoteId } from "@remote-dom/core/elements";
17
+ import { HTML_ELEMENTS, UNNAMED_ELEMENTS, openAttribute, svgElementName } from "../open-kit.js";
18
+ import { createListenerLedger } from "./listeners.js";
19
+ /** The element a view's drawing hangs from; the host's region stands for it. */
20
+ export const VIEW_ROOT = "graview-view-root";
21
+ const escape = (value) => value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
22
+ const markup = (html) => Object.freeze({ html, toString: () => html });
23
+ const isHtml = (value) => typeof value === "object" && value !== null && typeof value.html === "string" && Object.isFrozen(value);
24
+ const piece = (value) => {
25
+ if (value === null || value === undefined || value === false)
26
+ return "";
27
+ if (Array.isArray(value))
28
+ return value.map(piece).join("");
29
+ if (isHtml(value))
30
+ return value.html;
31
+ return escape(String(value));
32
+ };
33
+ /**
34
+ * Make the global over Remote DOM's polyfilled document, which must be in
35
+ * place already. Once per runtime: the root element is defined here.
36
+ */
37
+ export function createViewRuntime(io) {
38
+ if (!customElements.get(VIEW_ROOT))
39
+ customElements.define(VIEW_ROOT, RemoteRootElement);
40
+ /* Kept as the runtime found them: a view's own code cannot swap what the runtime builds with. */
41
+ const DomEvent = Event;
42
+ const ledger = createListenerLedger();
43
+ const propsListeners = new Set();
44
+ const delegated = new Set();
45
+ let current;
46
+ let refusedLast = [];
47
+ const root = document.createElement(VIEW_ROOT);
48
+ const byId = (id) => {
49
+ const walk = (node) => {
50
+ for (const child of Array.from(node.childNodes)) {
51
+ if (child.nodeType !== 1)
52
+ continue;
53
+ if (remoteId(child) === id)
54
+ return child;
55
+ const found = walk(child);
56
+ if (found)
57
+ return found;
58
+ }
59
+ return undefined;
60
+ };
61
+ return walk(root);
62
+ };
63
+ const heard = (message) => {
64
+ const target = byId(message.target);
65
+ if (!target)
66
+ return;
67
+ const event = new DomEvent(message.event, { bubbles: true });
68
+ for (const key of ["value", "checked", "key", "pressed"])
69
+ if (message[key] !== undefined)
70
+ Object.defineProperty(event, key, { value: message[key], enumerable: true });
71
+ target.dispatchEvent(event);
72
+ for (const one of delegated) {
73
+ if (one.type !== message.event)
74
+ continue;
75
+ let matching;
76
+ try {
77
+ matching = new Set(Array.from(root.querySelectorAll(one.selector)));
78
+ }
79
+ catch {
80
+ continue;
81
+ }
82
+ for (let at = target; at && at !== root; at = at.parentNode) {
83
+ if (!matching.has(at))
84
+ continue;
85
+ one.listener(Object.freeze({ type: message.event, target, element: at, ...(message.value !== undefined ? { value: message.value } : {}), ...(message.checked !== undefined ? { checked: message.checked } : {}), ...(message.key !== undefined ? { key: message.key } : {}), ...(message.pressed !== undefined ? { pressed: message.pressed } : {}) }));
86
+ break;
87
+ }
88
+ }
89
+ };
90
+ const hear = (message) => {
91
+ if (message.type === "dom-event" && typeof message.target === "string")
92
+ return heard(message);
93
+ if (message.type !== "props")
94
+ return;
95
+ /*
96
+ * A PUSH, TIMED. The view's listeners run now; what they drew goes in
97
+ * the next microtask; then the runtime says it has drawn this push,
98
+ * and how long the view's own work took (FR-94). The view cannot say
99
+ * it for itself: the way out is the runtime's.
100
+ */
101
+ current = message.props;
102
+ const began = io.now();
103
+ for (const listener of propsListeners) {
104
+ try {
105
+ listener(message.props);
106
+ }
107
+ catch (error) {
108
+ io.threw(error);
109
+ }
110
+ }
111
+ const ms = io.now() - began;
112
+ const push = message.push;
113
+ if (typeof push === "number")
114
+ io.microtask(() => io.microtask(() => io.send({ type: "pushed", push, ms })));
115
+ };
116
+ /* A microtask's mutations go as one message: a render is one message, not one per node. */
117
+ let pending;
118
+ root.connect({
119
+ mutate(records) {
120
+ if (!pending) {
121
+ pending = [];
122
+ io.microtask(() => {
123
+ const batch = pending ?? [];
124
+ pending = undefined;
125
+ io.send({ type: "render", records: ledger.encode(batch) });
126
+ });
127
+ }
128
+ pending.push(...records);
129
+ },
130
+ call: () => undefined,
131
+ });
132
+ const keyOf = (node) => (node.nodeType === 1 ? (node.getAttribute("data-key") ?? node.getAttribute("id")) : null);
133
+ const same = (a, b) => a.nodeType === b.nodeType && (a.nodeType !== 1 || (a.localName === b.localName && a.namespaceURI === b.namespaceURI && keyOf(a) === keyOf(b)));
134
+ /** Make `live` hold what `next` holds, keeping every node that can stay. */
135
+ function morph(live, next) {
136
+ const wanted = Array.from(next.childNodes);
137
+ let index = 0;
138
+ for (const want of wanted) {
139
+ const have = live.childNodes[index] ?? null;
140
+ if (have && same(have, want)) {
141
+ update(have, want);
142
+ index += 1;
143
+ continue;
144
+ }
145
+ const key = keyOf(want);
146
+ if (key !== null) {
147
+ const later = Array.from(live.childNodes)
148
+ .slice(index + 1)
149
+ .find((candidate) => same(candidate, want));
150
+ if (later) {
151
+ live.insertBefore(later, have);
152
+ update(later, want);
153
+ index += 1;
154
+ continue;
155
+ }
156
+ }
157
+ live.insertBefore(want, have);
158
+ index += 1;
159
+ }
160
+ while (live.childNodes.length > index)
161
+ live.removeChild(live.lastChild);
162
+ }
163
+ function update(have, want) {
164
+ if (have.nodeType !== 1) {
165
+ if (have.data !== want.data)
166
+ have.data = want.data;
167
+ return;
168
+ }
169
+ const from = have;
170
+ const to = want;
171
+ for (const name of from.getAttributeNames())
172
+ if (!to.hasAttribute(name))
173
+ from.removeAttribute(name);
174
+ for (const name of to.getAttributeNames()) {
175
+ const value = to.getAttribute(name);
176
+ if (from.getAttribute(name) !== value)
177
+ from.setAttribute(name, value);
178
+ }
179
+ morph(from, to);
180
+ }
181
+ /** What the host will not draw, by the open kit's tables: said at once, for the author. */
182
+ function precheck(node, svg, said) {
183
+ for (const child of Array.from(node.childNodes)) {
184
+ if (child.nodeType !== 1)
185
+ continue;
186
+ const element = child;
187
+ const name = element.localName;
188
+ const inSvg = svg || name.toLowerCase() === "svg";
189
+ const canonical = inSvg ? svgElementName(name) : Object.prototype.hasOwnProperty.call(HTML_ELEMENTS, name.toLowerCase()) ? name.toLowerCase() : undefined;
190
+ if (!canonical) {
191
+ said.add(`<${name}>`);
192
+ continue;
193
+ }
194
+ for (const attribute of element.getAttributeNames()) {
195
+ if (!openAttribute(inSvg ? "svg" : "html", canonical, attribute) || (!inSvg && UNNAMED_ELEMENTS[canonical]?.includes(attribute.toLowerCase())))
196
+ said.add(`${canonical} ${attribute}`);
197
+ }
198
+ precheck(element, inSvg, said);
199
+ }
200
+ }
201
+ function render(content) {
202
+ const next = document.createElement("div");
203
+ const parts = Array.isArray(content) ? content : [content];
204
+ for (const part of parts) {
205
+ if (part === null || part === undefined)
206
+ continue;
207
+ if (typeof part === "string" || isHtml(part)) {
208
+ const holder = document.createElement("div");
209
+ holder.innerHTML = typeof part === "string" ? part : part.html;
210
+ next.append(...Array.from(holder.childNodes));
211
+ }
212
+ else
213
+ next.append(part);
214
+ }
215
+ const said = new Set();
216
+ precheck(next, false, said);
217
+ refusedLast = [...said];
218
+ if (refusedLast.length > 0)
219
+ io.warn(`The host will not draw: ${refusedLast.join(", ")}`);
220
+ morph(root, next);
221
+ }
222
+ let styled;
223
+ const view = Object.freeze({
224
+ get props() {
225
+ return current;
226
+ },
227
+ onProps(listener) {
228
+ propsListeners.add(listener);
229
+ if (current)
230
+ listener(current);
231
+ return () => void propsListeners.delete(listener);
232
+ },
233
+ render,
234
+ style(css) {
235
+ if (typeof css !== "string" || css === styled)
236
+ return;
237
+ styled = css;
238
+ io.send({ type: "style", css });
239
+ },
240
+ on(type, selector, listener) {
241
+ const one = { type, selector, listener };
242
+ delegated.add(one);
243
+ return () => void delegated.delete(one);
244
+ },
245
+ act: (name, args = {}) => io.act(name, args),
246
+ navigate(to) {
247
+ if (typeof to === "string")
248
+ io.navigate(to);
249
+ else if (to && typeof to.place === "string")
250
+ io.send({ type: "navigate", place: to.place });
251
+ },
252
+ html(strings, ...values) {
253
+ return markup(strings.reduce((out, text, index) => out + text + (index < values.length ? piece(values[index]) : ""), ""));
254
+ },
255
+ get refused() {
256
+ return refusedLast;
257
+ },
258
+ get hardening() {
259
+ return io.hardening();
260
+ },
261
+ });
262
+ return { view, hear };
263
+ }
264
+ //# sourceMappingURL=view-global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-global.js","sourceRoot":"","sources":["../../src/worker/view-global.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import "@remote-dom/core/polyfill";
2
+ import { type Hardening } from "./harden.js";
3
+ declare const view: import("./view-global.js").GraviewView;
4
+ /**
5
+ * WHAT HARDENING TOOK (FR-70), with `graview` kept. As for the kit's guest:
6
+ * a name that will not go stops the runtime before the view runs, and in a
7
+ * test of the runtime outside a worker nothing is hardened.
8
+ */
9
+ export declare const hardening: Hardening;
10
+ export { view as graview };
11
+ export { VIEW_ROOT } from "./view-global.js";
12
+ export type { Drawable, GraviewView, Html, ViewEvent } from "./view-global.js";
13
+ export type { GuestAnswer, GuestPressed, GuestProps, GuestTheme } from "../protocol.js";
14
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/worker/view.ts"],"names":[],"mappings":"AA0BA,OAAO,2BAA2B,CAAC;AAGnC,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AA4BrD,QAAA,MAAM,IAAI,wCAAe,CAAC;AAI1B;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,SAA0F,CAAC;AAInH,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,64 @@
1
+ /*
2
+ * A WORKER VIEW'S RUNTIME (FR-90): `@graview/guest/worker/view`.
3
+ *
4
+ * The open kit's half in the worker. Like the kit's guest entry
5
+ * (worker/index.ts) it keeps how to hear the host, boots Remote DOM's
6
+ * polyfill and hardens the worker before a line of the view runs; unlike
7
+ * it, it defines no components. A view draws plain HTML and SVG, and gives
8
+ * one stylesheet, and the host draws what the open kit allows of them
9
+ * (open-kit.ts, host/open-render.ts, host/css.ts).
10
+ *
11
+ * What a view is handed is one global, `graview`, kept through hardening
12
+ * and frozen with the rest (view-global.ts says what it holds):
13
+ *
14
+ * graview.props what the host last pushed: the viewer's sight
15
+ * graview.onProps(fn) called with every push (and at once, if there is one)
16
+ * graview.render(markup) draw: a string of HTML, `graview.html`…`` or nodes
17
+ * graview.style(css) the view's one stylesheet
18
+ * graview.on(type, selector, fn) hear the viewer: click, input, change, keydown, toggle
19
+ * graview.act(name, args) ask for an act; resolves with the host's answer
20
+ * graview.navigate(to) go to a record (its id) or a place ({ place: slug })
21
+ * graview.html`` markup, with every value put in it escaped
22
+ *
23
+ * The same global, over a transcript rather than a port, is what a
24
+ * headless run hands a view (headless/runtime.ts, FR-95).
25
+ */
26
+ import { natives } from "./natives.js";
27
+ import "@remote-dom/core/polyfill";
28
+ import { openGuest } from "../channel.js";
29
+ import { harden } from "./harden.js";
30
+ import { createViewRuntime } from "./view-global.js";
31
+ let hardened = { removed: [], stuck: [], sealed: false, worker: false };
32
+ const opened = openGuest({
33
+ listen(hear) {
34
+ natives.listen(hear);
35
+ return () => natives.unlisten(hear);
36
+ },
37
+ /* A dedicated worker hears only its owner: whoever posts to it is the host that started it. */
38
+ fromHost: () => true,
39
+ ready: (message) => natives.post(message),
40
+ }, { onMessage: (message) => runtime.hear(message) });
41
+ const runtime = createViewRuntime({
42
+ send: (request) => opened.send(request),
43
+ act: (name, args) => opened.guest.act(name, args),
44
+ navigate: (to) => opened.guest.navigate(to),
45
+ microtask: natives.microtask,
46
+ now: natives.now,
47
+ threw: (error) => console.error(error),
48
+ warn: (text) => console.warn(text),
49
+ hardening: () => hardened,
50
+ });
51
+ const view = runtime.view;
52
+ Object.defineProperty(globalThis, "graview", { value: view, enumerable: true, configurable: true, writable: false });
53
+ /**
54
+ * WHAT HARDENING TOOK (FR-70), with `graview` kept. As for the kit's guest:
55
+ * a name that will not go stops the runtime before the view runs, and in a
56
+ * test of the runtime outside a worker nothing is hardened.
57
+ */
58
+ export const hardening = "WorkerGlobalScope" in globalThis ? harden(globalThis, ["graview"]) : hardened;
59
+ hardened = hardening;
60
+ if (hardening.stuck.length > 0)
61
+ throw new Error(`The view's worker could not be hardened: ${hardening.stuck.join(", ")} would not go.`);
62
+ export { view as graview };
63
+ export { VIEW_ROOT } from "./view-global.js";
64
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/worker/view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,IAAI,QAAQ,GAAc,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAEnF,MAAM,MAAM,GAAG,SAAS,CACtB;IACE,MAAM,CAAC,IAAI;QACT,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,+FAA+F;IAC/F,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;IACpB,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;CAC1C,EACD,EAAE,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAC/D,CAAC;AAEF,MAAM,OAAO,GAAG,iBAAiB,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;IACjD,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,SAAS,EAAE,OAAO,CAAC,SAAS;IAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IACtC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IAClC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ;CAC1B,CAAC,CAAC;AACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAE1B,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAErH;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAc,mBAAmB,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnH,QAAQ,GAAG,SAAS,CAAC;AACrB,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAExI,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graview/guest",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "type": "module",
5
5
  "description": "Guest views: somebody else's React or plain script in a sandboxed frame, or a hardened classic worker drawing a component kit, shown only what the viewer may see, able only to ask for acts the viewer's seat then applies.",
6
6
  "keywords": [
@@ -33,20 +33,45 @@
33
33
  "types": "./dist/host/worker.d.ts",
34
34
  "default": "./dist/host/worker.js"
35
35
  },
36
+ "./host/views": {
37
+ "types": "./dist/host/views.d.ts",
38
+ "default": "./dist/host/views.js"
39
+ },
40
+ "./headless": {
41
+ "types": "./dist/headless/index.d.ts",
42
+ "default": "./dist/headless/index.js"
43
+ },
44
+ "./headless/node": {
45
+ "types": "./dist/headless/node.d.ts",
46
+ "default": "./dist/headless/node.js"
47
+ },
36
48
  "./worker": {
37
49
  "types": "./dist/worker/index.d.ts",
38
50
  "default": "./dist/worker/index.js"
39
51
  },
52
+ "./worker/view": {
53
+ "types": "./dist/worker/view.d.ts",
54
+ "default": "./dist/worker/view.js"
55
+ },
40
56
  "./build": {
41
57
  "types": "./dist/build.d.ts",
42
58
  "default": "./dist/build.js"
43
- }
59
+ },
60
+ "./cli": {
61
+ "types": "./dist/cli.d.ts",
62
+ "default": "./dist/cli.js"
63
+ },
64
+ "./client": {
65
+ "types": "./dist/client.d.ts",
66
+ "default": "./dist/client.js"
67
+ },
68
+ "./client.js": "./client.js"
44
69
  },
45
70
  "dependencies": {
46
71
  "@remote-dom/core": "1.12.0",
47
72
  "@remote-dom/polyfill": "1.6.0",
48
- "@graview/core": "0.1.9",
49
- "@graview/react": "0.1.9"
73
+ "@graview/core": "0.1.10",
74
+ "@graview/react": "0.1.10"
50
75
  },
51
76
  "peerDependencies": {
52
77
  "react": ">=18",
@@ -62,6 +87,7 @@
62
87
  },
63
88
  "files": [
64
89
  "dist",
90
+ "client.js",
65
91
  "README.md"
66
92
  ],
67
93
  "sideEffects": [