@dxos/plugin-script 0.6.10 → 0.6.11-staging.66fb9aa
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-5Y3EROG3.mjs} +126 -65
- package/dist/lib/browser/ScriptEditor-5Y3EROG3.mjs.map +7 -0
- package/dist/lib/browser/{TypescriptEditor-XTGRVCMY.mjs → TypescriptEditor-GPE72Y6I.mjs} +2 -2
- package/dist/lib/browser/{chunk-DX5CSOBP.mjs → chunk-MRGOT5RF.mjs} +25 -26
- package/dist/lib/browser/chunk-MRGOT5RF.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 +6 -6
- 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-YCUQFWQM.cjs} +142 -81
- package/dist/lib/node/ScriptEditor-YCUQFWQM.cjs.map +7 -0
- package/dist/lib/node/{TypescriptEditor-CRONCQSI.cjs → TypescriptEditor-M3WWFIP2.cjs} +7 -7
- package/dist/lib/node/{TypescriptEditor-CRONCQSI.cjs.map → TypescriptEditor-M3WWFIP2.cjs.map} +2 -2
- 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/{chunk-RXI576K3.cjs → chunk-IMLDKD5Y.cjs} +28 -29
- package/dist/lib/node/chunk-IMLDKD5Y.cjs.map +7 -0
- package/dist/lib/node/index.cjs +18 -18
- 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/ScriptBlock/ScriptBlock.stories.d.ts +1 -4
- package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +1 -3
- package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor.d.ts +3 -4
- package/dist/types/src/components/TypescriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor.stories.d.ts +1 -4
- package/dist/types/src/components/TypescriptEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +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 +36 -33
- package/src/ScriptPlugin.tsx +7 -4
- package/src/components/{DetailsPanel.tsx → DebugPanel.tsx} +87 -36
- package/src/components/ScriptBlock/ScriptBlock.stories.tsx +27 -20
- package/src/components/ScriptEditor.tsx +20 -5
- package/src/components/Toolbar.stories.tsx +2 -4
- package/src/components/Toolbar.tsx +15 -29
- package/src/components/TypescriptEditor.stories.tsx +9 -12
- package/src/components/TypescriptEditor.tsx +15 -17
- package/src/types/script.ts +13 -0
- package/dist/lib/browser/ScriptEditor-WNCGR5OU.mjs.map +0 -7
- package/dist/lib/browser/chunk-DX5CSOBP.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-RXI576K3.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/dist/lib/browser/{TypescriptEditor-XTGRVCMY.mjs.map → TypescriptEditor-GPE72Y6I.mjs.map} +0 -0
- /package/src/types/{types.tsx → types.ts} +0 -0
|
@@ -26,17 +26,17 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var ScriptEditor_YCUQFWQM_exports = {};
|
|
30
|
+
__export(ScriptEditor_YCUQFWQM_exports, {
|
|
31
31
|
ScriptEditor: () => ScriptEditor,
|
|
32
32
|
default: () => ScriptEditor_default
|
|
33
33
|
});
|
|
34
|
-
module.exports = __toCommonJS(
|
|
34
|
+
module.exports = __toCommonJS(ScriptEditor_YCUQFWQM_exports);
|
|
35
35
|
var import_chunk_PFH3ROEH = require("./chunk-PFH3ROEH.cjs");
|
|
36
36
|
var import_chunk_4GTXIELQ = require("./chunk-4GTXIELQ.cjs");
|
|
37
|
-
var
|
|
37
|
+
var import_chunk_5RBVXKXT = require("./chunk-5RBVXKXT.cjs");
|
|
38
38
|
var import_chunk_4VMNBXWU = require("./chunk-4VMNBXWU.cjs");
|
|
39
|
-
var
|
|
39
|
+
var import_chunk_IMLDKD5Y = require("./chunk-IMLDKD5Y.cjs");
|
|
40
40
|
var import_prettier = require("prettier");
|
|
41
41
|
var import_estree = __toESM(require("prettier/plugins/estree"));
|
|
42
42
|
var import_typescript = __toESM(require("prettier/plugins/typescript"));
|
|
@@ -46,18 +46,18 @@ var import_react_client = require("@dxos/react-client");
|
|
|
46
46
|
var import_echo = require("@dxos/react-client/echo");
|
|
47
47
|
var import_halo = require("@dxos/react-client/halo");
|
|
48
48
|
var import_react_ui = require("@dxos/react-ui");
|
|
49
|
+
var import_react_ui_attention = require("@dxos/react-ui-attention");
|
|
49
50
|
var import_react_ui_editor = require("@dxos/react-ui-editor");
|
|
50
51
|
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
51
52
|
var import_react2 = __toESM(require("react"));
|
|
52
53
|
var import_log2 = require("@dxos/log");
|
|
53
54
|
var import_react_ui2 = require("@dxos/react-ui");
|
|
55
|
+
var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
|
|
54
56
|
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
|
55
|
-
var import_react3 = require("
|
|
56
|
-
var import_react4 = __toESM(require("react"));
|
|
57
|
+
var import_react3 = __toESM(require("react"));
|
|
57
58
|
var import_react_ui3 = require("@dxos/react-ui");
|
|
58
|
-
var
|
|
59
|
-
var
|
|
60
|
-
var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }) => {
|
|
59
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel.tsx";
|
|
60
|
+
var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }) => {
|
|
61
61
|
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_4VMNBXWU.SCRIPT_PLUGIN);
|
|
62
62
|
const bindingInputRef = (0, import_react2.useRef)(null);
|
|
63
63
|
const [binding, setBinding] = (0, import_react_ui2.useControlledValue)(_binding ?? "");
|
|
@@ -67,7 +67,6 @@ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChang
|
|
|
67
67
|
const inputRef = (0, import_react2.useRef)(null);
|
|
68
68
|
const [input, setInput] = (0, import_react2.useState)("");
|
|
69
69
|
const [result, setResult] = (0, import_react2.useState)("");
|
|
70
|
-
const resultRef = (0, import_react_ui2.useDynamicRef)(result);
|
|
71
70
|
const [state, setState] = (0, import_react2.useState)(null);
|
|
72
71
|
const [history, setHistory] = (0, import_react2.useState)([]);
|
|
73
72
|
const scrollerRef = (0, import_react2.useRef)(null);
|
|
@@ -93,75 +92,112 @@ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChang
|
|
|
93
92
|
setHistory([]);
|
|
94
93
|
inputRef.current?.focus();
|
|
95
94
|
};
|
|
96
|
-
const
|
|
95
|
+
const handleResponse = ({ text, data, error } = {}) => {
|
|
97
96
|
controller.current = void 0;
|
|
98
97
|
setHistory((history2) => [
|
|
99
98
|
...history2,
|
|
100
99
|
{
|
|
101
100
|
type: "response",
|
|
102
|
-
text
|
|
101
|
+
text,
|
|
102
|
+
data,
|
|
103
|
+
error
|
|
103
104
|
}
|
|
104
105
|
]);
|
|
105
106
|
setResult("");
|
|
106
107
|
setState(null);
|
|
107
108
|
handleScroll();
|
|
108
109
|
};
|
|
109
|
-
const
|
|
110
|
-
if (input2.trim().length === 0) {
|
|
111
|
-
inputRef.current?.focus();
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
setHistory((history2) => [
|
|
115
|
-
...history2,
|
|
116
|
-
{
|
|
117
|
-
type: "request",
|
|
118
|
-
text: input2
|
|
119
|
-
}
|
|
120
|
-
]);
|
|
121
|
-
setInput("");
|
|
122
|
-
setResult("");
|
|
110
|
+
const handleRequest = async (input2) => {
|
|
123
111
|
try {
|
|
124
112
|
setState("pending");
|
|
113
|
+
let data = null;
|
|
114
|
+
if (input2.charAt(0) === "{") {
|
|
115
|
+
try {
|
|
116
|
+
const validJsonString = input2.replace(/'/g, '"').replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3');
|
|
117
|
+
data = JSON.parse(validJsonString);
|
|
118
|
+
input2 = JSON.stringify(data, null, 2);
|
|
119
|
+
} catch (err) {
|
|
120
|
+
inputRef.current?.focus();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
setInput("");
|
|
125
|
+
setResult("");
|
|
126
|
+
setHistory((history2) => [
|
|
127
|
+
...history2,
|
|
128
|
+
{
|
|
129
|
+
type: "request",
|
|
130
|
+
text: input2
|
|
131
|
+
}
|
|
132
|
+
]);
|
|
133
|
+
setTimeout(() => {
|
|
134
|
+
handleScroll();
|
|
135
|
+
});
|
|
125
136
|
controller.current = new AbortController();
|
|
126
137
|
const response = await fetch(functionUrl, {
|
|
127
138
|
signal: controller.current.signal,
|
|
128
139
|
method: "POST",
|
|
129
|
-
body: input2
|
|
140
|
+
body: input2,
|
|
141
|
+
headers: {
|
|
142
|
+
"Content-Type": data ? "application/json" : "text/plain"
|
|
143
|
+
}
|
|
130
144
|
});
|
|
131
145
|
if (!response.ok) {
|
|
132
|
-
|
|
146
|
+
const text2 = await response.text();
|
|
147
|
+
handleResponse({
|
|
148
|
+
error: new Error(text2 || response.statusText || String(response.status))
|
|
149
|
+
});
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const contentType = response.headers.get("content-type");
|
|
153
|
+
if (contentType === "application/json") {
|
|
154
|
+
const data2 = await response.json();
|
|
155
|
+
handleResponse({
|
|
156
|
+
data: data2
|
|
157
|
+
});
|
|
133
158
|
return;
|
|
134
159
|
}
|
|
135
160
|
setState("responding");
|
|
161
|
+
let text = "";
|
|
136
162
|
const reader = response.body.getReader();
|
|
137
163
|
const pump = async ({ done, value }) => {
|
|
138
|
-
|
|
139
|
-
handleScroll();
|
|
164
|
+
text = text + new TextDecoder().decode(value);
|
|
140
165
|
if (!controller.current || done) {
|
|
141
|
-
|
|
166
|
+
handleResponse({
|
|
167
|
+
text
|
|
168
|
+
});
|
|
142
169
|
return;
|
|
143
170
|
}
|
|
171
|
+
setResult(text);
|
|
172
|
+
setTimeout(() => {
|
|
173
|
+
handleScroll();
|
|
174
|
+
});
|
|
144
175
|
return reader.read().then(pump);
|
|
145
176
|
};
|
|
146
177
|
void reader.read().then(pump).catch((err) => {
|
|
147
178
|
if (err.name !== "AbortError") {
|
|
148
179
|
import_log2.log.catch(err, void 0, {
|
|
149
180
|
F: __dxlog_file,
|
|
150
|
-
L:
|
|
181
|
+
L: 163,
|
|
151
182
|
S: void 0,
|
|
152
183
|
C: (f, a) => f(...a)
|
|
153
184
|
});
|
|
154
185
|
}
|
|
155
186
|
});
|
|
156
187
|
} catch (err) {
|
|
157
|
-
setState(null);
|
|
158
188
|
if (err !== "stop") {
|
|
189
|
+
const error = err instanceof Error ? err : new Error(err);
|
|
190
|
+
handleResponse({
|
|
191
|
+
error
|
|
192
|
+
});
|
|
159
193
|
import_log2.log.catch(err, void 0, {
|
|
160
194
|
F: __dxlog_file,
|
|
161
|
-
L:
|
|
195
|
+
L: 170,
|
|
162
196
|
S: void 0,
|
|
163
197
|
C: (f, a) => f(...a)
|
|
164
198
|
});
|
|
199
|
+
} else {
|
|
200
|
+
handleResponse();
|
|
165
201
|
}
|
|
166
202
|
}
|
|
167
203
|
};
|
|
@@ -184,7 +220,7 @@ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChang
|
|
|
184
220
|
placeholder: t("function request placeholder"),
|
|
185
221
|
value: input,
|
|
186
222
|
onChange: (ev) => setInput(ev.target.value),
|
|
187
|
-
onKeyDown: (ev) => ev.key === "Enter" &&
|
|
223
|
+
onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
|
|
188
224
|
})), /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.TextInput, {
|
|
189
225
|
ref: bindingInputRef,
|
|
190
226
|
classNames: "!w-[10rem]",
|
|
@@ -193,7 +229,7 @@ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChang
|
|
|
193
229
|
onChange: (ev) => setBinding(ev.target.value.toUpperCase()),
|
|
194
230
|
onBlur: handleBlur
|
|
195
231
|
})), /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Toolbar.Button, {
|
|
196
|
-
onClick: () =>
|
|
232
|
+
onClick: () => handleRequest(input)
|
|
197
233
|
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Icon, {
|
|
198
234
|
icon: "ph--play--regular",
|
|
199
235
|
size: 4
|
|
@@ -210,15 +246,34 @@ var RobotAvatar = () => /* @__PURE__ */ import_react2.default.createElement(impo
|
|
|
210
246
|
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Avatar.Frame, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Avatar.Icon, {
|
|
211
247
|
icon: "ph--robot--regular"
|
|
212
248
|
})));
|
|
249
|
+
var MessageItem = ({ classNames, message }) => {
|
|
250
|
+
const { text, data, error } = message;
|
|
251
|
+
if (error) {
|
|
252
|
+
return /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
253
|
+
className: (0, import_react_ui_theme2.mx)(classNames, "whitespace-pre text-error")
|
|
254
|
+
}, String(error));
|
|
255
|
+
} else if (data) {
|
|
256
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui_syntax_highlighter.SyntaxHighlighter, {
|
|
257
|
+
language: "json",
|
|
258
|
+
className: (0, import_react_ui_theme2.mx)("text-xs", classNames)
|
|
259
|
+
}, JSON.stringify(data, null, 2));
|
|
260
|
+
}
|
|
261
|
+
return /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
262
|
+
className: (0, import_react_ui_theme2.mx)(classNames)
|
|
263
|
+
}, text || "\xD8");
|
|
264
|
+
};
|
|
213
265
|
var MessageThread = ({ state, result, history }) => {
|
|
214
|
-
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, history.map((
|
|
266
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, history.map((message, i) => /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
215
267
|
key: i,
|
|
216
268
|
className: "grid grid-cols-[3rem_1fr]"
|
|
217
|
-
}, /* @__PURE__ */ import_react2.default.createElement("div", null, type === "response" && /* @__PURE__ */ import_react2.default.createElement(RobotAvatar, null)), /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
218
|
-
className: (0, import_react_ui_theme2.mx)("flex", type === "request" && "justify-end")
|
|
219
|
-
}, /* @__PURE__ */ import_react2.default.createElement(
|
|
220
|
-
|
|
221
|
-
|
|
269
|
+
}, /* @__PURE__ */ import_react2.default.createElement("div", null, message.type === "response" && /* @__PURE__ */ import_react2.default.createElement(RobotAvatar, null)), /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
270
|
+
className: (0, import_react_ui_theme2.mx)("flex", message.type === "request" && "justify-end")
|
|
271
|
+
}, /* @__PURE__ */ import_react2.default.createElement(MessageItem, {
|
|
272
|
+
classNames: [
|
|
273
|
+
message.type === "request" && "p-1 px-2 rounded-lg bg-hoverSurface"
|
|
274
|
+
],
|
|
275
|
+
message
|
|
276
|
+
})))), /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
222
277
|
className: "grid grid-cols-[3rem_1fr]"
|
|
223
278
|
}, /* @__PURE__ */ import_react2.default.createElement("div", null, state === "pending" && /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Icon, {
|
|
224
279
|
icon: "ph--spinner--regular",
|
|
@@ -228,7 +283,7 @@ var MessageThread = ({ state, result, history }) => {
|
|
|
228
283
|
};
|
|
229
284
|
var Toolbar2 = ({ classNames, deployed, error, functionUrl, showPanel, onDeploy, onFormat, onTogglePanel }) => {
|
|
230
285
|
const { t } = (0, import_react_ui3.useTranslation)(import_chunk_4VMNBXWU.SCRIPT_PLUGIN);
|
|
231
|
-
const [pending, setPending] = (0,
|
|
286
|
+
const [pending, setPending] = (0, import_react3.useState)(false);
|
|
232
287
|
const handleCopyLink = async () => {
|
|
233
288
|
if (!functionUrl) {
|
|
234
289
|
return;
|
|
@@ -240,11 +295,11 @@ var Toolbar2 = ({ classNames, deployed, error, functionUrl, showPanel, onDeploy,
|
|
|
240
295
|
await onDeploy?.();
|
|
241
296
|
setPending(false);
|
|
242
297
|
};
|
|
243
|
-
return /* @__PURE__ */
|
|
298
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.DensityProvider, {
|
|
244
299
|
density: "fine"
|
|
245
|
-
}, /* @__PURE__ */
|
|
300
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.ElevationProvider, {
|
|
246
301
|
elevation: "chrome"
|
|
247
|
-
}, /* @__PURE__ */
|
|
302
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Toolbar.Root, {
|
|
248
303
|
classNames: [
|
|
249
304
|
"p-1",
|
|
250
305
|
classNames
|
|
@@ -252,54 +307,59 @@ var Toolbar2 = ({ classNames, deployed, error, functionUrl, showPanel, onDeploy,
|
|
|
252
307
|
style: {
|
|
253
308
|
contain: "layout"
|
|
254
309
|
}
|
|
255
|
-
}, onFormat && /* @__PURE__ */
|
|
310
|
+
}, onFormat && /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Trigger, {
|
|
256
311
|
asChild: true
|
|
257
|
-
}, /* @__PURE__ */
|
|
312
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Toolbar.Button, {
|
|
258
313
|
variant: "ghost",
|
|
259
314
|
onClick: onFormat
|
|
260
|
-
}, /* @__PURE__ */
|
|
261
|
-
|
|
262
|
-
|
|
315
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Icon, {
|
|
316
|
+
icon: "ph--magic-wand--regular",
|
|
317
|
+
size: 4
|
|
318
|
+
}))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Arrow, null), t("format label")))), /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
263
319
|
role: "separator",
|
|
264
320
|
className: "grow"
|
|
265
|
-
}),
|
|
321
|
+
}), error ? /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Trigger, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Icon, {
|
|
322
|
+
icon: "ph--warning-circle--regular",
|
|
323
|
+
size: 4
|
|
324
|
+
})), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Arrow, null), error))) : null, functionUrl && deployed && /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Trigger, {
|
|
266
325
|
asChild: true
|
|
267
|
-
}, /* @__PURE__ */
|
|
326
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Toolbar.Button, {
|
|
268
327
|
variant: "ghost",
|
|
269
328
|
onClick: handleCopyLink
|
|
270
|
-
}, /* @__PURE__ */
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
})), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Arrow, null), error))) : deployed ? /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, null, /* @__PURE__ */ import_react4.default.createElement(import_react3.Checks, {
|
|
275
|
-
className: (0, import_react_ui_theme3.getSize)(4)
|
|
276
|
-
})), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Arrow, null), t("deployed label")))) : null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, {
|
|
329
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Icon, {
|
|
330
|
+
icon: "ph--link--regular",
|
|
331
|
+
size: 4
|
|
332
|
+
}))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Arrow, null), t("copy link label")))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Trigger, {
|
|
277
333
|
asChild: true
|
|
278
|
-
}, /* @__PURE__ */
|
|
334
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Toolbar.Button, {
|
|
279
335
|
variant: "ghost",
|
|
280
336
|
onClick: handleDeploy,
|
|
281
337
|
disabled: pending
|
|
282
|
-
}, pending ? /* @__PURE__ */
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
})
|
|
338
|
+
}, pending ? /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Icon, {
|
|
339
|
+
icon: "ph--spinner--regular",
|
|
340
|
+
size: 4,
|
|
341
|
+
classNames: "animate-spin-slow"
|
|
342
|
+
}) : /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Icon, {
|
|
343
|
+
icon: "ph--cloud-arrow-up--regular",
|
|
344
|
+
size: 4
|
|
345
|
+
}))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Arrow, null), pending ? t("pending label") : t("deploy label")))), onTogglePanel && /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Trigger, {
|
|
287
346
|
asChild: true
|
|
288
|
-
}, /* @__PURE__ */
|
|
347
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Toolbar.Button, {
|
|
289
348
|
variant: "ghost",
|
|
290
349
|
onClick: onTogglePanel
|
|
291
|
-
}, /* @__PURE__ */
|
|
292
|
-
icon: showPanel ? "ph--caret-
|
|
350
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Icon, {
|
|
351
|
+
icon: showPanel ? "ph--caret-down--regular" : "ph--caret-up--regular",
|
|
293
352
|
size: 4
|
|
294
|
-
}))), /* @__PURE__ */
|
|
353
|
+
}))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Tooltip.Arrow, null), t("toggle details label")))))));
|
|
295
354
|
};
|
|
296
355
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx";
|
|
297
356
|
var ScriptEditor = ({ env, script, role }) => {
|
|
298
357
|
const { t } = (0, import_react_ui.useTranslation)(import_chunk_4VMNBXWU.SCRIPT_PLUGIN);
|
|
358
|
+
const hasAttention = (0, import_react_ui_attention.useHasAttention)((0, import_echo.fullyQualifiedId)(script));
|
|
299
359
|
const client = (0, import_react_client.useClient)();
|
|
300
360
|
const identity = (0, import_halo.useIdentity)();
|
|
301
361
|
const space = (0, import_echo.getSpace)(script);
|
|
302
|
-
const [fn] = (0, import_echo.useQuery)(space, import_echo.Filter.schema(
|
|
362
|
+
const [fn] = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_chunk_5RBVXKXT.FunctionType, (fn2) => fn2.source === script));
|
|
303
363
|
const extensions = (0, import_react.useMemo)(() => [
|
|
304
364
|
(0, import_react_ui_editor.listener)({
|
|
305
365
|
onChange: (text) => {
|
|
@@ -350,7 +410,7 @@ var ScriptEditor = ({ env, script, role }) => {
|
|
|
350
410
|
} catch (err) {
|
|
351
411
|
import_log.log.catch(err, void 0, {
|
|
352
412
|
F: __dxlog_file2,
|
|
353
|
-
L:
|
|
413
|
+
L: 102,
|
|
354
414
|
S: void 0,
|
|
355
415
|
C: (f, a) => f(...a)
|
|
356
416
|
});
|
|
@@ -390,14 +450,14 @@ var ScriptEditor = ({ env, script, role }) => {
|
|
|
390
450
|
functionVersionNumber
|
|
391
451
|
}, {
|
|
392
452
|
F: __dxlog_file2,
|
|
393
|
-
L:
|
|
453
|
+
L: 137,
|
|
394
454
|
S: void 0,
|
|
395
455
|
C: (f, a) => f(...a)
|
|
396
456
|
});
|
|
397
457
|
if (fn) {
|
|
398
458
|
fn.version = functionVersionNumber;
|
|
399
459
|
}
|
|
400
|
-
const deployedFunction = fn ?? space.db.add((0, import_echo.create)(
|
|
460
|
+
const deployedFunction = fn ?? space.db.add((0, import_echo.create)(import_chunk_5RBVXKXT.FunctionType, {
|
|
401
461
|
version: functionVersionNumber,
|
|
402
462
|
source: script
|
|
403
463
|
}));
|
|
@@ -407,7 +467,7 @@ var ScriptEditor = ({ env, script, role }) => {
|
|
|
407
467
|
} catch (err) {
|
|
408
468
|
import_log.log.catch(err, void 0, {
|
|
409
469
|
F: __dxlog_file2,
|
|
410
|
-
L:
|
|
470
|
+
L: 147,
|
|
411
471
|
S: void 0,
|
|
412
472
|
C: (f, a) => f(...a)
|
|
413
473
|
});
|
|
@@ -436,14 +496,15 @@ var ScriptEditor = ({ env, script, role }) => {
|
|
|
436
496
|
]);
|
|
437
497
|
return /* @__PURE__ */ import_react.default.createElement("div", {
|
|
438
498
|
role: "none",
|
|
439
|
-
className: (0, import_react_ui_theme.mx)(role === "article" && "row-span-2",
|
|
440
|
-
}, /* @__PURE__ */ import_react.default.createElement(
|
|
499
|
+
className: (0, import_react_ui_theme.mx)("flex flex-col is-full bs-full overflow-hidden", role === "article" && "row-span-2", hasAttention && "attention-surface")
|
|
500
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_chunk_IMLDKD5Y.TypescriptEditor, {
|
|
441
501
|
id: script.id,
|
|
442
502
|
env,
|
|
443
503
|
initialValue,
|
|
444
504
|
extensions,
|
|
445
|
-
className: "flex is-full bs-full overflow-hidden
|
|
505
|
+
className: "flex is-full bs-full overflow-hidden ch-focus-ring-inset-over-all"
|
|
446
506
|
}), /* @__PURE__ */ import_react.default.createElement(Toolbar2, {
|
|
507
|
+
classNames: "border-t border-separator",
|
|
447
508
|
deployed: Boolean(existingFunctionUrl) && !script.changed,
|
|
448
509
|
functionUrl,
|
|
449
510
|
error,
|
|
@@ -451,7 +512,7 @@ var ScriptEditor = ({ env, script, role }) => {
|
|
|
451
512
|
onDeploy: handleDeploy,
|
|
452
513
|
onFormat: handleFormat,
|
|
453
514
|
onTogglePanel: async () => setShowPanel((showDetails) => !showDetails)
|
|
454
|
-
}), showPanel && /* @__PURE__ */ import_react.default.createElement(
|
|
515
|
+
}), showPanel && /* @__PURE__ */ import_react.default.createElement(DebugPanel, {
|
|
455
516
|
functionUrl,
|
|
456
517
|
binding: fn?.binding,
|
|
457
518
|
onBindingChange: handleBindingChange
|
|
@@ -462,4 +523,4 @@ var ScriptEditor_default = ScriptEditor;
|
|
|
462
523
|
0 && (module.exports = {
|
|
463
524
|
ScriptEditor
|
|
464
525
|
});
|
|
465
|
-
//# sourceMappingURL=ScriptEditor-
|
|
526
|
+
//# sourceMappingURL=ScriptEditor-YCUQFWQM.cjs.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 {\n create,\n createDocAccessor,\n Filter,\n fullyQualifiedId,\n getMeta,\n getSpace,\n useQuery,\n} from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { useHasAttention } from '@dxos/react-ui-attention';\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 hasAttention = useHasAttention(fullyQualifiedId(script));\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(\n 'flex flex-col is-full bs-full overflow-hidden',\n role === 'article' && 'row-span-2',\n hasAttention && 'attention-surface',\n )}\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 ch-focus-ring-inset-over-all'\n />\n\n <Toolbar\n classNames='border-t border-separator'\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\nimport { log } from '@dxos/log';\nimport {\n Avatar,\n DensityProvider,\n Icon,\n Input,\n type ThemedClassName,\n Toolbar,\n useControlledValue,\n useTranslation,\n} from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\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 { 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 language='json' className={mx('text-xs', classNames)}>\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): Simplify tooltips.\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": ["import_react", "import_log", "import_react_ui", "import_react_ui_theme", "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", "React", "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", "span", "SyntaxHighlighter", "language", "map", "i", "length", "deployed", "showPanel", "onDeploy", "onFormat", "onTogglePanel", "pending", "setPending", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "ElevationProvider", "elevation", "NaturalToolbar", "style", "contain", "Tooltip", "Trigger", "asChild", "Portal", "Content", "Arrow", "role", "disabled", "ScriptEditor", "env", "script", "hasAttention", "useHasAttention", "fullyQualifiedId", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "extensions", "useMemo", "listener", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "setShowPanel", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "setError", "handleBindingChange", "useCallback", "handleFormat", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "baseUrl", "URL", "values", "runtime", "services", "edge", "url", "relativeUrl", "toString", "searchParams", "set", "protocol", "TypescriptEditor", "Boolean", "showDetails"]
|
|
7
|
+
}
|
|
@@ -16,15 +16,15 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
TypescriptEditor: () =>
|
|
22
|
-
default: () =>
|
|
19
|
+
var TypescriptEditor_M3WWFIP2_exports = {};
|
|
20
|
+
__export(TypescriptEditor_M3WWFIP2_exports, {
|
|
21
|
+
TypescriptEditor: () => import_chunk_IMLDKD5Y.TypescriptEditor,
|
|
22
|
+
default: () => import_chunk_IMLDKD5Y.TypescriptEditor_default
|
|
23
23
|
});
|
|
24
|
-
module.exports = __toCommonJS(
|
|
25
|
-
var
|
|
24
|
+
module.exports = __toCommonJS(TypescriptEditor_M3WWFIP2_exports);
|
|
25
|
+
var import_chunk_IMLDKD5Y = require("./chunk-IMLDKD5Y.cjs");
|
|
26
26
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
27
|
0 && (module.exports = {
|
|
28
28
|
TypescriptEditor
|
|
29
29
|
});
|
|
30
|
-
//# sourceMappingURL=TypescriptEditor-
|
|
30
|
+
//# sourceMappingURL=TypescriptEditor-M3WWFIP2.cjs.map
|
package/dist/lib/node/{TypescriptEditor-CRONCQSI.cjs.map → TypescriptEditor-M3WWFIP2.cjs.map}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["TypescriptEditor-
|
|
4
|
-
"sourcesContent": ["import {\n TypescriptEditor,\n TypescriptEditor_default\n} from \"./chunk-
|
|
3
|
+
"sources": ["TypescriptEditor-M3WWFIP2.cjs"],
|
|
4
|
+
"sourcesContent": ["import {\n TypescriptEditor,\n TypescriptEditor_default\n} from \"./chunk-IMLDKD5Y.cjs\";\nexport {\n TypescriptEditor,\n TypescriptEditor_default as default\n};\n//# sourceMappingURL=TypescriptEditor-M3WWFIP2.cjs.map\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAGO;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -16,13 +16,13 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var chunk_5RBVXKXT_exports = {};
|
|
20
|
+
__export(chunk_5RBVXKXT_exports, {
|
|
21
21
|
FunctionType: () => FunctionType,
|
|
22
22
|
ScriptAction: () => ScriptAction,
|
|
23
23
|
ScriptType: () => ScriptType
|
|
24
24
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
25
|
+
module.exports = __toCommonJS(chunk_5RBVXKXT_exports);
|
|
26
26
|
var import_chunk_4VMNBXWU = require("./chunk-4VMNBXWU.cjs");
|
|
27
27
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
28
28
|
var import_types = require("@dxos/plugin-markdown/types");
|
|
@@ -30,8 +30,11 @@ var ScriptType = class extends (0, import_echo_schema.TypedObject)({
|
|
|
30
30
|
typename: "dxos.org/type/Script",
|
|
31
31
|
version: "0.1.0"
|
|
32
32
|
})({
|
|
33
|
+
// TODO(burdon): Change to URI?
|
|
33
34
|
name: import_echo_schema.S.optional(import_echo_schema.S.String),
|
|
35
|
+
description: import_echo_schema.S.optional(import_echo_schema.S.String),
|
|
34
36
|
source: (0, import_echo_schema.ref)(import_types.TextType),
|
|
37
|
+
// TODO(burdon): Change to has of deployed content.
|
|
35
38
|
// Whether source has changed since last deploy.
|
|
36
39
|
changed: import_echo_schema.S.optional(import_echo_schema.S.Boolean)
|
|
37
40
|
}) {
|
|
@@ -40,8 +43,10 @@ var FunctionType = class extends (0, import_echo_schema.TypedObject)({
|
|
|
40
43
|
typename: "dxos.org/type/Function",
|
|
41
44
|
version: "0.1.0"
|
|
42
45
|
})({
|
|
46
|
+
name: import_echo_schema.S.optional(import_echo_schema.S.String),
|
|
43
47
|
version: import_echo_schema.S.Number,
|
|
44
48
|
// Local binding to a function name.
|
|
49
|
+
// TODO(burdon): Move binding to inner type.
|
|
45
50
|
binding: import_echo_schema.S.optional(import_echo_schema.S.String),
|
|
46
51
|
// Reference to a source script if it exists within ECHO.
|
|
47
52
|
source: import_echo_schema.S.optional((0, import_echo_schema.ref)(ScriptType))
|
|
@@ -57,4 +62,4 @@ var ScriptAction;
|
|
|
57
62
|
ScriptAction,
|
|
58
63
|
ScriptType
|
|
59
64
|
});
|
|
60
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
//# sourceMappingURL=chunk-5RBVXKXT.cjs.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,yBAAoC;AACpC,mBAAyB;AAOlB,IAAMA,aAAN,kBAAyBC,gCAAY;EAAEC,UAAU;EAAwBC,SAAS;AAAQ,CAAA,EAAG;;EAElGC,MAAMC,qBAAEC,SAASD,qBAAEE,MAAM;EACzBC,aAAaH,qBAAEC,SAASD,qBAAEE,MAAM;EAChCE,YAAQC,wBAAIC,qBAAAA;;;EAGZC,SAASP,qBAAEC,SAASD,qBAAEQ,OAAO;AAC/B,CAAA,EAAA;AAAI;AAKG,IAAMC,eAAN,kBAA2Bb,gCAAY;EAAEC,UAAU;EAA0BC,SAAS;AAAQ,CAAA,EAAG;EACtGC,MAAMC,qBAAEC,SAASD,qBAAEE,MAAM;EACzBJ,SAASE,qBAAEU;;;EAGXC,SAASX,qBAAEC,SAASD,qBAAEE,MAAM;;EAE5BE,QAAQJ,qBAAEC,aAASI,wBAAIV,UAAAA,CAAAA;AACzB,CAAA,EAAA;AAAI;;UCjBQiB,eAAAA;0CACD,GAAGC,mCAAAA,SAAsB,IAAA;GADxBD,iBAAAA,eAAAA,CAAAA,EAAAA;",
|
|
6
|
+
"names": ["ScriptType", "TypedObject", "typename", "version", "name", "S", "optional", "String", "description", "source", "ref", "TextType", "changed", "Boolean", "FunctionType", "Number", "binding", "ScriptAction", "SCRIPT_PLUGIN"]
|
|
7
|
+
}
|