@dxos/plugin-script 0.6.10 → 0.6.11-staging.e6894a4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{ScriptEditor-WNCGR5OU.mjs → ScriptEditor-YLGNCLXA.mjs} +121 -59
- package/dist/lib/browser/ScriptEditor-YLGNCLXA.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZGCETT2W.mjs → chunk-O4LWBX6A.mjs} +7 -2
- package/dist/lib/browser/chunk-O4LWBX6A.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +5 -5
- package/dist/lib/browser/index.mjs.map +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node/{ScriptEditor-RR7AVOQL.cjs → ScriptEditor-XLE33DB4.cjs} +136 -74
- package/dist/lib/node/ScriptEditor-XLE33DB4.cjs.map +7 -0
- package/dist/lib/node/{chunk-VW2POILW.cjs → chunk-5RBVXKXT.cjs} +9 -4
- package/dist/lib/node/chunk-5RBVXKXT.cjs.map +7 -0
- package/dist/lib/node/index.cjs +17 -17
- package/dist/lib/node/index.cjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types/index.cjs +4 -4
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
- package/dist/types/src/components/DebugPanel.d.ts +9 -0
- package/dist/types/src/components/DebugPanel.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar.d.ts.map +1 -1
- package/dist/types/src/types/script.d.ts +12 -0
- package/dist/types/src/types/script.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/package.json +34 -33
- package/src/ScriptPlugin.tsx +7 -4
- package/src/components/{DetailsPanel.tsx → DebugPanel.tsx} +101 -36
- package/src/components/ScriptEditor.tsx +2 -2
- package/src/components/Toolbar.tsx +14 -29
- package/src/types/script.ts +13 -0
- package/dist/lib/browser/ScriptEditor-WNCGR5OU.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZGCETT2W.mjs.map +0 -7
- package/dist/lib/node/ScriptEditor-RR7AVOQL.cjs.map +0 -7
- package/dist/lib/node/chunk-VW2POILW.cjs.map +0 -7
- package/dist/types/src/components/DetailsPanel.d.ts +0 -9
- package/dist/types/src/components/DetailsPanel.d.ts.map +0 -1
- package/dist/types/src/data/templates.md.d.ts +0 -3
- package/dist/types/src/data/templates.md.d.ts.map +0 -1
- package/src/data/templates.md.ts +0 -44
- /package/src/types/{types.tsx → types.ts} +0 -0
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./chunk-RHEZ5LUU.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FunctionType
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-O4LWBX6A.mjs";
|
|
13
13
|
import {
|
|
14
14
|
SCRIPT_PLUGIN
|
|
15
15
|
} from "./chunk-JBACGDOJ.mjs";
|
|
@@ -28,15 +28,18 @@ import { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from "
|
|
|
28
28
|
import { useIdentity } from "@dxos/react-client/halo";
|
|
29
29
|
import { useTranslation as useTranslation3 } from "@dxos/react-ui";
|
|
30
30
|
import { createDataExtensions, listener } from "@dxos/react-ui-editor";
|
|
31
|
-
import { mx as
|
|
31
|
+
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
32
32
|
|
|
33
|
-
// packages/plugins/experimental/plugin-script/src/components/
|
|
33
|
+
// packages/plugins/experimental/plugin-script/src/components/DebugPanel.tsx
|
|
34
34
|
import React, { useEffect, useRef, useState } from "react";
|
|
35
|
+
import SyntaxHighlighter from "react-syntax-highlighter";
|
|
36
|
+
import styleDark from "react-syntax-highlighter/dist/esm/styles/hljs/a11y-dark";
|
|
37
|
+
import styleLight from "react-syntax-highlighter/dist/esm/styles/hljs/a11y-light";
|
|
35
38
|
import { log } from "@dxos/log";
|
|
36
|
-
import { Avatar, DensityProvider, Icon, Input, Toolbar, useControlledValue,
|
|
39
|
+
import { Avatar, DensityProvider, Icon, Input, Toolbar, useControlledValue, useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
37
40
|
import { mx } from "@dxos/react-ui-theme";
|
|
38
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/
|
|
39
|
-
var
|
|
41
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel.tsx";
|
|
42
|
+
var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }) => {
|
|
40
43
|
const { t } = useTranslation(SCRIPT_PLUGIN);
|
|
41
44
|
const bindingInputRef = useRef(null);
|
|
42
45
|
const [binding, setBinding] = useControlledValue(_binding ?? "");
|
|
@@ -46,7 +49,6 @@ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChang
|
|
|
46
49
|
const inputRef = useRef(null);
|
|
47
50
|
const [input, setInput] = useState("");
|
|
48
51
|
const [result, setResult] = useState("");
|
|
49
|
-
const resultRef = useDynamicRef(result);
|
|
50
52
|
const [state, setState] = useState(null);
|
|
51
53
|
const [history, setHistory] = useState([]);
|
|
52
54
|
const scrollerRef = useRef(null);
|
|
@@ -72,75 +74,112 @@ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChang
|
|
|
72
74
|
setHistory([]);
|
|
73
75
|
inputRef.current?.focus();
|
|
74
76
|
};
|
|
75
|
-
const
|
|
77
|
+
const handleResponse = ({ text, data, error } = {}) => {
|
|
76
78
|
controller.current = void 0;
|
|
77
79
|
setHistory((history2) => [
|
|
78
80
|
...history2,
|
|
79
81
|
{
|
|
80
82
|
type: "response",
|
|
81
|
-
text
|
|
83
|
+
text,
|
|
84
|
+
data,
|
|
85
|
+
error
|
|
82
86
|
}
|
|
83
87
|
]);
|
|
84
88
|
setResult("");
|
|
85
89
|
setState(null);
|
|
86
90
|
handleScroll();
|
|
87
91
|
};
|
|
88
|
-
const
|
|
89
|
-
if (input2.trim().length === 0) {
|
|
90
|
-
inputRef.current?.focus();
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
setHistory((history2) => [
|
|
94
|
-
...history2,
|
|
95
|
-
{
|
|
96
|
-
type: "request",
|
|
97
|
-
text: input2
|
|
98
|
-
}
|
|
99
|
-
]);
|
|
100
|
-
setInput("");
|
|
101
|
-
setResult("");
|
|
92
|
+
const handleRequest = async (input2) => {
|
|
102
93
|
try {
|
|
103
94
|
setState("pending");
|
|
95
|
+
let data = null;
|
|
96
|
+
if (input2.charAt(0) === "{") {
|
|
97
|
+
try {
|
|
98
|
+
const validJsonString = input2.replace(/'/g, '"').replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3');
|
|
99
|
+
data = JSON.parse(validJsonString);
|
|
100
|
+
input2 = JSON.stringify(data, null, 2);
|
|
101
|
+
} catch (err) {
|
|
102
|
+
inputRef.current?.focus();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
setInput("");
|
|
107
|
+
setResult("");
|
|
108
|
+
setHistory((history2) => [
|
|
109
|
+
...history2,
|
|
110
|
+
{
|
|
111
|
+
type: "request",
|
|
112
|
+
text: input2
|
|
113
|
+
}
|
|
114
|
+
]);
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
handleScroll();
|
|
117
|
+
});
|
|
104
118
|
controller.current = new AbortController();
|
|
105
119
|
const response = await fetch(functionUrl, {
|
|
106
120
|
signal: controller.current.signal,
|
|
107
121
|
method: "POST",
|
|
108
|
-
body: input2
|
|
122
|
+
body: input2,
|
|
123
|
+
headers: {
|
|
124
|
+
"Content-Type": data ? "application/json" : "text/plain"
|
|
125
|
+
}
|
|
109
126
|
});
|
|
110
127
|
if (!response.ok) {
|
|
111
|
-
|
|
128
|
+
const text2 = await response.text();
|
|
129
|
+
handleResponse({
|
|
130
|
+
error: new Error(text2 || response.statusText || String(response.status))
|
|
131
|
+
});
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const contentType = response.headers.get("content-type");
|
|
135
|
+
if (contentType === "application/json") {
|
|
136
|
+
const data2 = await response.json();
|
|
137
|
+
handleResponse({
|
|
138
|
+
data: data2
|
|
139
|
+
});
|
|
112
140
|
return;
|
|
113
141
|
}
|
|
114
142
|
setState("responding");
|
|
143
|
+
let text = "";
|
|
115
144
|
const reader = response.body.getReader();
|
|
116
145
|
const pump = async ({ done, value }) => {
|
|
117
|
-
|
|
118
|
-
handleScroll();
|
|
146
|
+
text = text + new TextDecoder().decode(value);
|
|
119
147
|
if (!controller.current || done) {
|
|
120
|
-
|
|
148
|
+
handleResponse({
|
|
149
|
+
text
|
|
150
|
+
});
|
|
121
151
|
return;
|
|
122
152
|
}
|
|
153
|
+
setResult(text);
|
|
154
|
+
setTimeout(() => {
|
|
155
|
+
handleScroll();
|
|
156
|
+
});
|
|
123
157
|
return reader.read().then(pump);
|
|
124
158
|
};
|
|
125
159
|
void reader.read().then(pump).catch((err) => {
|
|
126
160
|
if (err.name !== "AbortError") {
|
|
127
161
|
log.catch(err, void 0, {
|
|
128
162
|
F: __dxlog_file,
|
|
129
|
-
L:
|
|
163
|
+
L: 172,
|
|
130
164
|
S: void 0,
|
|
131
165
|
C: (f, a) => f(...a)
|
|
132
166
|
});
|
|
133
167
|
}
|
|
134
168
|
});
|
|
135
169
|
} catch (err) {
|
|
136
|
-
setState(null);
|
|
137
170
|
if (err !== "stop") {
|
|
171
|
+
const error = err instanceof Error ? err : new Error(err);
|
|
172
|
+
handleResponse({
|
|
173
|
+
error
|
|
174
|
+
});
|
|
138
175
|
log.catch(err, void 0, {
|
|
139
176
|
F: __dxlog_file,
|
|
140
|
-
L:
|
|
177
|
+
L: 179,
|
|
141
178
|
S: void 0,
|
|
142
179
|
C: (f, a) => f(...a)
|
|
143
180
|
});
|
|
181
|
+
} else {
|
|
182
|
+
handleResponse();
|
|
144
183
|
}
|
|
145
184
|
}
|
|
146
185
|
};
|
|
@@ -163,7 +202,7 @@ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChang
|
|
|
163
202
|
placeholder: t("function request placeholder"),
|
|
164
203
|
value: input,
|
|
165
204
|
onChange: (ev) => setInput(ev.target.value),
|
|
166
|
-
onKeyDown: (ev) => ev.key === "Enter" &&
|
|
205
|
+
onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
|
|
167
206
|
})), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
|
|
168
207
|
ref: bindingInputRef,
|
|
169
208
|
classNames: "!w-[10rem]",
|
|
@@ -172,7 +211,7 @@ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChang
|
|
|
172
211
|
onChange: (ev) => setBinding(ev.target.value.toUpperCase()),
|
|
173
212
|
onBlur: handleBlur
|
|
174
213
|
})), /* @__PURE__ */ React.createElement(Toolbar.Button, {
|
|
175
|
-
onClick: () =>
|
|
214
|
+
onClick: () => handleRequest(input)
|
|
176
215
|
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
177
216
|
icon: "ph--play--regular",
|
|
178
217
|
size: 4
|
|
@@ -189,15 +228,36 @@ var RobotAvatar = () => /* @__PURE__ */ React.createElement(Avatar.Root, {
|
|
|
189
228
|
}, /* @__PURE__ */ React.createElement(Avatar.Frame, null, /* @__PURE__ */ React.createElement(Avatar.Icon, {
|
|
190
229
|
icon: "ph--robot--regular"
|
|
191
230
|
})));
|
|
231
|
+
var MessageItem = ({ classNames, message }) => {
|
|
232
|
+
const { themeMode } = useThemeContext();
|
|
233
|
+
const { text, data, error } = message;
|
|
234
|
+
if (error) {
|
|
235
|
+
return /* @__PURE__ */ React.createElement("span", {
|
|
236
|
+
className: mx(classNames, "whitespace-pre text-error")
|
|
237
|
+
}, String(error));
|
|
238
|
+
} else if (data) {
|
|
239
|
+
return /* @__PURE__ */ React.createElement(SyntaxHighlighter, {
|
|
240
|
+
language: "json",
|
|
241
|
+
style: themeMode === "dark" ? styleDark : styleLight,
|
|
242
|
+
className: mx("w-full text-xs", classNames)
|
|
243
|
+
}, JSON.stringify(data, null, 2));
|
|
244
|
+
}
|
|
245
|
+
return /* @__PURE__ */ React.createElement("span", {
|
|
246
|
+
className: mx(classNames)
|
|
247
|
+
}, text || "\xD8");
|
|
248
|
+
};
|
|
192
249
|
var MessageThread = ({ state, result, history }) => {
|
|
193
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, history.map((
|
|
250
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, history.map((message, i) => /* @__PURE__ */ React.createElement("div", {
|
|
194
251
|
key: i,
|
|
195
252
|
className: "grid grid-cols-[3rem_1fr]"
|
|
196
|
-
}, /* @__PURE__ */ React.createElement("div", null, type === "response" && /* @__PURE__ */ React.createElement(RobotAvatar, null)), /* @__PURE__ */ React.createElement("div", {
|
|
197
|
-
className: mx("flex", type === "request" && "justify-end")
|
|
198
|
-
}, /* @__PURE__ */ React.createElement(
|
|
199
|
-
|
|
200
|
-
|
|
253
|
+
}, /* @__PURE__ */ React.createElement("div", null, message.type === "response" && /* @__PURE__ */ React.createElement(RobotAvatar, null)), /* @__PURE__ */ React.createElement("div", {
|
|
254
|
+
className: mx("flex", message.type === "request" && "justify-end")
|
|
255
|
+
}, /* @__PURE__ */ React.createElement(MessageItem, {
|
|
256
|
+
classNames: [
|
|
257
|
+
message.type === "request" && "p-1 px-2 rounded-lg bg-hoverSurface"
|
|
258
|
+
],
|
|
259
|
+
message
|
|
260
|
+
})))), /* @__PURE__ */ React.createElement("div", {
|
|
201
261
|
className: "grid grid-cols-[3rem_1fr]"
|
|
202
262
|
}, /* @__PURE__ */ React.createElement("div", null, state === "pending" && /* @__PURE__ */ React.createElement(Icon, {
|
|
203
263
|
icon: "ph--spinner--regular",
|
|
@@ -207,10 +267,8 @@ var MessageThread = ({ state, result, history }) => {
|
|
|
207
267
|
};
|
|
208
268
|
|
|
209
269
|
// packages/plugins/experimental/plugin-script/src/components/Toolbar.tsx
|
|
210
|
-
import { Checks, CircleNotch, Link, MagicWand, UploadSimple, WarningCircle } from "@phosphor-icons/react";
|
|
211
270
|
import React2, { useState as useState2 } from "react";
|
|
212
271
|
import { DensityProvider as DensityProvider2, ElevationProvider, Icon as Icon2, Toolbar as NaturalToolbar, Tooltip, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
213
|
-
import { getSize, mx as mx2 } from "@dxos/react-ui-theme";
|
|
214
272
|
var Toolbar2 = ({ classNames, deployed, error, functionUrl, showPanel, onDeploy, onFormat, onTogglePanel }) => {
|
|
215
273
|
const { t } = useTranslation2(SCRIPT_PLUGIN);
|
|
216
274
|
const [pending, setPending] = useState2(false);
|
|
@@ -242,39 +300,43 @@ var Toolbar2 = ({ classNames, deployed, error, functionUrl, showPanel, onDeploy,
|
|
|
242
300
|
}, /* @__PURE__ */ React2.createElement(NaturalToolbar.Button, {
|
|
243
301
|
variant: "ghost",
|
|
244
302
|
onClick: onFormat
|
|
245
|
-
}, /* @__PURE__ */ React2.createElement(
|
|
246
|
-
|
|
303
|
+
}, /* @__PURE__ */ React2.createElement(Icon2, {
|
|
304
|
+
icon: "ph--magic-wand--regular",
|
|
305
|
+
size: 4
|
|
247
306
|
}))), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, null, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null), t("format label")))), /* @__PURE__ */ React2.createElement("div", {
|
|
248
307
|
role: "separator",
|
|
249
308
|
className: "grow"
|
|
250
|
-
}),
|
|
309
|
+
}), error ? /* @__PURE__ */ React2.createElement(Tooltip.Root, null, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, null, /* @__PURE__ */ React2.createElement(Icon2, {
|
|
310
|
+
icon: "ph--warning-circle--regular",
|
|
311
|
+
size: 4
|
|
312
|
+
})), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, null, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null), error))) : null, functionUrl && deployed && /* @__PURE__ */ React2.createElement(Tooltip.Root, null, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, {
|
|
251
313
|
asChild: true
|
|
252
314
|
}, /* @__PURE__ */ React2.createElement(NaturalToolbar.Button, {
|
|
253
315
|
variant: "ghost",
|
|
254
316
|
onClick: handleCopyLink
|
|
255
|
-
}, /* @__PURE__ */ React2.createElement(
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
})), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, null, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null), error))) : deployed ? /* @__PURE__ */ React2.createElement(Tooltip.Root, null, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, null, /* @__PURE__ */ React2.createElement(Checks, {
|
|
260
|
-
className: getSize(4)
|
|
261
|
-
})), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, null, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null), t("deployed label")))) : null, /* @__PURE__ */ React2.createElement(Tooltip.Root, null, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, {
|
|
317
|
+
}, /* @__PURE__ */ React2.createElement(Icon2, {
|
|
318
|
+
icon: "ph--link--regular",
|
|
319
|
+
size: 4
|
|
320
|
+
}))), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, null, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null), t("copy link label")))), /* @__PURE__ */ React2.createElement(Tooltip.Root, null, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, {
|
|
262
321
|
asChild: true
|
|
263
322
|
}, /* @__PURE__ */ React2.createElement(NaturalToolbar.Button, {
|
|
264
323
|
variant: "ghost",
|
|
265
324
|
onClick: handleDeploy,
|
|
266
325
|
disabled: pending
|
|
267
|
-
}, pending ? /* @__PURE__ */ React2.createElement(
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
326
|
+
}, pending ? /* @__PURE__ */ React2.createElement(Icon2, {
|
|
327
|
+
icon: "ph--spinner--regular",
|
|
328
|
+
size: 4,
|
|
329
|
+
classNames: "animate-spin-slow"
|
|
330
|
+
}) : /* @__PURE__ */ React2.createElement(Icon2, {
|
|
331
|
+
icon: "ph--cloud-arrow-up--regular",
|
|
332
|
+
size: 4
|
|
271
333
|
}))), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, null, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null), pending ? t("pending label") : t("deploy label")))), onTogglePanel && /* @__PURE__ */ React2.createElement(Tooltip.Root, null, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, {
|
|
272
334
|
asChild: true
|
|
273
335
|
}, /* @__PURE__ */ React2.createElement(NaturalToolbar.Button, {
|
|
274
336
|
variant: "ghost",
|
|
275
337
|
onClick: onTogglePanel
|
|
276
338
|
}, /* @__PURE__ */ React2.createElement(Icon2, {
|
|
277
|
-
icon: showPanel ? "ph--caret-
|
|
339
|
+
icon: showPanel ? "ph--caret-down--regular" : "ph--caret-up--regular",
|
|
278
340
|
size: 4
|
|
279
341
|
}))), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, null, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null), t("toggle details label")))))));
|
|
280
342
|
};
|
|
@@ -423,7 +485,7 @@ var ScriptEditor = ({ env, script, role }) => {
|
|
|
423
485
|
]);
|
|
424
486
|
return /* @__PURE__ */ React3.createElement("div", {
|
|
425
487
|
role: "none",
|
|
426
|
-
className:
|
|
488
|
+
className: mx2(role === "article" && "row-span-2", "flex flex-col is-full bs-full overflow-hidden")
|
|
427
489
|
}, /* @__PURE__ */ React3.createElement(TypescriptEditor, {
|
|
428
490
|
id: script.id,
|
|
429
491
|
env,
|
|
@@ -438,7 +500,7 @@ var ScriptEditor = ({ env, script, role }) => {
|
|
|
438
500
|
onDeploy: handleDeploy,
|
|
439
501
|
onFormat: handleFormat,
|
|
440
502
|
onTogglePanel: async () => setShowPanel((showDetails) => !showDetails)
|
|
441
|
-
}), showPanel && /* @__PURE__ */ React3.createElement(
|
|
503
|
+
}), showPanel && /* @__PURE__ */ React3.createElement(DebugPanel, {
|
|
442
504
|
functionUrl,
|
|
443
505
|
binding: fn?.binding,
|
|
444
506
|
onBindingChange: handleBindingChange
|
|
@@ -449,4 +511,4 @@ export {
|
|
|
449
511
|
ScriptEditor,
|
|
450
512
|
ScriptEditor_default as default
|
|
451
513
|
};
|
|
452
|
-
//# sourceMappingURL=ScriptEditor-
|
|
514
|
+
//# sourceMappingURL=ScriptEditor-YLGNCLXA.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/ScriptEditor.tsx", "../../../src/components/DebugPanel.tsx", "../../../src/components/Toolbar.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DebugPanel } from './DebugPanel';\nimport { Toolbar } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = {\n script: ScriptType;\n role?: string;\n} & Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ env, script, role }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n const [fn] = useQuery(\n space,\n Filter.schema(FunctionType, (fn) => fn.source === script),\n );\n\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source && script.source?.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source && createDocAccessor(script.source, ['content']),\n space,\n identity,\n }),\n ],\n [script, script.source, space, identity],\n );\n\n const [showPanel, setShowPanel] = useState(false);\n const initialValue = useMemo(() => script.source?.content, [script.source]);\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n const [error, setError] = useState<string>();\n\n const handleBindingChange = useCallback(\n (binding: string) => {\n fn.binding = binding;\n },\n [fn],\n );\n\n const handleFormat = useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.content = await format(script.source.content, {\n parser: 'typescript',\n plugins: [prettierPluginEstree, prettierPluginTypescript],\n semi: true,\n singleQuote: true,\n });\n } catch (err: any) {\n // TODO(wittjosiah): Show error in UI.\n log.catch(err);\n }\n }, [script.source]);\n\n const handleDeploy = useCallback(async () => {\n if (!script.source || !identity || !space) {\n return;\n }\n\n setError(undefined);\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n const ownerDid = (existingFunctionUrl?.split('/').at(-2) as DID) ?? publicKeyToDid(identity.identityKey);\n\n const bundler = new Bundler({\n platform: 'browser',\n sandboxedModules: [],\n remoteModules: {},\n });\n const buildResult = await bundler.bundle(script.source.content);\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { result, functionId, functionVersionNumber, errorMessage } = await uploadWorkerFunction({\n clientConfig: client.config,\n halo: client.halo,\n ownerDid,\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (result !== 'success' || functionId === undefined || functionVersionNumber === undefined) {\n throw new Error(errorMessage);\n }\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n script.changed = false;\n } catch (err: any) {\n log.catch(err);\n setError(t('upload failed label'));\n }\n }, [fn, existingFunctionUrl, script, script.name, script.source]);\n\n const functionUrl = useMemo(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n const baseUrl = new URL('functions/', client.config.values.runtime?.services?.edge?.url);\n\n // Leading slashes cause the URL to be treated as an absolute path.\n const relativeUrl = existingFunctionUrl.replace(/^\\//, '');\n const url = new URL(`./${relativeUrl}`, baseUrl.toString());\n space && url.searchParams.set('spaceId', space.id);\n url.protocol = 'https';\n return url.toString();\n }, [existingFunctionUrl, space]);\n\n return (\n <div\n role='none'\n className={mx(role === 'article' && 'row-span-2', 'flex flex-col is-full bs-full overflow-hidden')}\n >\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden border-b border-separator'\n />\n\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n showPanel={showPanel}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onTogglePanel={async () => setShowPanel((showDetails) => !showDetails)}\n />\n\n {showPanel && (\n <DebugPanel functionUrl={functionUrl} binding={fn?.binding} onBindingChange={handleBindingChange} />\n )}\n </div>\n );\n};\n\nexport default ScriptEditor;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n// @ts-ignore\n// eslint-disable-next-line no-restricted-imports\nimport SyntaxHighlighter from 'react-syntax-highlighter';\n// @ts-ignore\n// eslint-disable-next-line no-restricted-imports\nimport styleDark from 'react-syntax-highlighter/dist/esm/styles/hljs/a11y-dark';\n// @ts-ignore\n// eslint-disable-next-line no-restricted-imports\nimport styleLight from 'react-syntax-highlighter/dist/esm/styles/hljs/a11y-light';\n\nimport { log } from '@dxos/log';\nimport {\n Avatar,\n DensityProvider,\n Icon,\n Input,\n type ThemedClassName,\n Toolbar,\n useControlledValue,\n useThemeContext,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\ntype State = 'pending' | 'responding';\n\n/**\n * Request or response.\n */\ntype Message = { type: 'request' | 'response'; text?: string; data?: any; error?: Error };\n\nexport type DebugPanelProps = ThemedClassName<{\n functionUrl?: string;\n binding?: string;\n onBindingChange?: (binding: string) => void;\n}>;\n\nexport const DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }: DebugPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n const bindingInputRef = useRef<HTMLInputElement>(null);\n const [binding, setBinding] = useControlledValue(_binding ?? '');\n const handleBlur = () => {\n onBindingChange?.(binding);\n };\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [input, setInput] = useState('');\n const [result, setResult] = useState('');\n const [state, setState] = useState<State | null>(null);\n\n // TODO(burdon): Persistent history (non-space ECHO data?)\n const [history, setHistory] = useState<Message[]>([]);\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n const handleScroll = () => {\n if (scrollerRef.current) {\n scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;\n }\n };\n\n const controller = useRef<AbortController>();\n useEffect(() => {\n return () => {\n handleStop();\n };\n }, []);\n\n const handleStop = () => {\n controller.current?.abort('stop');\n controller.current = undefined;\n };\n\n const handleClear = () => {\n handleStop();\n setInput('');\n setResult('');\n setHistory([]);\n inputRef.current?.focus();\n };\n\n const handleResponse = ({ text, data, error }: { text?: string; data?: any; error?: Error } = {}) => {\n controller.current = undefined;\n setHistory((history) => [...history, { type: 'response', text, data, error } satisfies Message]);\n setResult('');\n setState(null);\n handleScroll();\n };\n\n const handleRequest = async (input: string) => {\n // Returns a promise that resolves when a value has been received.\n try {\n setState('pending');\n\n let data = null;\n // Detect JSON input.\n if (input.charAt(0) === '{') {\n try {\n const validJsonString = input.replace(/'/g, '\"').replace(/([{,]\\s*)([a-zA-Z0-9_]+)(\\s*:)/g, '$1\"$2\"$3');\n data = JSON.parse(validJsonString);\n input = JSON.stringify(data, null, 2);\n } catch (err) {\n inputRef.current?.focus();\n return;\n }\n }\n\n setInput('');\n setResult('');\n setHistory((history) => [...history, { type: 'request', text: input }]);\n setTimeout(() => {\n handleScroll();\n });\n\n // Throws DOMException when aborted.\n controller.current = new AbortController();\n const response = await fetch(functionUrl!, {\n signal: controller.current.signal,\n method: 'POST',\n body: input,\n headers: {\n 'Content-Type': data ? 'application/json' : 'text/plain',\n },\n });\n\n // Check for error.\n if (!response.ok) {\n const text = await response.text();\n handleResponse({ error: new Error(text || response.statusText || String(response.status)) });\n return;\n }\n\n // Check for JSON.\n const contentType = response.headers.get('content-type');\n if (contentType === 'application/json') {\n const data = await response.json();\n handleResponse({ data });\n return;\n }\n\n // Text (including streaming).\n setState('responding');\n let text = '';\n const reader = response.body!.getReader();\n const pump = async ({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> => {\n text = text + new TextDecoder().decode(value);\n if (!controller.current || done) {\n handleResponse({ text });\n return;\n }\n\n setResult(text);\n setTimeout(() => {\n handleScroll();\n });\n\n return reader.read().then(pump);\n };\n\n void reader\n .read()\n .then(pump)\n .catch((err) => {\n if (err.name !== 'AbortError') {\n log.catch(err);\n }\n });\n } catch (err: any) {\n if (err !== 'stop') {\n const error = err instanceof Error ? err : new Error(err);\n handleResponse({ error });\n log.catch(err);\n } else {\n handleResponse();\n }\n }\n };\n\n return (\n <DensityProvider density='fine'>\n <div className={mx('flex flex-col h-full overflow-hidden', classNames)}>\n {/* TODO(burdon): Replace with Thread? */}\n <div ref={scrollerRef} className='flex flex-col gap-6 h-full p-4 overflow-x-hidden overflow-y-auto'>\n <MessageThread state={state} result={result} history={history} />\n </div>\n\n <Toolbar.Root classNames='p-2'>\n <Input.Root>\n <Input.TextInput\n ref={inputRef}\n autoFocus\n placeholder={t('function request placeholder')}\n value={input}\n onChange={(ev) => setInput(ev.target.value)}\n onKeyDown={(ev) => ev.key === 'Enter' && handleRequest(input)}\n />\n </Input.Root>\n <Input.Root>\n <Input.TextInput\n ref={bindingInputRef}\n classNames='!w-[10rem]'\n placeholder={t('binding placeholder')}\n value={binding}\n onChange={(ev) => setBinding(ev.target.value.toUpperCase())}\n onBlur={handleBlur}\n />\n </Input.Root>\n <Toolbar.Button onClick={() => handleRequest(input)}>\n <Icon icon='ph--play--regular' size={4} />\n </Toolbar.Button>\n <Toolbar.Button onClick={() => (state ? handleStop() : handleClear())}>\n <Icon icon={state ? 'ph--stop--regular' : 'ph--trash--regular'} size={4} />\n </Toolbar.Button>\n </Toolbar.Root>\n </div>\n </DensityProvider>\n );\n};\n\nconst RobotAvatar = () => (\n <Avatar.Root size={6} variant='circle'>\n <Avatar.Frame>\n <Avatar.Icon icon='ph--robot--regular' />\n </Avatar.Frame>\n </Avatar.Root>\n);\n\nconst MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message }>) => {\n const { themeMode } = useThemeContext();\n const { text, data, error } = message;\n if (error) {\n return <span className={mx(classNames, 'whitespace-pre text-error')}>{String(error)}</span>;\n } else if (data) {\n return (\n <SyntaxHighlighter\n language='json'\n style={themeMode === 'dark' ? styleDark : styleLight}\n className={mx('w-full text-xs', classNames)}\n >\n {JSON.stringify(data, null, 2)}\n </SyntaxHighlighter>\n );\n }\n\n return <span className={mx(classNames)}>{text || '\\u00D8'}</span>;\n};\n\n// TODO(burdon): Replace with thread?\n// TODO(burdon): Button to delete individual messages.\n// TODO(burdon): Button to re-run question.\nconst MessageThread = ({ state, result, history }: { state: State | null; result: string; history: Message[] }) => {\n return (\n <>\n {history.map((message, i) => (\n <div key={i} className='grid grid-cols-[3rem_1fr]'>\n <div>{message.type === 'response' && <RobotAvatar />}</div>\n <div className={mx('flex', message.type === 'request' && 'justify-end')}>\n <MessageItem\n classNames={[message.type === 'request' && 'p-1 px-2 rounded-lg bg-hoverSurface']}\n message={message}\n />\n </div>\n </div>\n ))}\n <div className='grid grid-cols-[3rem_1fr]'>\n <div>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin-slow' />) ||\n (result.length > 0 && <RobotAvatar />)}\n </div>\n <div>\n <span>{result}</span>\n </div>\n </div>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport {\n DensityProvider,\n ElevationProvider,\n Icon,\n type ThemedClassName,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type ToolbarProps = ThemedClassName<{\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n showPanel?: boolean;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n onTogglePanel?: () => Promise<void>;\n}>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n showPanel,\n onDeploy,\n onFormat,\n onTogglePanel,\n}: ToolbarProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const [pending, setPending] = useState(false);\n\n const handleCopyLink = async () => {\n if (!functionUrl) {\n return;\n }\n\n await navigator.clipboard.writeText(functionUrl);\n };\n\n const handleDeploy = async () => {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <DensityProvider density='fine'>\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {onFormat && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onFormat}>\n <Icon icon='ph--magic-wand--regular' size={4} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('format label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n\n <div role='separator' className='grow' />\n\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Icon icon='ph--warning-circle--regular' size={4} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {error}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : null}\n\n {functionUrl && deployed && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleCopyLink}>\n <Icon icon='ph--link--regular' size={4} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('copy link label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleDeploy} disabled={pending}>\n {pending ? (\n <Icon icon='ph--spinner--regular' size={4} classNames='animate-spin-slow' />\n ) : (\n <Icon icon='ph--cloud-arrow-up--regular' size={4} />\n )}\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {pending ? t('pending label') : t('deploy label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {onTogglePanel && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onTogglePanel}>\n <Icon icon={showPanel ? 'ph--caret-down--regular' : 'ph--caret-up--regular'} size={4} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('toggle details label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </NaturalToolbar.Root>\n </ElevationProvider>\n </DensityProvider>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["format", "prettierPluginEstree", "prettierPluginTypescript", "React", "useCallback", "useMemo", "useState", "log", "useClient", "create", "createDocAccessor", "Filter", "getMeta", "getSpace", "useQuery", "useIdentity", "useTranslation", "createDataExtensions", "listener", "mx", "React", "useEffect", "useRef", "useState", "SyntaxHighlighter", "styleDark", "styleLight", "log", "Avatar", "DensityProvider", "Icon", "Input", "Toolbar", "useControlledValue", "useThemeContext", "useTranslation", "mx", "DebugPanel", "classNames", "functionUrl", "binding", "_binding", "onBindingChange", "t", "useTranslation", "SCRIPT_PLUGIN", "bindingInputRef", "useRef", "setBinding", "useControlledValue", "handleBlur", "inputRef", "input", "setInput", "useState", "result", "setResult", "state", "setState", "history", "setHistory", "scrollerRef", "handleScroll", "current", "scrollTop", "scrollHeight", "controller", "useEffect", "handleStop", "abort", "undefined", "handleClear", "focus", "handleResponse", "text", "data", "error", "type", "handleRequest", "charAt", "validJsonString", "replace", "JSON", "parse", "stringify", "err", "setTimeout", "AbortController", "response", "fetch", "signal", "method", "body", "headers", "ok", "Error", "statusText", "String", "status", "contentType", "get", "json", "reader", "getReader", "pump", "done", "value", "TextDecoder", "decode", "read", "then", "catch", "name", "log", "DensityProvider", "density", "div", "className", "mx", "ref", "MessageThread", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "toUpperCase", "onBlur", "Button", "onClick", "Icon", "icon", "size", "RobotAvatar", "Avatar", "variant", "Frame", "MessageItem", "message", "themeMode", "useThemeContext", "span", "SyntaxHighlighter", "language", "style", "styleDark", "styleLight", "map", "i", "length", "React", "useState", "DensityProvider", "ElevationProvider", "Icon", "Toolbar", "NaturalToolbar", "Tooltip", "useTranslation", "Toolbar", "classNames", "deployed", "error", "functionUrl", "showPanel", "onDeploy", "onFormat", "onTogglePanel", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "React", "DensityProvider", "density", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "style", "contain", "Tooltip", "Trigger", "asChild", "Button", "variant", "onClick", "Icon", "icon", "size", "Portal", "Content", "Arrow", "div", "role", "className", "disabled", "ScriptEditor", "env", "script", "role", "t", "useTranslation", "SCRIPT_PLUGIN", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "extensions", "useMemo", "listener", "onChange", "text", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "showPanel", "setShowPanel", "useState", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "error", "setError", "handleBindingChange", "useCallback", "binding", "handleFormat", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "handleDeploy", "undefined", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "result", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "name", "functionUrl", "baseUrl", "URL", "values", "runtime", "services", "edge", "url", "relativeUrl", "replace", "toString", "searchParams", "set", "protocol", "React", "div", "className", "mx", "TypescriptEditor", "Toolbar", "deployed", "Boolean", "onDeploy", "onFormat", "onTogglePanel", "showDetails", "DebugPanel", "onBindingChange"]
|
|
7
|
+
}
|
|
@@ -9,8 +9,11 @@ var ScriptType = class extends TypedObject({
|
|
|
9
9
|
typename: "dxos.org/type/Script",
|
|
10
10
|
version: "0.1.0"
|
|
11
11
|
})({
|
|
12
|
+
// TODO(burdon): Change to URI?
|
|
12
13
|
name: S.optional(S.String),
|
|
14
|
+
description: S.optional(S.String),
|
|
13
15
|
source: ref(TextType),
|
|
16
|
+
// TODO(burdon): Change to has of deployed content.
|
|
14
17
|
// Whether source has changed since last deploy.
|
|
15
18
|
changed: S.optional(S.Boolean)
|
|
16
19
|
}) {
|
|
@@ -19,15 +22,17 @@ var FunctionType = class extends TypedObject({
|
|
|
19
22
|
typename: "dxos.org/type/Function",
|
|
20
23
|
version: "0.1.0"
|
|
21
24
|
})({
|
|
25
|
+
name: S.optional(S.String),
|
|
22
26
|
version: S.Number,
|
|
23
27
|
// Local binding to a function name.
|
|
28
|
+
// TODO(burdon): Move binding to inner type.
|
|
24
29
|
binding: S.optional(S.String),
|
|
25
30
|
// Reference to a source script if it exists within ECHO.
|
|
26
31
|
source: S.optional(ref(ScriptType))
|
|
27
32
|
}) {
|
|
28
33
|
};
|
|
29
34
|
|
|
30
|
-
// packages/plugins/experimental/plugin-script/src/types/types.
|
|
35
|
+
// packages/plugins/experimental/plugin-script/src/types/types.ts
|
|
31
36
|
var ScriptAction;
|
|
32
37
|
(function(ScriptAction2) {
|
|
33
38
|
ScriptAction2[ScriptAction2["CREATE"] = `${SCRIPT_PLUGIN}/create`] = "CREATE";
|
|
@@ -38,4 +43,4 @@ export {
|
|
|
38
43
|
FunctionType,
|
|
39
44
|
ScriptAction
|
|
40
45
|
};
|
|
41
|
-
//# sourceMappingURL=chunk-
|
|
46
|
+
//# sourceMappingURL=chunk-O4LWBX6A.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/script.ts", "../../../src/types/types.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { ref, S, TypedObject } from '@dxos/echo-schema';\nimport { TextType } from '@dxos/plugin-markdown/types';\n\n// TODO(burdon): Which is the outer type? I.e., in the navbar?\n\n/**\n * Source script.\n */\nexport class ScriptType extends TypedObject({ typename: 'dxos.org/type/Script', version: '0.1.0' })({\n // TODO(burdon): Change to URI?\n name: S.optional(S.String),\n description: S.optional(S.String),\n source: ref(TextType),\n // TODO(burdon): Change to has of deployed content.\n // Whether source has changed since last deploy.\n changed: S.optional(S.Boolean),\n}) {}\n\n/**\n * Function deployment.\n */\nexport class FunctionType extends TypedObject({ typename: 'dxos.org/type/Function', version: '0.1.0' })({\n name: S.optional(S.String),\n version: S.Number,\n // Local binding to a function name.\n // TODO(burdon): Move binding to inner type.\n binding: S.optional(S.String),\n // Reference to a source script if it exists within ECHO.\n source: S.optional(ref(ScriptType)),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-client';\nimport { type StackProvides } from '@dxos/plugin-stack';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport enum ScriptAction {\n CREATE = `${SCRIPT_PLUGIN}/create`,\n}\n\nexport type ScriptPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides &\n StackProvides;\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,SAASA,KAAKC,GAAGC,mBAAmB;AACpC,SAASC,gBAAgB;AAOlB,IAAMC,aAAN,cAAyBC,YAAY;EAAEC,UAAU;EAAwBC,SAAS;AAAQ,CAAA,EAAG;;EAElGC,MAAMC,EAAEC,SAASD,EAAEE,MAAM;EACzBC,aAAaH,EAAEC,SAASD,EAAEE,MAAM;EAChCE,QAAQC,IAAIC,QAAAA;;;EAGZC,SAASP,EAAEC,SAASD,EAAEQ,OAAO;AAC/B,CAAA,EAAA;AAAI;AAKG,IAAMC,eAAN,cAA2Bb,YAAY;EAAEC,UAAU;EAA0BC,SAAS;AAAQ,CAAA,EAAG;EACtGC,MAAMC,EAAEC,SAASD,EAAEE,MAAM;EACzBJ,SAASE,EAAEU;;;EAGXC,SAASX,EAAEC,SAASD,EAAEE,MAAM;;EAE5BE,QAAQJ,EAAEC,SAASI,IAAIV,UAAAA,CAAAA;AACzB,CAAA,EAAA;AAAI;;;;UCjBQiB,eAAAA;0CACD,GAAGC,aAAAA,SAAsB,IAAA;GADxBD,iBAAAA,eAAAA,CAAAA,EAAAA;",
|
|
6
|
+
"names": ["ref", "S", "TypedObject", "TextType", "ScriptType", "TypedObject", "typename", "version", "name", "S", "optional", "String", "description", "source", "ref", "TextType", "changed", "Boolean", "FunctionType", "Number", "binding", "ScriptAction", "SCRIPT_PLUGIN"]
|
|
7
|
+
}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
FunctionType,
|
|
7
7
|
ScriptAction,
|
|
8
8
|
ScriptType
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-O4LWBX6A.mjs";
|
|
10
10
|
import {
|
|
11
11
|
SCRIPT_PLUGIN,
|
|
12
12
|
meta_default
|
|
@@ -79,7 +79,7 @@ var Compiler = class {
|
|
|
79
79
|
|
|
80
80
|
// packages/plugins/experimental/plugin-script/src/components/index.ts
|
|
81
81
|
import React from "react";
|
|
82
|
-
var ScriptEditor = React.lazy(() => import("./ScriptEditor-
|
|
82
|
+
var ScriptEditor = React.lazy(() => import("./ScriptEditor-YLGNCLXA.mjs"));
|
|
83
83
|
var TypescriptEditor = React.lazy(() => import("./TypescriptEditor-XTGRVCMY.mjs"));
|
|
84
84
|
|
|
85
85
|
// packages/plugins/experimental/plugin-script/src/translations.ts
|
|
@@ -207,7 +207,7 @@ var ScriptPlugin = () => {
|
|
|
207
207
|
creators: [
|
|
208
208
|
{
|
|
209
209
|
id: "create-stack-section-script",
|
|
210
|
-
testId: "scriptPlugin.
|
|
210
|
+
testId: "scriptPlugin.createSection",
|
|
211
211
|
type: [
|
|
212
212
|
"plugin name",
|
|
213
213
|
{
|
|
@@ -268,8 +268,8 @@ var example = [
|
|
|
268
268
|
"export default async ({ ",
|
|
269
269
|
" event: { data: { request } },",
|
|
270
270
|
" context: { space, ai } ",
|
|
271
|
-
"}) => {",
|
|
272
|
-
" return new Response('Hello
|
|
271
|
+
"}: any) => {",
|
|
272
|
+
" return new Response('Hello DXOS!');",
|
|
273
273
|
"};",
|
|
274
274
|
""
|
|
275
275
|
].join("\n");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ScriptPlugin.tsx", "../../../src/compiler/compiler.ts", "../../../src/components/index.ts", "../../../src/translations.ts", "../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Code, type IconProps } from '@phosphor-icons/react';\n// @ts-ignore\nimport wasmUrl from 'esbuild-wasm/esbuild.wasm?url';\nimport React from 'react';\n\nimport { parseIntentPlugin, type PluginDefinition, resolvePlugin, NavigationAction } from '@dxos/app-framework';\nimport { create } from '@dxos/echo-schema';\nimport { parseClientPlugin } from '@dxos/plugin-client';\nimport { type ActionGroup, createExtension, isActionGroup } from '@dxos/plugin-graph';\nimport { TextType } from '@dxos/plugin-markdown/types';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { loadObjectReferences } from '@dxos/react-client/echo';\n\nimport { initializeBundler } from './bundler';\nimport { Compiler } from './compiler';\nimport { ScriptEditor } from './components';\nimport meta, { SCRIPT_PLUGIN } from './meta';\nimport translations from './translations';\nimport { FunctionType, ScriptType } from './types';\nimport { ScriptAction, type ScriptPluginProvides } from './types';\n\nexport const ScriptPlugin = (): PluginDefinition<ScriptPluginProvides> => {\n const compiler = new Compiler();\n\n return {\n meta,\n initialize: async () => {\n await compiler.initialize();\n // TODO(wittjosiah): Fetch types for https modules.\n compiler.setFile('/src/typings.d.ts', \"declare module 'https://*';\");\n // TODO(wittjosiah): Proper function handler types.\n // TODO(wittjosiah): Remove.\n compiler.setFile(\n '/src/runtime.ts',\n `\n export const Filter: any = {};\n export type FunctionHandler = ({ event, context }: { event: any; context: any }) => Promise<Response>;\n export const functionHandler = (handler: FunctionHandler) => handler;\n `,\n );\n await initializeBundler({ wasmUrl });\n },\n provides: {\n metadata: {\n records: {\n [ScriptType.typename]: {\n placeholder: ['object title placeholder', { ns: SCRIPT_PLUGIN }],\n icon: (props: IconProps) => <Code {...props} />,\n iconSymbol: 'ph--code--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (script: ScriptType) => loadObjectReferences(script, (script) => [script.source]),\n },\n },\n },\n translations,\n echo: {\n schema: [ScriptType, FunctionType],\n },\n graph: {\n builder: (plugins) => {\n const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (!client || !dispatch) {\n return [];\n }\n\n return createExtension({\n id: ScriptAction.CREATE,\n filter: (node): node is ActionGroup => isActionGroup(node) && node.id.startsWith(SpaceAction.ADD_OBJECT),\n actions: ({ node }) => {\n const id = node.id.split('/').at(-1);\n const [spaceId, objectId] = id?.split(':') ?? [];\n const space = client.spaces.get().find((space) => space.id === spaceId);\n const object = objectId && space?.db.getObjectById(objectId);\n const target = objectId ? object : space;\n if (!target) {\n return;\n }\n\n return [\n {\n id: `${SCRIPT_PLUGIN}/create/${node.id}`,\n data: async () => {\n await dispatch([\n { plugin: SCRIPT_PLUGIN, action: ScriptAction.CREATE },\n { action: SpaceAction.ADD_OBJECT, data: { target } },\n { action: NavigationAction.OPEN },\n ]);\n },\n properties: {\n label: ['create object label', { ns: SCRIPT_PLUGIN }],\n icon: (props: IconProps) => <Code {...props} />,\n iconSymbol: 'ph--code--regular',\n testId: 'scriptPlugin.createObject',\n },\n },\n ];\n },\n });\n },\n },\n stack: {\n creators: [\n {\n id: 'create-stack-section-script',\n testId: 'scriptPlugin.
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Code, type IconProps } from '@phosphor-icons/react';\n// @ts-ignore\nimport wasmUrl from 'esbuild-wasm/esbuild.wasm?url';\nimport React from 'react';\n\nimport { parseIntentPlugin, type PluginDefinition, resolvePlugin, NavigationAction } from '@dxos/app-framework';\nimport { create } from '@dxos/echo-schema';\nimport { parseClientPlugin } from '@dxos/plugin-client';\nimport { type ActionGroup, createExtension, isActionGroup } from '@dxos/plugin-graph';\nimport { TextType } from '@dxos/plugin-markdown/types';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { loadObjectReferences } from '@dxos/react-client/echo';\n\nimport { initializeBundler } from './bundler';\nimport { Compiler } from './compiler';\nimport { ScriptEditor } from './components';\nimport meta, { SCRIPT_PLUGIN } from './meta';\nimport translations from './translations';\nimport { FunctionType, ScriptType } from './types';\nimport { ScriptAction, type ScriptPluginProvides } from './types';\n\nexport const ScriptPlugin = (): PluginDefinition<ScriptPluginProvides> => {\n const compiler = new Compiler();\n\n return {\n meta,\n initialize: async () => {\n await compiler.initialize();\n // TODO(wittjosiah): Fetch types for https modules.\n compiler.setFile('/src/typings.d.ts', \"declare module 'https://*';\");\n // TODO(wittjosiah): Proper function handler types.\n // TODO(wittjosiah): Remove.\n compiler.setFile(\n '/src/runtime.ts',\n `\n export const Filter: any = {};\n export type FunctionHandler = ({ event, context }: { event: any; context: any }) => Promise<Response>;\n export const functionHandler = (handler: FunctionHandler) => handler;\n `,\n );\n await initializeBundler({ wasmUrl });\n },\n provides: {\n metadata: {\n records: {\n [ScriptType.typename]: {\n placeholder: ['object title placeholder', { ns: SCRIPT_PLUGIN }],\n icon: (props: IconProps) => <Code {...props} />,\n iconSymbol: 'ph--code--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (script: ScriptType) => loadObjectReferences(script, (script) => [script.source]),\n },\n },\n },\n translations,\n echo: {\n schema: [ScriptType, FunctionType],\n },\n graph: {\n builder: (plugins) => {\n const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (!client || !dispatch) {\n return [];\n }\n\n return createExtension({\n id: ScriptAction.CREATE,\n filter: (node): node is ActionGroup => isActionGroup(node) && node.id.startsWith(SpaceAction.ADD_OBJECT),\n actions: ({ node }) => {\n const id = node.id.split('/').at(-1);\n const [spaceId, objectId] = id?.split(':') ?? [];\n const space = client.spaces.get().find((space) => space.id === spaceId);\n const object = objectId && space?.db.getObjectById(objectId);\n const target = objectId ? object : space;\n if (!target) {\n return;\n }\n\n return [\n {\n id: `${SCRIPT_PLUGIN}/create/${node.id}`,\n data: async () => {\n await dispatch([\n { plugin: SCRIPT_PLUGIN, action: ScriptAction.CREATE },\n { action: SpaceAction.ADD_OBJECT, data: { target } },\n { action: NavigationAction.OPEN },\n ]);\n },\n properties: {\n label: ['create object label', { ns: SCRIPT_PLUGIN }],\n icon: (props: IconProps) => <Code {...props} />,\n iconSymbol: 'ph--code--regular',\n testId: 'scriptPlugin.createObject',\n },\n },\n ];\n },\n });\n },\n },\n stack: {\n creators: [\n {\n id: 'create-stack-section-script',\n testId: 'scriptPlugin.createSection',\n type: ['plugin name', { ns: SCRIPT_PLUGIN }],\n label: ['create stack section label', { ns: SCRIPT_PLUGIN }],\n icon: (props: any) => <Code {...props} />,\n intent: {\n plugin: SCRIPT_PLUGIN,\n action: ScriptAction.CREATE,\n },\n },\n ],\n },\n surface: {\n component: ({ data, role }) => {\n if (role && !['article', 'section'].includes(role)) {\n return null;\n }\n\n if (data.object instanceof ScriptType) {\n return <ScriptEditor env={compiler.environment} script={data.object} role={role} />;\n }\n\n return null;\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case ScriptAction.CREATE: {\n return { data: create(ScriptType, { source: create(TextType, { content: example }) }) };\n }\n }\n },\n },\n },\n };\n};\n\n// TODO(burdon): Import.\nconst example = [\n 'export default async ({ ',\n ' event: { data: { request } },',\n ' context: { space, ai } ',\n '}: any) => {',\n \" return new Response('Hello DXOS!');\",\n '};',\n '',\n].join('\\n');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n createDefaultMapFromCDN,\n createSystem,\n createVirtualTypeScriptEnvironment,\n type VirtualTypeScriptEnvironment,\n} from '@typescript/vfs';\nimport ts from 'typescript';\n\nimport { invariant } from '@dxos/invariant';\n\nconst defaultOptions: ts.CompilerOptions = {\n lib: ['DOM', 'es2022'],\n target: ts.ScriptTarget.ES2022,\n};\n\nexport class Compiler {\n private _env: VirtualTypeScriptEnvironment | undefined;\n private _fsMap: Map<string, string> | undefined;\n\n constructor(private readonly _options: ts.CompilerOptions = defaultOptions) {}\n\n async initialize() {\n if (this._env) {\n return;\n }\n\n // TODO(wittjosiah): Figure out how to get workers working in plugin packages.\n // https://github.com/val-town/codemirror-ts?tab=readme-ov-file#setup-worker\n this._fsMap = await createDefaultMapFromCDN(this._options, '5.5.4', true, ts);\n const system = createSystem(this._fsMap);\n this._env = createVirtualTypeScriptEnvironment(system, [], ts, this._options);\n }\n\n get environment() {\n invariant(this._env, 'Compiler environment not initialized.');\n return this._env;\n }\n\n setFile(fileName: string, content: string) {\n invariant(this._fsMap, 'File system map not initialized.');\n this.environment.createFile(fileName, content);\n }\n\n compile(fileName: string) {\n return this.environment.languageService.getEmitOutput(fileName);\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nexport const ScriptEditor = React.lazy(() => import('./ScriptEditor'));\nexport const TypescriptEditor = React.lazy(() => import('./TypescriptEditor'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SCRIPT_PLUGIN]: {\n 'plugin name': 'Scripts',\n 'object title placeholder': 'New script',\n 'create object label': 'Create script',\n 'create stack section label': 'Create script',\n 'binding placeholder': 'Function name',\n 'function request placeholder': 'Function request',\n 'deploy label': 'Deploy',\n 'deployed label': 'Current version of the script is deployed',\n 'upload failed label': 'Upload failed',\n 'copy link label': 'Copy function link',\n 'format label': 'Format',\n 'toggle details label': 'Toggle details panel',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ScriptPlugin } from './ScriptPlugin';\n\nexport default ScriptPlugin;\n\nexport * from './bundler';\nexport * from './compiler';\nexport * from './components';\nexport * from './types';\n\nexport * from './ScriptPlugin';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["Code", "wasmUrl", "React", "parseIntentPlugin", "resolvePlugin", "NavigationAction", "create", "parseClientPlugin", "createExtension", "isActionGroup", "TextType", "SpaceAction", "loadObjectReferences", "createDefaultMapFromCDN", "createSystem", "createVirtualTypeScriptEnvironment", "ts", "invariant", "defaultOptions", "lib", "target", "ScriptTarget", "ES2022", "Compiler", "constructor", "_options", "initialize", "_env", "_fsMap", "system", "environment", "setFile", "fileName", "content", "createFile", "compile", "languageService", "getEmitOutput", "React", "ScriptEditor", "React", "lazy", "TypescriptEditor", "SCRIPT_PLUGIN", "ScriptPlugin", "compiler", "Compiler", "meta", "initialize", "setFile", "initializeBundler", "wasmUrl", "provides", "metadata", "records", "ScriptType", "typename", "placeholder", "ns", "SCRIPT_PLUGIN", "icon", "props", "React", "Code", "iconSymbol", "loadReferences", "script", "loadObjectReferences", "source", "translations", "echo", "schema", "FunctionType", "graph", "builder", "plugins", "client", "resolvePlugin", "parseClientPlugin", "dispatch", "parseIntentPlugin", "intent", "createExtension", "id", "ScriptAction", "CREATE", "filter", "node", "isActionGroup", "startsWith", "SpaceAction", "ADD_OBJECT", "actions", "split", "at", "spaceId", "objectId", "space", "spaces", "get", "find", "object", "db", "getObjectById", "target", "data", "plugin", "action", "NavigationAction", "OPEN", "properties", "label", "testId", "stack", "creators", "type", "surface", "component", "role", "includes", "ScriptEditor", "env", "environment", "resolver", "create", "TextType", "content", "example", "join", "ScriptPlugin"]
|
|
7
7
|
}
|