@dxos/plugin-script 0.6.11-staging.e6894a4 → 0.6.12-main.15a606f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/dist/lib/browser/{ScriptEditor-YLGNCLXA.mjs → ScriptContainer-7DE7USCY.mjs} +260 -110
  2. package/dist/lib/browser/ScriptContainer-7DE7USCY.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-O4LWBX6A.mjs → chunk-CAEANETO.mjs} +2 -2
  4. package/dist/lib/browser/{chunk-O4LWBX6A.mjs.map → chunk-CAEANETO.mjs.map} +2 -2
  5. package/dist/lib/browser/{chunk-DL5XQRQM.mjs → chunk-G6FWCTGT.mjs} +7 -5
  6. package/dist/lib/browser/chunk-G6FWCTGT.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-RHEZ5LUU.mjs → chunk-G6H56WFS.mjs} +51 -2
  8. package/dist/lib/browser/{chunk-RHEZ5LUU.mjs.map → chunk-G6H56WFS.mjs.map} +4 -4
  9. package/dist/lib/browser/{chunk-JBACGDOJ.mjs → chunk-MDX7ACIK.mjs} +3 -6
  10. package/dist/lib/browser/chunk-MDX7ACIK.mjs.map +7 -0
  11. package/dist/lib/browser/edge/index.mjs +3 -1
  12. package/dist/lib/browser/index.mjs +80 -61
  13. package/dist/lib/browser/index.mjs.map +4 -4
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/meta.mjs +1 -1
  16. package/dist/lib/browser/types/index.mjs +2 -2
  17. package/dist/lib/node/ScriptContainer-J76LKPAM.cjs +667 -0
  18. package/dist/lib/node/ScriptContainer-J76LKPAM.cjs.map +7 -0
  19. package/dist/lib/node/{chunk-5RBVXKXT.cjs → chunk-2PZKJXNP.cjs} +6 -6
  20. package/dist/lib/node/{chunk-5RBVXKXT.cjs.map → chunk-2PZKJXNP.cjs.map} +2 -2
  21. package/dist/lib/node/{chunk-4GTXIELQ.cjs → chunk-ACLCRWDB.cjs} +44 -6
  22. package/dist/lib/node/chunk-ACLCRWDB.cjs.map +7 -0
  23. package/dist/lib/node/{TypescriptEditor-CRONCQSI.cjs → chunk-OJ77BZRH.cjs} +19 -8
  24. package/dist/lib/node/chunk-OJ77BZRH.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-PFH3ROEH.cjs → chunk-UZ3ZXEBF.cjs} +11 -8
  26. package/dist/lib/node/chunk-UZ3ZXEBF.cjs.map +7 -0
  27. package/dist/lib/node/edge/index.cjs +10 -8
  28. package/dist/lib/node/edge/index.cjs.map +2 -2
  29. package/dist/lib/node/index.cjs +93 -79
  30. package/dist/lib/node/index.cjs.map +4 -4
  31. package/dist/lib/node/meta.cjs +3 -3
  32. package/dist/lib/node/meta.cjs.map +1 -1
  33. package/dist/lib/node/meta.json +1 -1
  34. package/dist/lib/node/types/index.cjs +5 -5
  35. package/dist/lib/node/types/index.cjs.map +1 -1
  36. package/dist/lib/node-esm/ScriptContainer-F6ACEA63.mjs +665 -0
  37. package/dist/lib/node-esm/ScriptContainer-F6ACEA63.mjs.map +7 -0
  38. package/dist/lib/node-esm/chunk-2NX3HWPM.mjs +245 -0
  39. package/dist/lib/node-esm/chunk-2NX3HWPM.mjs.map +7 -0
  40. package/dist/lib/node-esm/chunk-7BZDZF7Z.mjs +47 -0
  41. package/dist/lib/node-esm/chunk-7BZDZF7Z.mjs.map +7 -0
  42. package/dist/lib/node-esm/chunk-LDLNTVAK.mjs +280 -0
  43. package/dist/lib/node-esm/chunk-LDLNTVAK.mjs.map +7 -0
  44. package/dist/lib/node-esm/chunk-TZ3Z4SII.mjs +20 -0
  45. package/dist/lib/node-esm/chunk-TZ3Z4SII.mjs.map +7 -0
  46. package/dist/lib/node-esm/edge/index.mjs +22 -0
  47. package/dist/lib/node-esm/index.mjs +311 -0
  48. package/dist/lib/node-esm/index.mjs.map +7 -0
  49. package/dist/lib/node-esm/meta.json +1 -0
  50. package/dist/lib/node-esm/meta.mjs +10 -0
  51. package/dist/lib/node-esm/meta.mjs.map +7 -0
  52. package/dist/lib/node-esm/types/index.mjs +13 -0
  53. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  54. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  55. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -0
  56. package/dist/types/src/components/DebugPanel/index.d.ts +2 -0
  57. package/dist/types/src/components/DebugPanel/index.d.ts.map +1 -0
  58. package/dist/types/src/components/{ScriptBlock/FrameContainer → FrameContainer}/FrameContainer.d.ts +1 -1
  59. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -0
  60. package/dist/types/src/components/FrameContainer/frame.d.ts.map +1 -0
  61. package/dist/types/src/components/FrameContainer/index.d.ts.map +1 -0
  62. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts +1 -3
  63. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts.map +1 -1
  64. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts +2 -5
  65. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/ScriptContainer.d.ts +5 -0
  67. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -0
  68. package/dist/types/src/components/ScriptEditor.d.ts +4 -5
  69. package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
  70. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts +6 -0
  71. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -0
  72. package/dist/types/src/components/ScriptSettings/index.d.ts +2 -0
  73. package/dist/types/src/components/ScriptSettings/index.d.ts.map +1 -0
  74. package/dist/types/src/components/Toolbar/Toolbar.d.ts +23 -0
  75. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
  76. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +17 -0
  77. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -0
  78. package/dist/types/src/components/Toolbar/index.d.ts +2 -0
  79. package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
  80. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +10 -0
  81. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -0
  82. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +10 -0
  83. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -0
  84. package/dist/types/src/components/TypescriptEditor/index.d.ts +2 -0
  85. package/dist/types/src/components/TypescriptEditor/index.d.ts.map +1 -0
  86. package/dist/types/src/components/index.d.ts +2 -2
  87. package/dist/types/src/components/index.d.ts.map +1 -1
  88. package/dist/types/src/edge/functions.d.ts +1 -0
  89. package/dist/types/src/edge/functions.d.ts.map +1 -1
  90. package/dist/types/src/meta.d.ts +1 -4
  91. package/dist/types/src/meta.d.ts.map +1 -1
  92. package/dist/types/src/templates/chat.d.ts +6 -0
  93. package/dist/types/src/templates/chat.d.ts.map +1 -0
  94. package/dist/types/src/templates/chess.d.ts +6 -0
  95. package/dist/types/src/templates/chess.d.ts.map +1 -0
  96. package/dist/types/src/templates/echo.d.ts +6 -0
  97. package/dist/types/src/templates/echo.d.ts.map +1 -0
  98. package/dist/types/src/templates/email.d.ts +6 -0
  99. package/dist/types/src/templates/email.d.ts.map +1 -0
  100. package/dist/types/src/templates/forex.d.ts +6 -0
  101. package/dist/types/src/templates/forex.d.ts.map +1 -0
  102. package/dist/types/src/templates.d.ts +8 -0
  103. package/dist/types/src/templates.d.ts.map +1 -0
  104. package/dist/types/src/translations.d.ts +2 -0
  105. package/dist/types/src/translations.d.ts.map +1 -1
  106. package/dist/types/src/types/script.d.ts +4 -4
  107. package/dist/types/src/types/types.d.ts +4 -3
  108. package/dist/types/src/types/types.d.ts.map +1 -1
  109. package/package.json +54 -47
  110. package/src/ScriptPlugin.tsx +21 -36
  111. package/src/bundler/bundler.test.ts +12 -2
  112. package/src/components/{DebugPanel.tsx → DebugPanel/DebugPanel.tsx} +49 -56
  113. package/src/components/DebugPanel/index.ts +5 -0
  114. package/src/components/{ScriptBlock/FrameContainer → FrameContainer}/FrameContainer.tsx +1 -1
  115. package/src/components/ScriptBlock/ScriptBlock.stories.tsx +29 -21
  116. package/src/components/ScriptBlock/ScriptBlock.tsx +10 -36
  117. package/src/components/ScriptContainer.tsx +22 -0
  118. package/src/components/ScriptEditor.tsx +46 -30
  119. package/src/components/ScriptSettings/ScriptSettings.tsx +47 -0
  120. package/src/components/ScriptSettings/index.ts +5 -0
  121. package/src/components/Toolbar/Toolbar.stories.tsx +26 -0
  122. package/src/components/Toolbar/Toolbar.tsx +180 -0
  123. package/src/components/{ScriptBlock/Splitter → Toolbar}/index.ts +1 -1
  124. package/src/components/{TypescriptEditor.stories.tsx → TypescriptEditor/TypescriptEditor.stories.tsx} +12 -36
  125. package/src/components/{TypescriptEditor.tsx → TypescriptEditor/TypescriptEditor.tsx} +14 -18
  126. package/src/components/TypescriptEditor/index.ts +5 -0
  127. package/src/components/index.ts +3 -2
  128. package/src/edge/functions.ts +1 -0
  129. package/src/meta.tsx +2 -6
  130. package/src/templates/chat.ts +102 -0
  131. package/src/templates/chess.ts +41 -0
  132. package/src/templates/echo.ts +15 -0
  133. package/src/templates/email.ts +38 -0
  134. package/src/templates/forex.ts +21 -0
  135. package/src/templates.ts +54 -0
  136. package/src/translations.ts +2 -0
  137. package/src/types/types.ts +9 -5
  138. package/dist/lib/browser/ScriptEditor-YLGNCLXA.mjs.map +0 -7
  139. package/dist/lib/browser/TypescriptEditor-XTGRVCMY.mjs +0 -9
  140. package/dist/lib/browser/chunk-DL5XQRQM.mjs.map +0 -7
  141. package/dist/lib/browser/chunk-DX5CSOBP.mjs +0 -79
  142. package/dist/lib/browser/chunk-DX5CSOBP.mjs.map +0 -7
  143. package/dist/lib/browser/chunk-JBACGDOJ.mjs.map +0 -7
  144. package/dist/lib/node/ScriptEditor-XLE33DB4.cjs +0 -527
  145. package/dist/lib/node/ScriptEditor-XLE33DB4.cjs.map +0 -7
  146. package/dist/lib/node/TypescriptEditor-CRONCQSI.cjs.map +0 -7
  147. package/dist/lib/node/chunk-4GTXIELQ.cjs.map +0 -7
  148. package/dist/lib/node/chunk-4VMNBXWU.cjs +0 -54
  149. package/dist/lib/node/chunk-4VMNBXWU.cjs.map +0 -7
  150. package/dist/lib/node/chunk-PFH3ROEH.cjs.map +0 -7
  151. package/dist/lib/node/chunk-RXI576K3.cjs +0 -112
  152. package/dist/lib/node/chunk-RXI576K3.cjs.map +0 -7
  153. package/dist/types/src/components/DebugPanel.d.ts.map +0 -1
  154. package/dist/types/src/components/ScriptBlock/FrameContainer/FrameContainer.d.ts.map +0 -1
  155. package/dist/types/src/components/ScriptBlock/FrameContainer/frame.d.ts.map +0 -1
  156. package/dist/types/src/components/ScriptBlock/FrameContainer/index.d.ts.map +0 -1
  157. package/dist/types/src/components/ScriptBlock/Splitter/Splitter.d.ts +0 -15
  158. package/dist/types/src/components/ScriptBlock/Splitter/Splitter.d.ts.map +0 -1
  159. package/dist/types/src/components/ScriptBlock/Splitter/Splitter.stories.d.ts +0 -13
  160. package/dist/types/src/components/ScriptBlock/Splitter/Splitter.stories.d.ts.map +0 -1
  161. package/dist/types/src/components/ScriptBlock/Splitter/index.d.ts +0 -2
  162. package/dist/types/src/components/ScriptBlock/Splitter/index.d.ts.map +0 -1
  163. package/dist/types/src/components/Toolbar.d.ts +0 -13
  164. package/dist/types/src/components/Toolbar.d.ts.map +0 -1
  165. package/dist/types/src/components/Toolbar.stories.d.ts +0 -16
  166. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  167. package/dist/types/src/components/TypescriptEditor.d.ts +0 -12
  168. package/dist/types/src/components/TypescriptEditor.d.ts.map +0 -1
  169. package/dist/types/src/components/TypescriptEditor.stories.d.ts +0 -13
  170. package/dist/types/src/components/TypescriptEditor.stories.d.ts.map +0 -1
  171. package/src/components/ScriptBlock/Splitter/Splitter.stories.tsx +0 -37
  172. package/src/components/ScriptBlock/Splitter/Splitter.tsx +0 -52
  173. package/src/components/Toolbar.stories.tsx +0 -19
  174. package/src/components/Toolbar.tsx +0 -146
  175. /package/dist/lib/{browser/TypescriptEditor-XTGRVCMY.mjs.map → node-esm/edge/index.mjs.map} +0 -0
  176. /package/dist/types/src/components/{DebugPanel.d.ts → DebugPanel/DebugPanel.d.ts} +0 -0
  177. /package/dist/types/src/components/{ScriptBlock/FrameContainer → FrameContainer}/frame.d.ts +0 -0
  178. /package/dist/types/src/components/{ScriptBlock/FrameContainer → FrameContainer}/index.d.ts +0 -0
  179. /package/src/components/{ScriptBlock/FrameContainer → FrameContainer}/frame.html +0 -0
  180. /package/src/components/{ScriptBlock/FrameContainer → FrameContainer}/frame.tsx +0 -0
  181. /package/src/components/{ScriptBlock/FrameContainer → FrameContainer}/index.ts +0 -0
