@ghia/native 0.0.0 → 0.11.0
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/LICENSE +201 -0
- package/browser.mjs +7 -0
- package/dist/aria.d.ts +72 -0
- package/dist/aria.d.ts.map +1 -0
- package/dist/aria.js +2 -0
- package/dist/aria.js.map +1 -0
- package/dist/automation/client.d.ts +243 -0
- package/dist/automation/client.d.ts.map +1 -0
- package/dist/automation/client.js +801 -0
- package/dist/automation/client.js.map +1 -0
- package/dist/automation/index.d.ts +5 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +4 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/protocol.d.ts +309 -0
- package/dist/automation/protocol.d.ts.map +1 -0
- package/dist/automation/protocol.js +320 -0
- package/dist/automation/protocol.js.map +1 -0
- package/dist/blob-images.d.ts +32 -0
- package/dist/blob-images.d.ts.map +1 -0
- package/dist/blob-images.js +55 -0
- package/dist/blob-images.js.map +1 -0
- package/dist/bounds.d.ts +61 -0
- package/dist/bounds.d.ts.map +1 -0
- package/dist/bounds.js +85 -0
- package/dist/bounds.js.map +1 -0
- package/dist/clipboard-global.d.ts +11 -0
- package/dist/clipboard-global.d.ts.map +1 -0
- package/dist/clipboard-global.js +2 -0
- package/dist/clipboard-global.js.map +1 -0
- package/dist/clipboard.d.ts +19 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +41 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/cpu-throttle.d.ts +6 -0
- package/dist/cpu-throttle.d.ts.map +1 -0
- package/dist/cpu-throttle.js +42 -0
- package/dist/cpu-throttle.js.map +1 -0
- package/dist/events/data-transfer.d.ts +23 -0
- package/dist/events/data-transfer.d.ts.map +1 -0
- package/dist/events/data-transfer.js +97 -0
- package/dist/events/data-transfer.js.map +1 -0
- package/dist/events/dispatch.d.ts +144 -0
- package/dist/events/dispatch.d.ts.map +1 -0
- package/dist/events/dispatch.js +241 -0
- package/dist/events/dispatch.js.map +1 -0
- package/dist/events/drag.d.ts +21 -0
- package/dist/events/drag.d.ts.map +1 -0
- package/dist/events/drag.js +111 -0
- package/dist/events/drag.js.map +1 -0
- package/dist/events/event-props.d.ts +19 -0
- package/dist/events/event-props.d.ts.map +1 -0
- package/dist/events/event-props.js +104 -0
- package/dist/events/event-props.js.map +1 -0
- package/dist/events/keyboard-defaults.d.ts +18 -0
- package/dist/events/keyboard-defaults.d.ts.map +1 -0
- package/dist/events/keyboard-defaults.js +121 -0
- package/dist/events/keyboard-defaults.js.map +1 -0
- package/dist/events/listeners.d.ts +18 -0
- package/dist/events/listeners.d.ts.map +1 -0
- package/dist/events/listeners.js +49 -0
- package/dist/events/listeners.js.map +1 -0
- package/dist/events/route.d.ts +17 -0
- package/dist/events/route.d.ts.map +1 -0
- package/dist/events/route.js +36 -0
- package/dist/events/route.js.map +1 -0
- package/dist/events/types.d.ts +269 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/events/window-target.d.ts +120 -0
- package/dist/events/window-target.d.ts.map +1 -0
- package/dist/events/window-target.js +311 -0
- package/dist/events/window-target.js.map +1 -0
- package/dist/eyedropper.d.ts +33 -0
- package/dist/eyedropper.d.ts.map +1 -0
- package/dist/eyedropper.js +66 -0
- package/dist/eyedropper.js.map +1 -0
- package/dist/focus.d.ts +18 -0
- package/dist/focus.d.ts.map +1 -0
- package/dist/focus.js +26 -0
- package/dist/focus.js.map +1 -0
- package/dist/fonts.d.ts +12 -0
- package/dist/fonts.d.ts.map +1 -0
- package/dist/fonts.js +17 -0
- package/dist/fonts.js.map +1 -0
- package/dist/forms.d.ts +10 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +9 -0
- package/dist/forms.js.map +1 -0
- package/dist/host-runtime.d.ts +108 -0
- package/dist/host-runtime.d.ts.map +1 -0
- package/dist/host-runtime.js +213 -0
- package/dist/host-runtime.js.map +1 -0
- package/dist/host.d.ts +2403 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +30 -0
- package/dist/host.js.map +1 -0
- package/dist/idle-gc.d.ts +36 -0
- package/dist/idle-gc.d.ts.map +1 -0
- package/dist/idle-gc.js +70 -0
- package/dist/idle-gc.js.map +1 -0
- package/dist/keyframes.d.ts +108 -0
- package/dist/keyframes.d.ts.map +1 -0
- package/dist/keyframes.js +107 -0
- package/dist/keyframes.js.map +1 -0
- package/dist/layout-animation.d.ts +38 -0
- package/dist/layout-animation.d.ts.map +1 -0
- package/dist/layout-animation.js +41 -0
- package/dist/layout-animation.js.map +1 -0
- package/dist/match-media.d.ts +62 -0
- package/dist/match-media.d.ts.map +1 -0
- package/dist/match-media.js +272 -0
- package/dist/match-media.js.map +1 -0
- package/dist/media-query.d.ts +21 -0
- package/dist/media-query.d.ts.map +1 -0
- package/dist/media-query.js +599 -0
- package/dist/media-query.js.map +1 -0
- package/dist/motion-bindings.d.ts +36 -0
- package/dist/motion-bindings.d.ts.map +1 -0
- package/dist/motion-bindings.js +107 -0
- package/dist/motion-bindings.js.map +1 -0
- package/dist/motion-config.d.ts +20 -0
- package/dist/motion-config.d.ts.map +1 -0
- package/dist/motion-config.js +51 -0
- package/dist/motion-config.js.map +1 -0
- package/dist/motion-span.d.ts +57 -0
- package/dist/motion-span.d.ts.map +1 -0
- package/dist/motion-span.js +150 -0
- package/dist/motion-span.js.map +1 -0
- package/dist/motion-value.d.ts +269 -0
- package/dist/motion-value.d.ts.map +1 -0
- package/dist/motion-value.js +941 -0
- package/dist/motion-value.js.map +1 -0
- package/dist/motion-variants.d.ts +190 -0
- package/dist/motion-variants.d.ts.map +1 -0
- package/dist/motion-variants.js +249 -0
- package/dist/motion-variants.js.map +1 -0
- package/dist/mutations.d.ts +65 -0
- package/dist/mutations.d.ts.map +1 -0
- package/dist/mutations.js +320 -0
- package/dist/mutations.js.map +1 -0
- package/dist/nativeview.d.ts +10 -0
- package/dist/nativeview.d.ts.map +1 -0
- package/dist/nativeview.js +92 -0
- package/dist/nativeview.js.map +1 -0
- package/dist/observers.d.ts +92 -0
- package/dist/observers.d.ts.map +1 -0
- package/dist/observers.js +579 -0
- package/dist/observers.js.map +1 -0
- package/dist/presence.d.ts +63 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +54 -0
- package/dist/presence.js.map +1 -0
- package/dist/renderer-state.d.ts +155 -0
- package/dist/renderer-state.d.ts.map +1 -0
- package/dist/renderer-state.js +302 -0
- package/dist/renderer-state.js.map +1 -0
- package/dist/reorder.d.ts +63 -0
- package/dist/reorder.d.ts.map +1 -0
- package/dist/reorder.js +303 -0
- package/dist/reorder.js.map +1 -0
- package/dist/runtime.d.ts +23 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +157 -0
- package/dist/runtime.js.map +1 -0
- package/dist/screen.d.ts +8 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +16 -0
- package/dist/screen.js.map +1 -0
- package/dist/scroll.d.ts +79 -0
- package/dist/scroll.d.ts.map +1 -0
- package/dist/scroll.js +170 -0
- package/dist/scroll.js.map +1 -0
- package/dist/style-images.d.ts +20 -0
- package/dist/style-images.d.ts.map +1 -0
- package/dist/style-images.js +57 -0
- package/dist/style-images.js.map +1 -0
- package/dist/svg.d.ts +16 -0
- package/dist/svg.d.ts.map +1 -0
- package/dist/svg.js +119 -0
- package/dist/svg.js.map +1 -0
- package/dist/testing.d.ts +811 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +1187 -0
- package/dist/testing.js.map +1 -0
- package/dist/text-match.d.ts +8 -0
- package/dist/text-match.d.ts.map +1 -0
- package/dist/text-match.js +10 -0
- package/dist/text-match.js.map +1 -0
- package/dist/text-selection.d.ts +34 -0
- package/dist/text-selection.d.ts.map +1 -0
- package/dist/text-selection.js +23 -0
- package/dist/text-selection.js.map +1 -0
- package/dist/universal-style.d.ts +22 -0
- package/dist/universal-style.d.ts.map +1 -0
- package/dist/universal-style.js +58 -0
- package/dist/universal-style.js.map +1 -0
- package/dist/web-animations.d.ts +300 -0
- package/dist/web-animations.d.ts.map +1 -0
- package/dist/web-animations.js +1032 -0
- package/dist/web-animations.js.map +1 -0
- package/dist/webview.d.ts +39 -0
- package/dist/webview.d.ts.map +1 -0
- package/dist/webview.js +26 -0
- package/dist/webview.js.map +1 -0
- package/gpuix-native.darwin-arm64.node +4 -0
- package/index.cjs +789 -0
- package/index.d.ts +2603 -0
- package/index.js +729 -0
- package/package.json +96 -4
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/// Typed GPUIX automation protocol and SSE codec.
|
|
2
|
+
///
|
|
3
|
+
/// Wire format is SSE `data:` lines so `eventsource-parser` can extract
|
|
4
|
+
/// messages from noisy stdout. JSON carries every field. Do not emit SSE
|
|
5
|
+
/// `id:` or `event:` fields; process logs that start with those prefixes
|
|
6
|
+
/// would otherwise leak into the next message.
|
|
7
|
+
import { createParser } from "eventsource-parser";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
export const PROTOCOL_VERSION = 1;
|
|
10
|
+
export const automationErrorCodes = [
|
|
11
|
+
"Timeout",
|
|
12
|
+
"NotFound",
|
|
13
|
+
"Ambiguous",
|
|
14
|
+
"Protocol",
|
|
15
|
+
"Closed",
|
|
16
|
+
"Unsupported",
|
|
17
|
+
"Security",
|
|
18
|
+
"Cancelled",
|
|
19
|
+
];
|
|
20
|
+
export class AutomationError extends Error {
|
|
21
|
+
code;
|
|
22
|
+
data;
|
|
23
|
+
constructor(code, message, data) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = "AutomationError";
|
|
26
|
+
this.code = code;
|
|
27
|
+
this.data = data;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const errorCodeSchema = z.enum(automationErrorCodes);
|
|
31
|
+
const pointSchema = z.object({
|
|
32
|
+
x: z.number(),
|
|
33
|
+
y: z.number(),
|
|
34
|
+
});
|
|
35
|
+
const buttonSchema = z.number().int().min(0).max(2).optional();
|
|
36
|
+
/** Held modifiers, hyphenated: `"cmd"`, `"cmd-shift"`, `"alt"`. */
|
|
37
|
+
const modifiersSchema = z.string().optional();
|
|
38
|
+
export const boundsSchema = z.object({
|
|
39
|
+
x: z.number(),
|
|
40
|
+
y: z.number(),
|
|
41
|
+
width: z.number(),
|
|
42
|
+
height: z.number(),
|
|
43
|
+
});
|
|
44
|
+
export const treeNodeSchema = z.lazy(() => z.object({
|
|
45
|
+
id: z.number(),
|
|
46
|
+
type: z.string(),
|
|
47
|
+
text: z.string().optional(),
|
|
48
|
+
testId: z.string().optional(),
|
|
49
|
+
style: z.record(z.string(), z.unknown()).optional(),
|
|
50
|
+
events: z.array(z.string()).optional(),
|
|
51
|
+
customProps: z.record(z.string(), z.unknown()).optional(),
|
|
52
|
+
bounds: boundsSchema.optional(),
|
|
53
|
+
children: z.array(treeNodeSchema).optional(),
|
|
54
|
+
}));
|
|
55
|
+
const okSchema = z.object({ ok: z.literal(true) });
|
|
56
|
+
const capabilitiesSchema = z.array(z.enum(["input", "screenshot", "clock", "tree"]));
|
|
57
|
+
/** Single source of truth for method names, params, and results. */
|
|
58
|
+
export const methods = {
|
|
59
|
+
initialize: {
|
|
60
|
+
params: z.object({
|
|
61
|
+
protocolVersion: z.literal(PROTOCOL_VERSION),
|
|
62
|
+
client: z.string(),
|
|
63
|
+
}),
|
|
64
|
+
result: z.object({
|
|
65
|
+
protocolVersion: z.literal(PROTOCOL_VERSION),
|
|
66
|
+
pid: z.number().int(),
|
|
67
|
+
capabilities: capabilitiesSchema,
|
|
68
|
+
window: z.object({
|
|
69
|
+
width: z.number(),
|
|
70
|
+
height: z.number(),
|
|
71
|
+
}),
|
|
72
|
+
}),
|
|
73
|
+
},
|
|
74
|
+
cancel: {
|
|
75
|
+
params: z.object({ id: z.number().int() }),
|
|
76
|
+
result: okSchema,
|
|
77
|
+
},
|
|
78
|
+
click: {
|
|
79
|
+
params: z.object({
|
|
80
|
+
x: z.number(),
|
|
81
|
+
y: z.number(),
|
|
82
|
+
button: buttonSchema,
|
|
83
|
+
modifiers: modifiersSchema,
|
|
84
|
+
}),
|
|
85
|
+
result: okSchema,
|
|
86
|
+
},
|
|
87
|
+
mouseDown: {
|
|
88
|
+
params: pointSchema.extend({
|
|
89
|
+
button: buttonSchema,
|
|
90
|
+
modifiers: modifiersSchema,
|
|
91
|
+
}),
|
|
92
|
+
result: okSchema,
|
|
93
|
+
},
|
|
94
|
+
mouseUp: {
|
|
95
|
+
params: pointSchema.extend({
|
|
96
|
+
button: buttonSchema,
|
|
97
|
+
modifiers: modifiersSchema,
|
|
98
|
+
}),
|
|
99
|
+
result: okSchema,
|
|
100
|
+
},
|
|
101
|
+
mouseMove: {
|
|
102
|
+
params: pointSchema.extend({
|
|
103
|
+
modifiers: modifiersSchema,
|
|
104
|
+
}),
|
|
105
|
+
result: okSchema,
|
|
106
|
+
},
|
|
107
|
+
scrollWheel: {
|
|
108
|
+
params: pointSchema.extend({
|
|
109
|
+
deltaX: z.number(),
|
|
110
|
+
deltaY: z.number(),
|
|
111
|
+
modifiers: modifiersSchema,
|
|
112
|
+
}),
|
|
113
|
+
result: okSchema,
|
|
114
|
+
},
|
|
115
|
+
keystrokes: {
|
|
116
|
+
params: z.object({
|
|
117
|
+
keys: z.string(),
|
|
118
|
+
elementId: z.number().optional(),
|
|
119
|
+
}),
|
|
120
|
+
result: okSchema,
|
|
121
|
+
},
|
|
122
|
+
keyDown: {
|
|
123
|
+
params: z.object({
|
|
124
|
+
key: z.string(),
|
|
125
|
+
isHeld: z.boolean().optional(),
|
|
126
|
+
elementId: z.number().optional(),
|
|
127
|
+
}),
|
|
128
|
+
result: okSchema,
|
|
129
|
+
},
|
|
130
|
+
keyUp: {
|
|
131
|
+
params: z.object({
|
|
132
|
+
key: z.string(),
|
|
133
|
+
elementId: z.number().optional(),
|
|
134
|
+
}),
|
|
135
|
+
result: okSchema,
|
|
136
|
+
},
|
|
137
|
+
focus: {
|
|
138
|
+
params: z.object({ elementId: z.number() }),
|
|
139
|
+
result: okSchema,
|
|
140
|
+
},
|
|
141
|
+
blur: {
|
|
142
|
+
params: z.object({}),
|
|
143
|
+
result: okSchema,
|
|
144
|
+
},
|
|
145
|
+
scrollTo: {
|
|
146
|
+
// The DOM's scroll position (`scrollLeft`, `scrollTop`, zero or more), not GPUI's offset.
|
|
147
|
+
params: z.object({
|
|
148
|
+
elementId: z.number(),
|
|
149
|
+
x: z.number(),
|
|
150
|
+
y: z.number(),
|
|
151
|
+
}),
|
|
152
|
+
result: okSchema,
|
|
153
|
+
},
|
|
154
|
+
getScrollOffset: {
|
|
155
|
+
// `[scrollLeft, scrollTop]`, zero or more.
|
|
156
|
+
params: z.object({ elementId: z.number() }),
|
|
157
|
+
result: z.object({
|
|
158
|
+
offset: z.tuple([z.number(), z.number()]).nullable(),
|
|
159
|
+
}),
|
|
160
|
+
},
|
|
161
|
+
getTree: {
|
|
162
|
+
params: z.object({}),
|
|
163
|
+
result: z.object({ tree: treeNodeSchema.nullable() }),
|
|
164
|
+
},
|
|
165
|
+
getPaintedText: {
|
|
166
|
+
params: z.object({}),
|
|
167
|
+
result: z.object({ text: z.array(z.string()) }),
|
|
168
|
+
},
|
|
169
|
+
getAllText: {
|
|
170
|
+
params: z.object({}),
|
|
171
|
+
result: z.object({ text: z.array(z.string()) }),
|
|
172
|
+
},
|
|
173
|
+
getBounds: {
|
|
174
|
+
params: z.object({ elementId: z.number() }),
|
|
175
|
+
result: z.object({ bounds: boundsSchema.nullable() }),
|
|
176
|
+
},
|
|
177
|
+
getSelectedText: {
|
|
178
|
+
params: z.object({}),
|
|
179
|
+
result: z.object({ text: z.string().nullable() }),
|
|
180
|
+
},
|
|
181
|
+
clearSelection: {
|
|
182
|
+
params: z.object({}),
|
|
183
|
+
result: okSchema,
|
|
184
|
+
},
|
|
185
|
+
screenshot: {
|
|
186
|
+
params: z.object({ path: z.string() }),
|
|
187
|
+
result: z.object({ path: z.string() }),
|
|
188
|
+
},
|
|
189
|
+
clockPause: {
|
|
190
|
+
params: z.object({}),
|
|
191
|
+
result: z.object({ nowMs: z.number() }),
|
|
192
|
+
},
|
|
193
|
+
clockSet: {
|
|
194
|
+
params: z.object({ nowMs: z.number().nonnegative() }),
|
|
195
|
+
result: z.object({ nowMs: z.number() }),
|
|
196
|
+
},
|
|
197
|
+
clockFastForward: {
|
|
198
|
+
params: z.object({ deltaMs: z.number().nonnegative() }),
|
|
199
|
+
result: z.object({ nowMs: z.number() }),
|
|
200
|
+
},
|
|
201
|
+
clockResume: {
|
|
202
|
+
params: z.object({}),
|
|
203
|
+
result: z.object({ nowMs: z.number() }),
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
export const serverEventNames = ["console", "frame", "closed"];
|
|
207
|
+
const methodNames = Object.keys(methods);
|
|
208
|
+
function isObject(value) {
|
|
209
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
210
|
+
}
|
|
211
|
+
function parseMethodName(value) {
|
|
212
|
+
if (typeof value !== "string" || !methodNames.includes(value)) {
|
|
213
|
+
throw new AutomationError("Protocol", `Unknown automation method: ${String(value)}`);
|
|
214
|
+
}
|
|
215
|
+
return value;
|
|
216
|
+
}
|
|
217
|
+
export function parseRequest(value) {
|
|
218
|
+
if (!isObject(value)) {
|
|
219
|
+
throw new AutomationError("Protocol", "Request must be an object");
|
|
220
|
+
}
|
|
221
|
+
if (typeof value.id !== "number" || !Number.isInteger(value.id)) {
|
|
222
|
+
throw new AutomationError("Protocol", "Request id must be an integer");
|
|
223
|
+
}
|
|
224
|
+
const method = parseMethodName(value.method);
|
|
225
|
+
const parsed = methods[method].params.safeParse(value.params);
|
|
226
|
+
if (!parsed.success) {
|
|
227
|
+
throw new AutomationError("Protocol", `Invalid params for ${method}: ${parsed.error.message}`, parsed.error.issues);
|
|
228
|
+
}
|
|
229
|
+
return { id: value.id, method, params: parsed.data };
|
|
230
|
+
}
|
|
231
|
+
export function parseResponse(value) {
|
|
232
|
+
if (!isObject(value)) {
|
|
233
|
+
throw new AutomationError("Protocol", "Response must be an object");
|
|
234
|
+
}
|
|
235
|
+
if (typeof value.id !== "number" || !Number.isInteger(value.id)) {
|
|
236
|
+
throw new AutomationError("Protocol", "Response id must be an integer");
|
|
237
|
+
}
|
|
238
|
+
if ("error" in value) {
|
|
239
|
+
if (!isObject(value.error) || typeof value.error.message !== "string") {
|
|
240
|
+
throw new AutomationError("Protocol", "Invalid error payload");
|
|
241
|
+
}
|
|
242
|
+
const code = errorCodeSchema.safeParse(value.error.code);
|
|
243
|
+
if (!code.success) {
|
|
244
|
+
throw new AutomationError("Protocol", "Invalid error code");
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
id: value.id,
|
|
248
|
+
error: {
|
|
249
|
+
code: code.data,
|
|
250
|
+
message: value.error.message,
|
|
251
|
+
...(value.error.data === undefined ? {} : { data: value.error.data }),
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (!("result" in value)) {
|
|
256
|
+
throw new AutomationError("Protocol", "Response needs result or error");
|
|
257
|
+
}
|
|
258
|
+
return { id: value.id, result: value.result };
|
|
259
|
+
}
|
|
260
|
+
export function parseServerEvent(value) {
|
|
261
|
+
if (!isObject(value) || typeof value.event !== "string") {
|
|
262
|
+
throw new AutomationError("Protocol", "Event must have an event name");
|
|
263
|
+
}
|
|
264
|
+
if (value.event === "console") {
|
|
265
|
+
const params = z.object({ text: z.string() }).parse(value.params);
|
|
266
|
+
return { event: "console", params };
|
|
267
|
+
}
|
|
268
|
+
if (value.event === "frame") {
|
|
269
|
+
const params = z
|
|
270
|
+
.object({ n: z.number(), path: z.string().optional() })
|
|
271
|
+
.parse(value.params);
|
|
272
|
+
return { event: "frame", params };
|
|
273
|
+
}
|
|
274
|
+
if (value.event === "closed") {
|
|
275
|
+
const params = z.object({ reason: z.string() }).parse(value.params);
|
|
276
|
+
return { event: "closed", params };
|
|
277
|
+
}
|
|
278
|
+
throw new AutomationError("Protocol", `Unknown server event: ${value.event}`);
|
|
279
|
+
}
|
|
280
|
+
export function parseWireMessage(value) {
|
|
281
|
+
if (!isObject(value)) {
|
|
282
|
+
throw new AutomationError("Protocol", "Wire message must be an object");
|
|
283
|
+
}
|
|
284
|
+
if ("method" in value)
|
|
285
|
+
return parseRequest(value);
|
|
286
|
+
if ("event" in value)
|
|
287
|
+
return parseServerEvent(value);
|
|
288
|
+
if ("result" in value || "error" in value)
|
|
289
|
+
return parseResponse(value);
|
|
290
|
+
throw new AutomationError("Protocol", "Unrecognized wire message");
|
|
291
|
+
}
|
|
292
|
+
export function encodeSse(message) {
|
|
293
|
+
return `data: ${JSON.stringify(message)}\n\n`;
|
|
294
|
+
}
|
|
295
|
+
export function createSseDecoder(onMessage, onInvalid) {
|
|
296
|
+
const parser = createParser({
|
|
297
|
+
onEvent(event) {
|
|
298
|
+
try {
|
|
299
|
+
onMessage(parseWireMessage(JSON.parse(event.data)));
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
onInvalid?.(event.data, error);
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
return {
|
|
307
|
+
feed(chunk) {
|
|
308
|
+
parser.feed(chunk);
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
export function decodeSseChunk(chunk) {
|
|
313
|
+
const messages = [];
|
|
314
|
+
const decoder = createSseDecoder((message) => {
|
|
315
|
+
messages.push(message);
|
|
316
|
+
});
|
|
317
|
+
decoder.feed(chunk);
|
|
318
|
+
return messages;
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../js/automation/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Method syntax so a renderer whose `setImage` wants a `Buffer` still fits. */
|
|
2
|
+
export type BlobImageHost = {
|
|
3
|
+
setImage?(elementId: number, bytes: Uint8Array): void;
|
|
4
|
+
};
|
|
5
|
+
type BlobImageCallbacks = {
|
|
6
|
+
/** Applies queued mutations, so the `<img>` exists natively before `setImage`. */
|
|
7
|
+
flush(): void;
|
|
8
|
+
/**
|
|
9
|
+
* Tells the `<img>` that its `blob:` src could not be read. `ticket` is unique
|
|
10
|
+
* per src assignment: the failure travels as a prop and a prop is applied only
|
|
11
|
+
* when its value changes, so two failures with one message must still differ.
|
|
12
|
+
*/
|
|
13
|
+
fail(id: number, message: string, ticket: number): void;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* `<img src="blob:...">`. A blob URL only means something in this JS process, so
|
|
17
|
+
* the native layer cannot open it. This fetches the bytes and hands them to
|
|
18
|
+
* `setImage`, the path live images already use. The native element treats a
|
|
19
|
+
* `blob:` src as pending, then fires `load` when `setImage` lands or `error` when
|
|
20
|
+
* `fail` is called.
|
|
21
|
+
*
|
|
22
|
+
* A src that changes while its fetch is in flight wins: the late result is
|
|
23
|
+
* dropped. A revoked URL fails the fetch and reports `error`, as in a browser.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createBlobImageLoader(host: BlobImageHost, callbacks: BlobImageCallbacks): {
|
|
26
|
+
created(id: number, elementType: string): void;
|
|
27
|
+
destroyed(id: number): void;
|
|
28
|
+
/** Call for every `setCustomProp`, before it is queued. */
|
|
29
|
+
prop(id: number, key: string, value: unknown): void;
|
|
30
|
+
};
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=blob-images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-images.d.ts","sourceRoot":"","sources":["../js/blob-images.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;CACtD,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,kFAAkF;IAClF,KAAK,IAAI,IAAI,CAAA;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACxD,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,kBAAkB;gBAsBxE,MAAM,eAAe,MAAM;kBAGzB,MAAM;IAIpB,2DAA2D;aAClD,MAAM,OAAO,MAAM,SAAS,OAAO;EAS/C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<img src="blob:...">`. A blob URL only means something in this JS process, so
|
|
3
|
+
* the native layer cannot open it. This fetches the bytes and hands them to
|
|
4
|
+
* `setImage`, the path live images already use. The native element treats a
|
|
5
|
+
* `blob:` src as pending, then fires `load` when `setImage` lands or `error` when
|
|
6
|
+
* `fail` is called.
|
|
7
|
+
*
|
|
8
|
+
* A src that changes while its fetch is in flight wins: the late result is
|
|
9
|
+
* dropped. A revoked URL fails the fetch and reports `error`, as in a browser.
|
|
10
|
+
*/
|
|
11
|
+
export function createBlobImageLoader(host, callbacks) {
|
|
12
|
+
const types = new Map();
|
|
13
|
+
const latest = new Map();
|
|
14
|
+
let counter = 0;
|
|
15
|
+
const load = async (id, url, ticket) => {
|
|
16
|
+
const current = () => latest.get(id) === ticket;
|
|
17
|
+
try {
|
|
18
|
+
const response = await fetch(url);
|
|
19
|
+
if (!response.ok)
|
|
20
|
+
throw new Error(`fetch ${url} failed with status ${response.status}`);
|
|
21
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
22
|
+
if (!current())
|
|
23
|
+
return;
|
|
24
|
+
if (!host.setImage)
|
|
25
|
+
throw new Error("this renderer cannot set an image from bytes");
|
|
26
|
+
callbacks.flush();
|
|
27
|
+
host.setImage(id, bytes);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (!current())
|
|
31
|
+
return;
|
|
32
|
+
callbacks.fail(id, error instanceof Error ? error.message : String(error), ticket);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
created(id, elementType) {
|
|
37
|
+
types.set(id, elementType);
|
|
38
|
+
},
|
|
39
|
+
destroyed(id) {
|
|
40
|
+
types.delete(id);
|
|
41
|
+
latest.delete(id);
|
|
42
|
+
},
|
|
43
|
+
/** Call for every `setCustomProp`, before it is queued. */
|
|
44
|
+
prop(id, key, value) {
|
|
45
|
+
if (key !== "src" || types.get(id) !== "img")
|
|
46
|
+
return;
|
|
47
|
+
const ticket = ++counter;
|
|
48
|
+
latest.set(id, ticket);
|
|
49
|
+
if (typeof value === "string" && value.trim().startsWith("blob:")) {
|
|
50
|
+
void load(id, value.trim(), ticket);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=blob-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-images.js","sourceRoot":"","sources":["../js/blob-images.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAmB,EAAE,SAA6B;IACtF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,MAAM,IAAI,GAAG,KAAK,EAAE,EAAU,EAAE,GAAW,EAAE,MAAc,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;QAC/C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YACvF,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC,OAAO,EAAE;gBAAE,OAAM;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;YACnF,SAAS,CAAC,KAAK,EAAE,CAAA;YACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,EAAE;gBAAE,OAAM;YACtB,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;QACpF,CAAC;IACH,CAAC,CAAA;IAED,OAAO;QACL,OAAO,CAAC,EAAU,EAAE,WAAmB;YACrC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;QAC5B,CAAC;QACD,SAAS,CAAC,EAAU;YAClB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;QACD,2DAA2D;QAC3D,IAAI,CAAC,EAAU,EAAE,GAAW,EAAE,KAAc;YAC1C,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK;gBAAE,OAAM;YACpD,MAAM,MAAM,GAAG,EAAE,OAAO,CAAA;YACxB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClE,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/bounds.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ElementBounds } from "../index.js";
|
|
2
|
+
import type { MutationRenderer, NativeRenderer } from "./host.js";
|
|
3
|
+
/** Border box in window coordinates, shaped like a DOM `DOMRectReadOnly`. */
|
|
4
|
+
export interface BoundingClientRect {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
top: number;
|
|
10
|
+
left: number;
|
|
11
|
+
right: number;
|
|
12
|
+
bottom: number;
|
|
13
|
+
}
|
|
14
|
+
interface FlushableQueue {
|
|
15
|
+
flushMutations(): void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Let `flushPendingMutations(renderer)` reach this queue. `createMutationQueue`
|
|
19
|
+
* calls it, so a framework adapter never has to.
|
|
20
|
+
*/
|
|
21
|
+
export declare function registerMutationQueue(renderer: object, queue: FlushableQueue): void;
|
|
22
|
+
/**
|
|
23
|
+
* Send every mutation a framework has queued for this renderer. A read that
|
|
24
|
+
* must see the current tree (bounds, hit tests) calls it first, because Solid
|
|
25
|
+
* flushes in a microtask and React only at commit.
|
|
26
|
+
*/
|
|
27
|
+
export declare function flushPendingMutations(renderer: object): void;
|
|
28
|
+
/** The zero rect a DOM element without a box reports. */
|
|
29
|
+
export declare function toBoundingClientRect(bounds: Pick<ElementBounds, "x" | "y" | "width" | "height"> | null): BoundingClientRect;
|
|
30
|
+
/**
|
|
31
|
+
* `getBoundingClientRect` for the element with this id: pending mutations are
|
|
32
|
+
* sent and the renderer lays out before it answers. An element with no box
|
|
33
|
+
* (not mounted, not painted) reports a zero rect.
|
|
34
|
+
*/
|
|
35
|
+
export declare function readBoundingClientRect(renderer: NativeRenderer, id: number): BoundingClientRect;
|
|
36
|
+
/**
|
|
37
|
+
* Key of the method a framework adapter puts on its host element instances to
|
|
38
|
+
* let shared code (observers) reach the element's renderer and mutation queue.
|
|
39
|
+
*/
|
|
40
|
+
export declare const HOST_BINDING: unique symbol;
|
|
41
|
+
/**
|
|
42
|
+
* Key of the method a host element offers to be told each time it is created
|
|
43
|
+
* natively. Solid creates the native element when the tree is inserted and
|
|
44
|
+
* again after a removal, so an observer started earlier must follow it. An
|
|
45
|
+
* element that is always mounted when handed out (React) does not have it.
|
|
46
|
+
*/
|
|
47
|
+
export declare const HOST_MOUNT: unique symbol;
|
|
48
|
+
export interface HostBinding {
|
|
49
|
+
readonly renderer: NativeRenderer;
|
|
50
|
+
readonly mutations: MutationRenderer;
|
|
51
|
+
}
|
|
52
|
+
/** A mounted host element, as `ResizeObserver` and `IntersectionObserver` take it. */
|
|
53
|
+
export interface ObservableElement {
|
|
54
|
+
readonly id: number;
|
|
55
|
+
/** The binding while the element is mounted, `undefined` before and after. */
|
|
56
|
+
[HOST_BINDING](): HostBinding | undefined;
|
|
57
|
+
/** Calls `listener` each time the element is created natively. Returns the stop function. */
|
|
58
|
+
[HOST_MOUNT]?(listener: () => void): () => void;
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=bounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounds.d.ts","sourceRoot":"","sources":["../js/bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEjE,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,cAAc;IACtB,cAAc,IAAI,IAAI,CAAA;CACvB;AAgBD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAWnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ5D;AAED,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG,IAAI,GAAG,kBAAkB,CAY3H;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,kBAAkB,CAM/F;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,MAAgD,CAAA;AAElF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,MAA8C,CAAA;AAE9E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAA;CACrC;AAED,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,8EAA8E;IAC9E,CAAC,YAAY,CAAC,IAAI,WAAW,GAAG,SAAS,CAAA;IACzC,6FAA6F;IAC7F,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAChD"}
|
package/dist/bounds.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const QUEUES_KEY = Symbol.for("@ghia/native/mutation-queues");
|
|
2
|
+
// Keyed by the renderer object a queue applies to. Queues are held weakly: a
|
|
3
|
+
// root that was unmounted and replaced leaves its queue behind otherwise.
|
|
4
|
+
function allQueues() {
|
|
5
|
+
const existing = Reflect.get(globalThis, QUEUES_KEY);
|
|
6
|
+
if (existing)
|
|
7
|
+
return existing;
|
|
8
|
+
const queues = new WeakMap();
|
|
9
|
+
Reflect.set(globalThis, QUEUES_KEY, queues);
|
|
10
|
+
return queues;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Let `flushPendingMutations(renderer)` reach this queue. `createMutationQueue`
|
|
14
|
+
* calls it, so a framework adapter never has to.
|
|
15
|
+
*/
|
|
16
|
+
export function registerMutationQueue(renderer, queue) {
|
|
17
|
+
const queues = allQueues();
|
|
18
|
+
let refs = queues.get(renderer);
|
|
19
|
+
if (!refs) {
|
|
20
|
+
refs = new Set();
|
|
21
|
+
queues.set(renderer, refs);
|
|
22
|
+
}
|
|
23
|
+
for (const ref of refs) {
|
|
24
|
+
if (ref.deref() === undefined)
|
|
25
|
+
refs.delete(ref);
|
|
26
|
+
}
|
|
27
|
+
refs.add(new WeakRef(queue));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Send every mutation a framework has queued for this renderer. A read that
|
|
31
|
+
* must see the current tree (bounds, hit tests) calls it first, because Solid
|
|
32
|
+
* flushes in a microtask and React only at commit.
|
|
33
|
+
*/
|
|
34
|
+
export function flushPendingMutations(renderer) {
|
|
35
|
+
const refs = allQueues().get(renderer);
|
|
36
|
+
if (!refs)
|
|
37
|
+
return;
|
|
38
|
+
for (const ref of [...refs]) {
|
|
39
|
+
const queue = ref.deref();
|
|
40
|
+
if (queue)
|
|
41
|
+
queue.flushMutations();
|
|
42
|
+
else
|
|
43
|
+
refs.delete(ref);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** The zero rect a DOM element without a box reports. */
|
|
47
|
+
export function toBoundingClientRect(bounds) {
|
|
48
|
+
if (!bounds)
|
|
49
|
+
return { x: 0, y: 0, width: 0, height: 0, top: 0, left: 0, right: 0, bottom: 0 };
|
|
50
|
+
return {
|
|
51
|
+
x: bounds.x,
|
|
52
|
+
y: bounds.y,
|
|
53
|
+
width: bounds.width,
|
|
54
|
+
height: bounds.height,
|
|
55
|
+
top: bounds.y,
|
|
56
|
+
left: bounds.x,
|
|
57
|
+
right: bounds.x + bounds.width,
|
|
58
|
+
bottom: bounds.y + bounds.height,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* `getBoundingClientRect` for the element with this id: pending mutations are
|
|
63
|
+
* sent and the renderer lays out before it answers. An element with no box
|
|
64
|
+
* (not mounted, not painted) reports a zero rect.
|
|
65
|
+
*/
|
|
66
|
+
export function readBoundingClientRect(renderer, id) {
|
|
67
|
+
if (!renderer.getElementBounds) {
|
|
68
|
+
throw new Error("This renderer cannot measure elements: it has no getElementBounds");
|
|
69
|
+
}
|
|
70
|
+
flushPendingMutations(renderer);
|
|
71
|
+
return toBoundingClientRect(renderer.getElementBounds(id));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Key of the method a framework adapter puts on its host element instances to
|
|
75
|
+
* let shared code (observers) reach the element's renderer and mutation queue.
|
|
76
|
+
*/
|
|
77
|
+
export const HOST_BINDING = Symbol.for("@ghia/native/host-binding");
|
|
78
|
+
/**
|
|
79
|
+
* Key of the method a host element offers to be told each time it is created
|
|
80
|
+
* natively. Solid creates the native element when the tree is inserted and
|
|
81
|
+
* again after a removal, so an observer started earlier must follow it. An
|
|
82
|
+
* element that is always mounted when handed out (React) does not have it.
|
|
83
|
+
*/
|
|
84
|
+
export const HOST_MOUNT = Symbol.for("@ghia/native/host-mount");
|
|
85
|
+
//# sourceMappingURL=bounds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../js/bounds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard-global.d.ts","sourceRoot":"","sources":["../js/clipboard-global.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,SAAS;QACjB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACtC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;KAC5B;IACD,UAAU,SAAS;QACjB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;KAC9B;CACF;AAED,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard-global.js","sourceRoot":"","sources":["../js/clipboard-global.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NativeRenderer } from "./host.js";
|
|
2
|
+
import "./clipboard-global.js";
|
|
3
|
+
/** The `navigator.clipboard` text subset. Images and rich items are not supported. */
|
|
4
|
+
export interface Clipboard {
|
|
5
|
+
writeText(text: string): Promise<void>;
|
|
6
|
+
/** Resolves `""` when the clipboard holds no text, as in the DOM. */
|
|
7
|
+
readText(): Promise<string>;
|
|
8
|
+
}
|
|
9
|
+
export type ClipboardHost = Pick<NativeRenderer, "writeClipboardText" | "readClipboardText">;
|
|
10
|
+
export declare function createClipboard(host: () => ClipboardHost | undefined): Clipboard;
|
|
11
|
+
/** The clipboard of the renderer created last. */
|
|
12
|
+
export declare const clipboard: Clipboard;
|
|
13
|
+
/**
|
|
14
|
+
* Point `clipboard` at `host`, and expose it as `navigator.clipboard` when the
|
|
15
|
+
* runtime has a `navigator` without one, so code written for the web runs
|
|
16
|
+
* unchanged. A runtime with no `navigator` is left without one.
|
|
17
|
+
*/
|
|
18
|
+
export declare function bindClipboard(host: ClipboardHost): void;
|
|
19
|
+
//# sourceMappingURL=clipboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../js/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,uBAAuB,CAAA;AAE9B,sFAAsF;AACtF,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,qEAAqE;IACrE,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,cAAc,EACd,oBAAoB,GAAG,mBAAmB,CAC3C,CAAA;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,aAAa,GAAG,SAAS,GACpC,SAAS,CAkBX;AAID,kDAAkD;AAClD,eAAO,MAAM,SAAS,EAAE,SAA6C,CAAA;AAErE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAWvD"}
|