@@ -0,0 +1,667 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var ScriptContainer_J76LKPAM_exports = {};
30
+ __export(ScriptContainer_J76LKPAM_exports, {
31
+ default: () => ScriptContainer_default
32
+ });
33
+ module.exports = __toCommonJS(ScriptContainer_J76LKPAM_exports);
34
+ var import_chunk_UZ3ZXEBF = require("./chunk-UZ3ZXEBF.cjs");
35
+ var import_chunk_ACLCRWDB = require("./chunk-ACLCRWDB.cjs");
36
+ var import_chunk_2PZKJXNP = require("./chunk-2PZKJXNP.cjs");
37
+ var import_chunk_OJ77BZRH = require("./chunk-OJ77BZRH.cjs");
38
+ var import_react = __toESM(require("react"));
39
+ var import_echo = require("@dxos/react-client/echo");
40
+ var import_react_ui_attention = require("@dxos/react-ui-attention");
41
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
42
+ var import_prettier = require("prettier");
43
+ var import_estree = __toESM(require("prettier/plugins/estree"));
44
+ var import_typescript = __toESM(require("prettier/plugins/typescript"));
45
+ var import_react2 = __toESM(require("react"));
46
+ var import_log = require("@dxos/log");
47
+ var import_react_client = require("@dxos/react-client");
48
+ var import_echo2 = require("@dxos/react-client/echo");
49
+ var import_halo = require("@dxos/react-client/halo");
50
+ var import_react_ui = require("@dxos/react-ui");
51
+ var import_react_ui_editor = require("@dxos/react-ui-editor");
52
+ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
53
+ var import_react3 = __toESM(require("react"));
54
+ var import_log2 = require("@dxos/log");
55
+ var import_react_ui2 = require("@dxos/react-ui");
56
+ var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
57
+ var import_react_ui_theme3 = require("@dxos/react-ui-theme");
58
+ var import_react4 = __toESM(require("react"));
59
+ var import_react_ui3 = require("@dxos/react-ui");
60
+ var import_lang_javascript = require("@codemirror/lang-javascript");
61
+ var import_codemirror_ts = require("@valtown/codemirror-ts");
62
+ var import_react5 = __toESM(require("react"));
63
+ var import_react_ui4 = require("@dxos/react-ui");
64
+ var import_react_ui_editor2 = require("@dxos/react-ui-editor");
65
+ var import_util = require("@dxos/util");
66
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx";
67
+ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }) => {
68
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_OJ77BZRH.SCRIPT_PLUGIN);
69
+ const bindingInputRef = (0, import_react3.useRef)(null);
70
+ const [binding, setBinding] = (0, import_react_ui2.useControlledValue)(_binding ?? "");
71
+ const handleBlur = () => {
72
+ onBindingChange?.(binding);
73
+ };
74
+ const inputRef = (0, import_react3.useRef)(null);
75
+ const [input, setInput] = (0, import_react3.useState)("");
76
+ const [result, setResult] = (0, import_react3.useState)("");
77
+ const [state, setState] = (0, import_react3.useState)(null);
78
+ const [history, setHistory] = (0, import_react3.useState)([]);
79
+ const scrollerRef = (0, import_react3.useRef)(null);
80
+ const handleScroll = () => {
81
+ if (scrollerRef.current) {
82
+ scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;
83
+ }
84
+ };
85
+ const controller = (0, import_react3.useRef)();
86
+ (0, import_react3.useEffect)(() => {
87
+ return () => {
88
+ handleStop();
89
+ };
90
+ }, []);
91
+ const handleStop = () => {
92
+ controller.current?.abort("stop");
93
+ controller.current = void 0;
94
+ };
95
+ const handleClear = () => {
96
+ handleStop();
97
+ setInput("");
98
+ setResult("");
99
+ setHistory([]);
100
+ inputRef.current?.focus();
101
+ };
102
+ const handleResponse = ({ text, data, error } = {}) => {
103
+ controller.current = void 0;
104
+ setHistory((history2) => [
105
+ ...history2,
106
+ {
107
+ type: "response",
108
+ text,
109
+ data,
110
+ error
111
+ }
112
+ ]);
113
+ setResult("");
114
+ setState(null);
115
+ handleScroll();
116
+ };
117
+ const handleRequest = async (input2) => {
118
+ try {
119
+ setState("pending");
120
+ let data = null;
121
+ if (input2.charAt(0) === "{") {
122
+ try {
123
+ const validJsonString = input2.replace(/'/g, '"').replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3');
124
+ data = JSON.parse(validJsonString);
125
+ input2 = JSON.stringify(data, null, 2);
126
+ } catch (err) {
127
+ inputRef.current?.focus();
128
+ return;
129
+ }
130
+ }
131
+ setInput("");
132
+ setResult("");
133
+ setHistory((history2) => [
134
+ ...history2,
135
+ {
136
+ type: "request",
137
+ text: input2
138
+ }
139
+ ]);
140
+ setTimeout(() => {
141
+ handleScroll();
142
+ });
143
+ controller.current = new AbortController();
144
+ const response = await fetch(functionUrl, {
145
+ signal: controller.current.signal,
146
+ method: "POST",
147
+ body: input2,
148
+ headers: {
149
+ "Content-Type": data ? "application/json" : "text/plain"
150
+ }
151
+ });
152
+ if (!response.ok) {
153
+ const text2 = await response.text();
154
+ handleResponse({
155
+ error: new Error(text2 || response.statusText || String(response.status))
156
+ });
157
+ return;
158
+ }
159
+ const contentType = response.headers.get("content-type");
160
+ if (contentType === "application/json") {
161
+ const data2 = await response.json();
162
+ handleResponse({
163
+ data: data2
164
+ });
165
+ return;
166
+ }
167
+ setState("responding");
168
+ let text = "";
169
+ const reader = response.body.getReader();
170
+ const pump = async ({ done, value }) => {
171
+ text = text + new TextDecoder().decode(value);
172
+ if (!controller.current || done) {
173
+ handleResponse({
174
+ text
175
+ });
176
+ return;
177
+ }
178
+ setResult(text);
179
+ setTimeout(() => {
180
+ handleScroll();
181
+ });
182
+ return reader.read().then(pump);
183
+ };
184
+ void reader.read().then(pump).catch((err) => {
185
+ if (err.name !== "AbortError") {
186
+ import_log2.log.catch(err, void 0, {
187
+ F: __dxlog_file,
188
+ L: 163,
189
+ S: void 0,
190
+ C: (f, a) => f(...a)
191
+ });
192
+ }
193
+ });
194
+ } catch (err) {
195
+ if (err !== "stop") {
196
+ const error = err instanceof Error ? err : new Error(err);
197
+ handleResponse({
198
+ error
199
+ });
200
+ import_log2.log.catch(err, void 0, {
201
+ F: __dxlog_file,
202
+ L: 170,
203
+ S: void 0,
204
+ C: (f, a) => f(...a)
205
+ });
206
+ } else {
207
+ handleResponse();
208
+ }
209
+ }
210
+ };
211
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.DensityProvider, {
212
+ density: "fine"
213
+ }, /* @__PURE__ */ import_react3.default.createElement("div", {
214
+ className: (0, import_react_ui_theme3.mx)("flex flex-col h-full overflow-hidden", classNames)
215
+ }, /* @__PURE__ */ import_react3.default.createElement("div", {
216
+ ref: scrollerRef,
217
+ className: "flex flex-col gap-6 h-full p-4 overflow-x-hidden overflow-y-auto"
218
+ }, /* @__PURE__ */ import_react3.default.createElement(MessageThread, {
219
+ state,
220
+ result,
221
+ history
222
+ })), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Root, {
223
+ classNames: "p-2"
224
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Input.TextInput, {
225
+ ref: inputRef,
226
+ autoFocus: true,
227
+ placeholder: t("function request placeholder"),
228
+ value: input,
229
+ onChange: (ev) => setInput(ev.target.value),
230
+ onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
231
+ })), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Input.TextInput, {
232
+ ref: bindingInputRef,
233
+ classNames: "!w-[10rem]",
234
+ placeholder: t("binding placeholder"),
235
+ value: binding,
236
+ onChange: (ev) => setBinding(ev.target.value.toUpperCase()),
237
+ onBlur: handleBlur
238
+ })), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Button, {
239
+ onClick: () => handleRequest(input)
240
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
241
+ icon: "ph--play--regular",
242
+ size: 4
243
+ })), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Button, {
244
+ onClick: () => state ? handleStop() : handleClear()
245
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
246
+ icon: state ? "ph--stop--regular" : "ph--trash--regular",
247
+ size: 4
248
+ })))));
249
+ };
250
+ var MessageThread = ({ state, result, history }) => {
251
+ return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, history.map((message, i) => /* @__PURE__ */ import_react3.default.createElement("div", {
252
+ key: i,
253
+ className: "grid grid-cols-[3rem_1fr_3rem]"
254
+ }, /* @__PURE__ */ import_react3.default.createElement("div", {
255
+ className: "p-1"
256
+ }, message.type === "response" && /* @__PURE__ */ import_react3.default.createElement(RobotAvatar, null)), /* @__PURE__ */ import_react3.default.createElement("div", {
257
+ className: "overflow-auto"
258
+ }, /* @__PURE__ */ import_react3.default.createElement(MessageItem, {
259
+ message
260
+ })))), result?.length > 0 && /* @__PURE__ */ import_react3.default.createElement("div", {
261
+ className: "grid grid-cols-[3rem_1fr_3rem]"
262
+ }, /* @__PURE__ */ import_react3.default.createElement("div", {
263
+ className: "p-1"
264
+ }, state === "pending" && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
265
+ icon: "ph--spinner--regular",
266
+ size: 6,
267
+ classNames: "animate-spin"
268
+ }) || /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
269
+ icon: "ph--robot--regular",
270
+ size: 6,
271
+ classNames: "animate-[pulse_1s_ease-in-out_infinite]"
272
+ })), /* @__PURE__ */ import_react3.default.createElement("div", {
273
+ className: "overflow-auto"
274
+ }, /* @__PURE__ */ import_react3.default.createElement(MessageItem, {
275
+ message: {
276
+ type: "response",
277
+ text: result
278
+ }
279
+ }))));
280
+ };
281
+ var MessageItem = ({ classNames, message }) => {
282
+ const { type, text, data, error } = message;
283
+ const wrapper = "p-1 px-2 rounded-lg bg-hoverSurface overflow-auto";
284
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
285
+ className: (0, import_react_ui_theme3.mx)("flex", type === "request" ? "ml-[8rem] justify-end" : "mr-[8rem]", classNames)
286
+ }, error && /* @__PURE__ */ import_react3.default.createElement("div", {
287
+ className: (0, import_react_ui_theme3.mx)(wrapper, "whitespace-pre text-error")
288
+ }, String(error)), text !== void 0 && /* @__PURE__ */ import_react3.default.createElement("div", {
289
+ className: (0, import_react_ui_theme3.mx)(wrapper, type === "request" && "bg-primary-400 dark:bg-primary-600")
290
+ }, text || "\xD8"), data && /* @__PURE__ */ import_react3.default.createElement(import_react_ui_syntax_highlighter.SyntaxHighlighter, {
291
+ language: "json",
292
+ className: (0, import_react_ui_theme3.mx)(wrapper, "px-8 py-2 text-xs")
293
+ }, JSON.stringify(data, null, 2)));
294
+ };
295
+ var RobotAvatar = () => /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Avatar.Root, {
296
+ size: 6,
297
+ variant: "circle"
298
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Avatar.Frame, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Avatar.Icon, {
299
+ icon: "ph--robot--regular"
300
+ })));
301
+ var Toolbar2 = ({ classNames, deployed, error, functionUrl, view, templates: templates2, onDeploy, onFormat, onViewChange, onTemplateSelect }) => {
302
+ const { t } = (0, import_react_ui3.useTranslation)(import_chunk_OJ77BZRH.SCRIPT_PLUGIN);
303
+ const [pending, setPending] = (0, import_react4.useState)(false);
304
+ const handleCopyLink = async () => {
305
+ if (!functionUrl) {
306
+ return;
307
+ }
308
+ await navigator.clipboard.writeText(functionUrl);
309
+ };
310
+ const handleDeploy = async () => {
311
+ if (!pending) {
312
+ setPending(true);
313
+ await onDeploy?.();
314
+ setPending(false);
315
+ }
316
+ };
317
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.DensityProvider, {
318
+ density: "fine"
319
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.ElevationProvider, {
320
+ elevation: "chrome"
321
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Root, {
322
+ classNames: [
323
+ "p-1",
324
+ classNames
325
+ ],
326
+ style: {
327
+ contain: "layout"
328
+ }
329
+ }, templates2 && /* @__PURE__ */ import_react4.default.createElement(TemplateSelect, {
330
+ templates: templates2,
331
+ onTemplateSelect
332
+ }), onFormat && /* @__PURE__ */ import_react4.default.createElement(ToolbarIconButton, {
333
+ icon: "ph--magic-wand--regular",
334
+ text: t("format label"),
335
+ onClick: onFormat
336
+ }), /* @__PURE__ */ import_react4.default.createElement("div", {
337
+ role: "separator",
338
+ className: "grow"
339
+ }), error ? /* @__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_react_ui3.Icon, {
340
+ icon: "ph--warning-circle--regular",
341
+ size: 4
342
+ })), /* @__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))) : null, functionUrl && deployed && /* @__PURE__ */ import_react4.default.createElement(ToolbarIconButton, {
343
+ icon: "ph--link--regular",
344
+ text: t("copy link label"),
345
+ onClick: handleCopyLink
346
+ }), onDeploy && /* @__PURE__ */ import_react4.default.createElement(ToolbarIconButton, {
347
+ icon: pending ? "ph--spinner-gap--regular" : "ph--cloud-arrow-up--regular",
348
+ classNames: [
349
+ pending && "animate-spin"
350
+ ],
351
+ text: pending ? t("pending label") : t("deploy label"),
352
+ onClick: handleDeploy
353
+ }), /* @__PURE__ */ import_react4.default.createElement(ViewSelector, {
354
+ view,
355
+ onViewChange
356
+ }))));
357
+ };
358
+ var ToolbarIconButton = ({ icon, text, classNames, disabled, onClick }) => {
359
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, {
360
+ asChild: true
361
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Button, {
362
+ variant: "ghost",
363
+ disabled,
364
+ onClick
365
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
366
+ icon,
367
+ size: 4,
368
+ classNames
369
+ }))), /* @__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), text)));
370
+ };
371
+ var TemplateSelect = ({ templates: templates2 = [], onTemplateSelect }) => {
372
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Select.Root, {
373
+ value: "",
374
+ onValueChange: onTemplateSelect
375
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Select.TriggerButton, null), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Select.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Select.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Select.Viewport, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Select.Option, {
376
+ value: ""
377
+ }, "Template"), templates2.map(({ id, name }) => /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Select.Option, {
378
+ key: id,
379
+ value: id
380
+ }, name))))));
381
+ };
382
+ var ViewSelector = ({ view, onViewChange }) => {
383
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.ToggleGroup, {
384
+ type: "single",
385
+ value: view,
386
+ onValueChange: (value) => onViewChange?.(value)
387
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.ToggleGroupItem, {
388
+ value: "editor",
389
+ classNames: "bg-transparent text-subdued"
390
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
391
+ icon: "ph--code--regular",
392
+ size: 4
393
+ })), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.ToggleGroupItem, {
394
+ value: "split",
395
+ classNames: "bg-transparent text-subdued"
396
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
397
+ icon: "ph--square-split-vertical--regular",
398
+ size: 4
399
+ })), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.ToggleGroupItem, {
400
+ value: "preview",
401
+ classNames: "bg-transparent text-subdued"
402
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
403
+ icon: "ph--eye--regular",
404
+ size: 4
405
+ })));
406
+ };
407
+ var TypescriptEditor = ({ id, env, className, initialValue, extensions, scrollTo, selection }) => {
408
+ const { themeMode } = (0, import_react_ui4.useThemeContext)();
409
+ const { parentRef, focusAttributes } = (0, import_react_ui_editor2.useTextEditor)(() => ({
410
+ id,
411
+ initialValue,
412
+ extensions: [
413
+ extensions,
414
+ (0, import_react_ui_editor2.createBasicExtensions)({
415
+ highlightActiveLine: true,
416
+ indentWithTab: true,
417
+ lineNumbers: true,
418
+ lineWrapping: false,
419
+ scrollPastEnd: true
420
+ }),
421
+ (0, import_react_ui_editor2.createThemeExtensions)({
422
+ themeMode,
423
+ syntaxHighlighting: true,
424
+ slots: {
425
+ content: {
426
+ className: import_react_ui_editor2.editorFullWidth
427
+ }
428
+ }
429
+ }),
430
+ import_react_ui_editor2.editorGutter,
431
+ // TODO(burdon): Factor out.
432
+ [
433
+ import_react_ui_editor2.editorMonospace,
434
+ (0, import_lang_javascript.javascript)({
435
+ typescript: true
436
+ }),
437
+ // https://github.com/val-town/codemirror-ts
438
+ (0, import_react_ui_editor2.autocomplete)({
439
+ override: env ? [
440
+ (0, import_codemirror_ts.tsAutocomplete)()
441
+ ] : []
442
+ }),
443
+ env ? [
444
+ import_codemirror_ts.tsFacet.of({
445
+ env,
446
+ path: `/src/${id}.ts`
447
+ }),
448
+ (0, import_codemirror_ts.tsSync)(),
449
+ (0, import_codemirror_ts.tsLinter)(),
450
+ (0, import_codemirror_ts.tsHover)()
451
+ ] : [],
452
+ import_react_ui_editor2.InputModeExtensions.vscode
453
+ ]
454
+ ].filter(import_util.nonNullable),
455
+ selection,
456
+ scrollTo
457
+ }), [
458
+ id,
459
+ initialValue,
460
+ extensions,
461
+ themeMode,
462
+ selection,
463
+ scrollTo
464
+ ]);
465
+ return /* @__PURE__ */ import_react5.default.createElement("div", {
466
+ ref: parentRef,
467
+ className,
468
+ ...focusAttributes
469
+ });
470
+ };
471
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx";
472
+ var ScriptEditor = ({ classNames, script, env }) => {
473
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_OJ77BZRH.SCRIPT_PLUGIN);
474
+ const client = (0, import_react_client.useClient)();
475
+ const identity = (0, import_halo.useIdentity)();
476
+ const space = (0, import_echo2.getSpace)(script);
477
+ const [fn] = (0, import_echo2.useQuery)(space, import_echo2.Filter.schema(import_chunk_2PZKJXNP.FunctionType, (fn2) => fn2.source === script));
478
+ const extensions = (0, import_react2.useMemo)(() => [
479
+ (0, import_react_ui_editor.listener)({
480
+ onChange: (text) => {
481
+ if (script.source && script.source?.content !== text) {
482
+ script.changed = true;
483
+ }
484
+ }
485
+ }),
486
+ (0, import_react_ui_editor.createDataExtensions)({
487
+ id: script.id,
488
+ text: script.source && (0, import_echo2.createDocAccessor)(script.source, [
489
+ "content"
490
+ ]),
491
+ space,
492
+ identity
493
+ })
494
+ ], [
495
+ script,
496
+ script.source,
497
+ space,
498
+ identity
499
+ ]);
500
+ const [view, setView] = (0, import_react2.useState)("editor");
501
+ const initialValue = (0, import_react2.useMemo)(() => script.source?.content, [
502
+ script.source
503
+ ]);
504
+ const existingFunctionUrl = fn && (0, import_chunk_UZ3ZXEBF.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
505
+ const [error, setError] = (0, import_react2.useState)();
506
+ const handleBindingChange = (0, import_react2.useCallback)((binding) => {
507
+ fn.binding = binding;
508
+ }, [
509
+ fn
510
+ ]);
511
+ const handleFormat = (0, import_react2.useCallback)(async () => {
512
+ if (!script.source) {
513
+ return;
514
+ }
515
+ try {
516
+ script.source.content = await (0, import_prettier.format)(script.source.content, {
517
+ parser: "typescript",
518
+ plugins: [
519
+ import_estree.default,
520
+ import_typescript.default
521
+ ],
522
+ semi: true,
523
+ singleQuote: true
524
+ });
525
+ } catch (err) {
526
+ import_log.log.catch(err, void 0, {
527
+ F: __dxlog_file2,
528
+ L: 94,
529
+ S: void 0,
530
+ C: (f, a) => f(...a)
531
+ });
532
+ }
533
+ }, [
534
+ script.source
535
+ ]);
536
+ const handleTemplateChange = (id) => {
537
+ const template = import_chunk_ACLCRWDB.templates.find((template2) => template2.id === id);
538
+ if (template) {
539
+ script.name = template.name;
540
+ script.source.content = template.source;
541
+ const metaKeys = (0, import_echo2.getMeta)(script).keys;
542
+ const oldPresetIndex = metaKeys.findIndex((key) => key.source === import_chunk_UZ3ZXEBF.USERFUNCTIONS_PRESET_META_KEY);
543
+ if (oldPresetIndex >= 0) {
544
+ metaKeys.splice(oldPresetIndex, 1);
545
+ }
546
+ if (template.presetId) {
547
+ metaKeys.push({
548
+ source: import_chunk_UZ3ZXEBF.USERFUNCTIONS_PRESET_META_KEY,
549
+ id: template.presetId
550
+ });
551
+ }
552
+ }
553
+ };
554
+ const handleDeploy = (0, import_react2.useCallback)(async () => {
555
+ if (!script.source || !identity || !space) {
556
+ return;
557
+ }
558
+ setError(void 0);
559
+ try {
560
+ const existingFunctionId = existingFunctionUrl?.split("/").at(-1);
561
+ const ownerDid = existingFunctionUrl?.split("/").at(-2) ?? (0, import_chunk_UZ3ZXEBF.publicKeyToDid)(identity.identityKey);
562
+ const bundler = new import_chunk_ACLCRWDB.Bundler({
563
+ platform: "browser",
564
+ sandboxedModules: [],
565
+ remoteModules: {}
566
+ });
567
+ const buildResult = await bundler.bundle(script.source.content);
568
+ if (buildResult.error || !buildResult.bundle) {
569
+ throw buildResult.error;
570
+ }
571
+ const { result, functionId, functionVersionNumber, errorMessage } = await (0, import_chunk_UZ3ZXEBF.uploadWorkerFunction)({
572
+ clientConfig: client.config,
573
+ halo: client.halo,
574
+ ownerDid,
575
+ functionId: existingFunctionId,
576
+ source: buildResult.bundle
577
+ });
578
+ if (result !== "success" || functionId === void 0 || functionVersionNumber === void 0) {
579
+ throw new Error(errorMessage);
580
+ }
581
+ import_log.log.info("function uploaded", {
582
+ functionId,
583
+ functionVersionNumber
584
+ }, {
585
+ F: __dxlog_file2,
586
+ L: 142,
587
+ S: void 0,
588
+ C: (f, a) => f(...a)
589
+ });
590
+ if (fn) {
591
+ fn.version = functionVersionNumber;
592
+ }
593
+ const deployedFunction = fn ?? space.db.add((0, import_echo2.create)(import_chunk_2PZKJXNP.FunctionType, {
594
+ version: functionVersionNumber,
595
+ source: script
596
+ }));
597
+ const meta = (0, import_echo2.getMeta)(deployedFunction);
598
+ script.changed = false;
599
+ (0, import_chunk_UZ3ZXEBF.setUserFunctionUrlInMetadata)(meta, `/${ownerDid}/${functionId}`);
600
+ setView("split");
601
+ } catch (err) {
602
+ import_log.log.catch(err, void 0, {
603
+ F: __dxlog_file2,
604
+ L: 154,
605
+ S: void 0,
606
+ C: (f, a) => f(...a)
607
+ });
608
+ setError(t("upload failed label"));
609
+ }
610
+ }, [
611
+ fn,
612
+ existingFunctionUrl,
613
+ script,
614
+ script.name,
615
+ script.source
616
+ ]);
617
+ const functionUrl = (0, import_react2.useMemo)(() => {
618
+ if (!existingFunctionUrl) {
619
+ return;
620
+ }
621
+ const baseUrl = new URL("functions/", client.config.values.runtime?.services?.edge?.url);
622
+ const relativeUrl = existingFunctionUrl.replace(/^\//, "");
623
+ const url = new URL(`./${relativeUrl}`, baseUrl.toString());
624
+ space && url.searchParams.set("spaceId", space.id);
625
+ url.protocol = "https";
626
+ return url.toString();
627
+ }, [
628
+ existingFunctionUrl,
629
+ space
630
+ ]);
631
+ return /* @__PURE__ */ import_react2.default.createElement("div", {
632
+ role: "none",
633
+ className: (0, import_react_ui_theme2.mx)("flex flex-col w-full overflow-hidden divide-y divide-separator", classNames)
634
+ }, /* @__PURE__ */ import_react2.default.createElement(Toolbar2, {
635
+ deployed: Boolean(existingFunctionUrl) && !script.changed,
636
+ functionUrl,
637
+ error,
638
+ view,
639
+ templates: import_chunk_ACLCRWDB.templates,
640
+ onDeploy: handleDeploy,
641
+ onFormat: handleFormat,
642
+ onViewChange: setView,
643
+ onTemplateSelect: handleTemplateChange
644
+ }), view !== "preview" && /* @__PURE__ */ import_react2.default.createElement(TypescriptEditor, {
645
+ id: script.id,
646
+ env,
647
+ initialValue,
648
+ extensions,
649
+ className: "flex is-full bs-full overflow-hidden ch-focus-ring-inset-over-all"
650
+ }), view !== "editor" && /* @__PURE__ */ import_react2.default.createElement(DebugPanel, {
651
+ functionUrl,
652
+ binding: fn?.binding,
653
+ onBindingChange: handleBindingChange
654
+ }));
655
+ };
656
+ var ScriptContainer = ({ script, ...props }) => {
657
+ const hasAttention = (0, import_react_ui_attention.useHasAttention)((0, import_echo.fullyQualifiedId)(script));
658
+ return /* @__PURE__ */ import_react.default.createElement("div", {
659
+ role: "none",
660
+ className: (0, import_react_ui_theme.mx)("flex row-span-2 w-full overflow-hidden", hasAttention && "attention-surface")
661
+ }, /* @__PURE__ */ import_react.default.createElement(ScriptEditor, {
662
+ ...props,
663
+ script
664
+ }));
665
+ };
666
+ var ScriptContainer_default = ScriptContainer;
667
+ //# sourceMappingURL=ScriptContainer-J76LKPAM.cjs.map