@dxos/plugin-script 0.6.14-staging.9e90729 → 0.6.14-staging.c117501

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 (105) hide show
  1. package/dist/lib/browser/{AutomationPanel-MDPZ5WAC.mjs → AutomationPanel-F2SAN67R.mjs} +5 -5
  2. package/dist/lib/browser/{ScriptContainer-B3CPWXRE.mjs → ScriptContainer-F2DFCOHF.mjs} +24 -21
  3. package/dist/lib/browser/ScriptContainer-F2DFCOHF.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-G6H56WFS.mjs → chunk-4UTRJLQ3.mjs} +11 -3
  5. package/dist/lib/browser/chunk-4UTRJLQ3.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-KHNN3F7J.mjs → chunk-5GGRYRS4.mjs} +5 -5
  7. package/dist/lib/browser/{chunk-KHNN3F7J.mjs.map → chunk-5GGRYRS4.mjs.map} +2 -2
  8. package/dist/lib/browser/{chunk-SGQHRB4P.mjs → chunk-C7VBULMK.mjs} +4 -3
  9. package/dist/lib/browser/{chunk-SGQHRB4P.mjs.map → chunk-C7VBULMK.mjs.map} +3 -3
  10. package/dist/lib/browser/{chunk-KXVQPS4Y.mjs → chunk-JBXEMQ6S.mjs} +5 -4
  11. package/dist/lib/browser/chunk-JBXEMQ6S.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-G66MXS4T.mjs → chunk-NCZUJKJE.mjs} +6 -18
  13. package/dist/lib/browser/chunk-NCZUJKJE.mjs.map +7 -0
  14. package/dist/lib/browser/edge/index.mjs +1 -1
  15. package/dist/lib/browser/index.mjs +106 -13
  16. package/dist/lib/browser/index.mjs.map +4 -4
  17. package/dist/lib/browser/meta.json +1 -1
  18. package/dist/lib/browser/meta.mjs +1 -1
  19. package/dist/lib/browser/types/index.mjs +2 -2
  20. package/dist/lib/node/{AutomationPanel-SANUE5X4.cjs → AutomationPanel-M5UHEMPG.cjs} +15 -15
  21. package/dist/lib/node/{ScriptContainer-BV7HMUY5.cjs → ScriptContainer-X76C7OD2.cjs} +40 -37
  22. package/dist/lib/node/ScriptContainer-X76C7OD2.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-EJC55SDD.cjs → chunk-6LYX73ZT.cjs} +7 -6
  24. package/dist/lib/node/chunk-6LYX73ZT.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-JWKMTYYH.cjs → chunk-BJ4WIWCP.cjs} +9 -21
  26. package/dist/lib/node/chunk-BJ4WIWCP.cjs.map +7 -0
  27. package/dist/lib/node/{chunk-ACLCRWDB.cjs → chunk-WPP65EYS.cjs} +14 -6
  28. package/dist/lib/node/chunk-WPP65EYS.cjs.map +7 -0
  29. package/dist/lib/node/{chunk-FY5KKL5N.cjs → chunk-XS6GEYYH.cjs} +8 -8
  30. package/dist/lib/node/{chunk-FY5KKL5N.cjs.map → chunk-XS6GEYYH.cjs.map} +2 -2
  31. package/dist/lib/node/{chunk-25PQE7FL.cjs → chunk-ZTUFXDTH.cjs} +8 -7
  32. package/dist/lib/node/chunk-ZTUFXDTH.cjs.map +7 -0
  33. package/dist/lib/node/edge/index.cjs +10 -10
  34. package/dist/lib/node/edge/index.cjs.map +1 -1
  35. package/dist/lib/node/index.cjs +122 -33
  36. package/dist/lib/node/index.cjs.map +4 -4
  37. package/dist/lib/node/meta.cjs +3 -3
  38. package/dist/lib/node/meta.cjs.map +1 -1
  39. package/dist/lib/node/meta.json +1 -1
  40. package/dist/lib/node/types/index.cjs +5 -5
  41. package/dist/lib/node/types/index.cjs.map +1 -1
  42. package/dist/lib/node-esm/{AutomationPanel-H2IKE53E.mjs → AutomationPanel-JQ2NLXYS.mjs} +5 -5
  43. package/dist/lib/node-esm/{ScriptContainer-HSIOGVP3.mjs → ScriptContainer-KXUHDS5D.mjs} +24 -21
  44. package/dist/lib/node-esm/ScriptContainer-KXUHDS5D.mjs.map +7 -0
  45. package/dist/lib/node-esm/{chunk-7EDYDVQH.mjs → chunk-3QSMHAWD.mjs} +5 -4
  46. package/dist/lib/node-esm/chunk-3QSMHAWD.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-LDLNTVAK.mjs → chunk-4SRPREUK.mjs} +11 -3
  48. package/dist/lib/node-esm/chunk-4SRPREUK.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-3QHVR4VV.mjs → chunk-DXWSRDEN.mjs} +6 -18
  50. package/dist/lib/node-esm/chunk-DXWSRDEN.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-GO7HYFM5.mjs → chunk-SLTZMY34.mjs} +4 -3
  52. package/dist/lib/node-esm/{chunk-GO7HYFM5.mjs.map → chunk-SLTZMY34.mjs.map} +3 -3
  53. package/dist/lib/node-esm/{chunk-QMTTZYLF.mjs → chunk-V74XKPLC.mjs} +5 -5
  54. package/dist/lib/node-esm/{chunk-QMTTZYLF.mjs.map → chunk-V74XKPLC.mjs.map} +2 -2
  55. package/dist/lib/node-esm/edge/index.mjs +1 -1
  56. package/dist/lib/node-esm/index.mjs +106 -13
  57. package/dist/lib/node-esm/index.mjs.map +4 -4
  58. package/dist/lib/node-esm/meta.json +1 -1
  59. package/dist/lib/node-esm/meta.mjs +1 -1
  60. package/dist/lib/node-esm/types/index.mjs +2 -2
  61. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  62. package/dist/types/src/bundler/bundler.d.ts.map +1 -1
  63. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +1 -4
  64. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
  65. package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
  66. package/dist/types/src/components/ScriptSettingsPanel.d.ts +7 -0
  67. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -0
  68. package/dist/types/src/components/index.d.ts +1 -0
  69. package/dist/types/src/components/index.d.ts.map +1 -1
  70. package/dist/types/src/edge/functions.d.ts +4 -1
  71. package/dist/types/src/edge/functions.d.ts.map +1 -1
  72. package/dist/types/src/meta.d.ts +2 -1
  73. package/dist/types/src/meta.d.ts.map +1 -1
  74. package/dist/types/src/translations.d.ts +5 -0
  75. package/dist/types/src/translations.d.ts.map +1 -1
  76. package/dist/types/src/types/script.d.ts +3 -1
  77. package/dist/types/src/types/script.d.ts.map +1 -1
  78. package/package.json +36 -36
  79. package/src/ScriptPlugin.tsx +10 -2
  80. package/src/bundler/bundler.ts +4 -0
  81. package/src/components/DebugPanel/DebugPanel.tsx +2 -29
  82. package/src/components/ScriptEditor.tsx +10 -18
  83. package/src/components/ScriptSettings/ScriptSettings.tsx +3 -3
  84. package/src/components/ScriptSettingsPanel.tsx +105 -0
  85. package/src/components/index.ts +1 -0
  86. package/src/edge/functions.ts +4 -1
  87. package/src/meta.ts +2 -1
  88. package/src/translations.ts +5 -0
  89. package/src/types/script.ts +2 -1
  90. package/dist/lib/browser/ScriptContainer-B3CPWXRE.mjs.map +0 -7
  91. package/dist/lib/browser/chunk-G66MXS4T.mjs.map +0 -7
  92. package/dist/lib/browser/chunk-G6H56WFS.mjs.map +0 -7
  93. package/dist/lib/browser/chunk-KXVQPS4Y.mjs.map +0 -7
  94. package/dist/lib/node/ScriptContainer-BV7HMUY5.cjs.map +0 -7
  95. package/dist/lib/node/chunk-25PQE7FL.cjs.map +0 -7
  96. package/dist/lib/node/chunk-ACLCRWDB.cjs.map +0 -7
  97. package/dist/lib/node/chunk-EJC55SDD.cjs.map +0 -7
  98. package/dist/lib/node/chunk-JWKMTYYH.cjs.map +0 -7
  99. package/dist/lib/node-esm/ScriptContainer-HSIOGVP3.mjs.map +0 -7
  100. package/dist/lib/node-esm/chunk-3QHVR4VV.mjs.map +0 -7
  101. package/dist/lib/node-esm/chunk-7EDYDVQH.mjs.map +0 -7
  102. package/dist/lib/node-esm/chunk-LDLNTVAK.mjs.map +0 -7
  103. /package/dist/lib/browser/{AutomationPanel-MDPZ5WAC.mjs.map → AutomationPanel-F2SAN67R.mjs.map} +0 -0
  104. /package/dist/lib/node/{AutomationPanel-SANUE5X4.cjs.map → AutomationPanel-M5UHEMPG.cjs.map} +0 -0
  105. /package/dist/lib/node-esm/{AutomationPanel-H2IKE53E.mjs.map → AutomationPanel-JQ2NLXYS.mjs.map} +0 -0
@@ -2,8 +2,8 @@ import {
2
2
  FunctionType,
3
3
  ScriptAction,
4
4
  ScriptType
5
- } from "../chunk-KXVQPS4Y.mjs";
6
- import "../chunk-SGQHRB4P.mjs";
5
+ } from "../chunk-JBXEMQ6S.mjs";
6
+ import "../chunk-C7VBULMK.mjs";
7
7
  export {
8
8
  FunctionType,
9
9
  ScriptAction,
@@ -26,16 +26,16 @@ 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 AutomationPanel_SANUE5X4_exports = {};
30
- __export(AutomationPanel_SANUE5X4_exports, {
29
+ var AutomationPanel_M5UHEMPG_exports = {};
30
+ __export(AutomationPanel_M5UHEMPG_exports, {
31
31
  AutomationPanel: () => AutomationPanel,
32
32
  default: () => AutomationPanel_default
33
33
  });
34
- module.exports = __toCommonJS(AutomationPanel_SANUE5X4_exports);
35
- var import_chunk_JWKMTYYH = require("./chunk-JWKMTYYH.cjs");
36
- var import_chunk_FY5KKL5N = require("./chunk-FY5KKL5N.cjs");
37
- var import_chunk_25PQE7FL = require("./chunk-25PQE7FL.cjs");
38
- var import_chunk_EJC55SDD = require("./chunk-EJC55SDD.cjs");
34
+ module.exports = __toCommonJS(AutomationPanel_M5UHEMPG_exports);
35
+ var import_chunk_BJ4WIWCP = require("./chunk-BJ4WIWCP.cjs");
36
+ var import_chunk_XS6GEYYH = require("./chunk-XS6GEYYH.cjs");
37
+ var import_chunk_ZTUFXDTH = require("./chunk-ZTUFXDTH.cjs");
38
+ var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_debug = require("@dxos/debug");
41
41
  var import_react_client = require("@dxos/react-client");
@@ -43,31 +43,31 @@ var import_echo = require("@dxos/react-client/echo");
43
43
  var import_react_ui = require("@dxos/react-ui");
44
44
  var AutomationPanel = ({ subject }) => {
45
45
  const space = (0, import_echo.getSpace)(subject);
46
- const functions = (0, import_echo.useQuery)(space ?? void 0, import_echo.Filter.schema(import_chunk_25PQE7FL.FunctionType, (fn) => subject instanceof import_chunk_25PQE7FL.ScriptType ? fn.source === subject : fn.binding != null), {}, [
46
+ const functions = (0, import_echo.useQuery)(space ?? void 0, import_echo.Filter.schema(import_chunk_ZTUFXDTH.FunctionType, (fn) => subject instanceof import_chunk_ZTUFXDTH.ScriptType ? fn.source === subject : fn.binding != null), {}, [
47
47
  subject
48
48
  ]);
49
49
  const [selectedFunction, setSelectedFunction] = (0, import_react.useState)(null);
50
- const functionToChatWith = subject instanceof import_chunk_25PQE7FL.ScriptType ? functions[0] : selectedFunction;
50
+ const functionToChatWith = subject instanceof import_chunk_ZTUFXDTH.ScriptType ? functions[0] : selectedFunction;
51
51
  return /* @__PURE__ */ import_react.default.createElement("div", {
52
52
  className: "h-full flex flex-col"
53
- }, !(subject instanceof import_chunk_25PQE7FL.ScriptType) && /* @__PURE__ */ import_react.default.createElement(BindingSelect, {
53
+ }, !(subject instanceof import_chunk_ZTUFXDTH.ScriptType) && /* @__PURE__ */ import_react.default.createElement(BindingSelect, {
54
54
  selectedFunction,
55
55
  setSelectedFunction,
56
56
  functions
57
57
  }), functionToChatWith && /* @__PURE__ */ import_react.default.createElement(ChatPanel, {
58
58
  fn: functionToChatWith,
59
59
  subject
60
- }), subject instanceof import_chunk_25PQE7FL.ScriptType && functions.length === 0 && /* @__PURE__ */ import_react.default.createElement("p", null, "Deploy function to interact with it."));
60
+ }), subject instanceof import_chunk_ZTUFXDTH.ScriptType && functions.length === 0 && /* @__PURE__ */ import_react.default.createElement("p", null, "Deploy function to interact with it."));
61
61
  };
62
62
  var ChatPanel = ({ fn, subject }) => {
63
63
  const client = (0, import_react_client.useClient)();
64
64
  const space = (0, import_echo.getSpace)(fn);
65
- const existingFunctionUrl = (0, import_chunk_FY5KKL5N.getUserFunctionUrlInMetadata)((0, import_echo.getMeta)(fn));
65
+ const existingFunctionUrl = (0, import_chunk_XS6GEYYH.getUserFunctionUrlInMetadata)((0, import_echo.getMeta)(fn));
66
66
  const functionUrl = (0, import_react.useMemo)(() => {
67
67
  if (!existingFunctionUrl) {
68
68
  return;
69
69
  }
70
- return (0, import_chunk_FY5KKL5N.getInvocationUrl)(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? "", {
70
+ return (0, import_chunk_XS6GEYYH.getInvocationUrl)(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? "", {
71
71
  spaceId: space?.id,
72
72
  subjectId: subject?.id
73
73
  });
@@ -76,7 +76,7 @@ var ChatPanel = ({ fn, subject }) => {
76
76
  space,
77
77
  subject
78
78
  ]);
79
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_JWKMTYYH.DebugPanel, {
79
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_BJ4WIWCP.DebugPanel, {
80
80
  functionUrl,
81
81
  classNames: "flex-1"
82
82
  });
@@ -97,4 +97,4 @@ var AutomationPanel_default = AutomationPanel;
97
97
  0 && (module.exports = {
98
98
  AutomationPanel
99
99
  });
100
- //# sourceMappingURL=AutomationPanel-SANUE5X4.cjs.map
100
+ //# sourceMappingURL=AutomationPanel-M5UHEMPG.cjs.map
@@ -26,16 +26,16 @@ 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 ScriptContainer_BV7HMUY5_exports = {};
30
- __export(ScriptContainer_BV7HMUY5_exports, {
29
+ var ScriptContainer_X76C7OD2_exports = {};
30
+ __export(ScriptContainer_X76C7OD2_exports, {
31
31
  default: () => ScriptContainer_default
32
32
  });
33
- module.exports = __toCommonJS(ScriptContainer_BV7HMUY5_exports);
34
- var import_chunk_ACLCRWDB = require("./chunk-ACLCRWDB.cjs");
35
- var import_chunk_JWKMTYYH = require("./chunk-JWKMTYYH.cjs");
36
- var import_chunk_FY5KKL5N = require("./chunk-FY5KKL5N.cjs");
37
- var import_chunk_25PQE7FL = require("./chunk-25PQE7FL.cjs");
38
- var import_chunk_EJC55SDD = require("./chunk-EJC55SDD.cjs");
33
+ module.exports = __toCommonJS(ScriptContainer_X76C7OD2_exports);
34
+ var import_chunk_WPP65EYS = require("./chunk-WPP65EYS.cjs");
35
+ var import_chunk_BJ4WIWCP = require("./chunk-BJ4WIWCP.cjs");
36
+ var import_chunk_XS6GEYYH = require("./chunk-XS6GEYYH.cjs");
37
+ var import_chunk_ZTUFXDTH = require("./chunk-ZTUFXDTH.cjs");
38
+ var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_echo = require("@dxos/react-client/echo");
41
41
  var import_react_ui_attention = require("@dxos/react-ui-attention");
@@ -60,7 +60,7 @@ var import_react_ui3 = require("@dxos/react-ui");
60
60
  var import_react_ui_editor2 = require("@dxos/react-ui-editor");
61
61
  var import_util = require("@dxos/util");
62
62
  var Toolbar = ({ classNames, deployed, error, functionUrl, view, templates: templates2, onDeploy, onFormat, onViewChange, onTemplateSelect }) => {
63
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_EJC55SDD.SCRIPT_PLUGIN);
63
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
64
64
  const [pending, setPending] = (0, import_react3.useState)(false);
65
65
  const handleCopyLink = async () => {
66
66
  if (!functionUrl) {
@@ -229,11 +229,11 @@ var TypescriptEditor = ({ id, env, className, initialValue, extensions, scrollTo
229
229
  };
230
230
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx";
231
231
  var ScriptEditor = ({ classNames, script, env }) => {
232
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_EJC55SDD.SCRIPT_PLUGIN);
232
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
233
233
  const client = (0, import_react_client.useClient)();
234
234
  const identity = (0, import_halo.useIdentity)();
235
235
  const space = (0, import_echo2.getSpace)(script);
236
- const [fn] = (0, import_echo2.useQuery)(space, import_echo2.Filter.schema(import_chunk_25PQE7FL.FunctionType, (fn2) => fn2.source === script));
236
+ const [fn] = (0, import_echo2.useQuery)(space, import_echo2.Filter.schema(import_chunk_ZTUFXDTH.FunctionType, (fn2) => fn2.source === script));
237
237
  const extensions = (0, import_react2.useMemo)(() => [
238
238
  (0, import_react_ui_editor.listener)({
239
239
  onChange: (text) => {
@@ -260,13 +260,8 @@ var ScriptEditor = ({ classNames, script, env }) => {
260
260
  const initialValue = (0, import_react2.useMemo)(() => script.source?.content, [
261
261
  script.source
262
262
  ]);
263
- const existingFunctionUrl = fn && (0, import_chunk_FY5KKL5N.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
263
+ const existingFunctionUrl = fn && (0, import_chunk_XS6GEYYH.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
264
264
  const [error, setError] = (0, import_react2.useState)();
265
- const handleBindingChange = (0, import_react2.useCallback)((binding) => {
266
- fn.binding = binding;
267
- }, [
268
- fn
269
- ]);
270
265
  const handleFormat = (0, import_react2.useCallback)(async () => {
271
266
  if (!script.source) {
272
267
  return;
@@ -284,7 +279,7 @@ var ScriptEditor = ({ classNames, script, env }) => {
284
279
  } catch (err) {
285
280
  import_log.log.catch(err, void 0, {
286
281
  F: __dxlog_file,
287
- L: 96,
282
+ L: 89,
288
283
  S: void 0,
289
284
  C: (f, a) => f(...a)
290
285
  });
@@ -293,18 +288,18 @@ var ScriptEditor = ({ classNames, script, env }) => {
293
288
  script.source
294
289
  ]);
295
290
  const handleTemplateChange = (id) => {
296
- const template = import_chunk_ACLCRWDB.templates.find((template2) => template2.id === id);
291
+ const template = import_chunk_WPP65EYS.templates.find((template2) => template2.id === id);
297
292
  if (template) {
298
293
  script.name = template.name;
299
294
  script.source.content = template.source;
300
295
  const metaKeys = (0, import_echo2.getMeta)(script).keys;
301
- const oldPresetIndex = metaKeys.findIndex((key) => key.source === import_chunk_FY5KKL5N.USERFUNCTIONS_PRESET_META_KEY);
296
+ const oldPresetIndex = metaKeys.findIndex((key) => key.source === import_chunk_XS6GEYYH.USERFUNCTIONS_PRESET_META_KEY);
302
297
  if (oldPresetIndex >= 0) {
303
298
  metaKeys.splice(oldPresetIndex, 1);
304
299
  }
305
300
  if (template.presetId) {
306
301
  metaKeys.push({
307
- source: import_chunk_FY5KKL5N.USERFUNCTIONS_PRESET_META_KEY,
302
+ source: import_chunk_XS6GEYYH.USERFUNCTIONS_PRESET_META_KEY,
308
303
  id: template.presetId
309
304
  });
310
305
  }
@@ -317,8 +312,8 @@ var ScriptEditor = ({ classNames, script, env }) => {
317
312
  setError(void 0);
318
313
  try {
319
314
  const existingFunctionId = existingFunctionUrl?.split("/").at(-1);
320
- const ownerDid = existingFunctionUrl?.split("/").at(-2) ?? (0, import_chunk_FY5KKL5N.publicKeyToDid)(identity.identityKey);
321
- const bundler = new import_chunk_ACLCRWDB.Bundler({
315
+ const ownerDid = existingFunctionUrl?.split("/").at(-2) ?? (0, import_chunk_XS6GEYYH.publicKeyToDid)(identity.identityKey);
316
+ const bundler = new import_chunk_WPP65EYS.Bundler({
322
317
  platform: "browser",
323
318
  sandboxedModules: [],
324
319
  remoteModules: {}
@@ -327,7 +322,7 @@ var ScriptEditor = ({ classNames, script, env }) => {
327
322
  if (buildResult.error || !buildResult.bundle) {
328
323
  throw buildResult.error;
329
324
  }
330
- const { result, functionId, functionVersionNumber, errorMessage } = await (0, import_chunk_FY5KKL5N.uploadWorkerFunction)({
325
+ const { result, functionId, functionVersionNumber, errorMessage, meta } = await (0, import_chunk_XS6GEYYH.uploadWorkerFunction)({
331
326
  clientConfig: client.config,
332
327
  halo: client.halo,
333
328
  ownerDid,
@@ -342,25 +337,36 @@ var ScriptEditor = ({ classNames, script, env }) => {
342
337
  functionVersionNumber
343
338
  }, {
344
339
  F: __dxlog_file,
345
- L: 144,
340
+ L: 137,
346
341
  S: void 0,
347
342
  C: (f, a) => f(...a)
348
343
  });
349
344
  if (fn) {
350
345
  fn.version = functionVersionNumber;
351
346
  }
352
- const deployedFunction = fn ?? space.db.add((0, import_echo2.create)(import_chunk_25PQE7FL.FunctionType, {
347
+ const deployedFunction = fn ?? space.db.add((0, import_echo2.create)(import_chunk_ZTUFXDTH.FunctionType, {
353
348
  version: functionVersionNumber,
354
349
  source: script
355
350
  }));
356
- const meta = (0, import_echo2.getMeta)(deployedFunction);
357
351
  script.changed = false;
358
- (0, import_chunk_FY5KKL5N.setUserFunctionUrlInMetadata)(meta, `/${ownerDid}/${functionId}`);
352
+ if (meta.inputSchema) {
353
+ deployedFunction.inputSchema = meta.inputSchema;
354
+ } else {
355
+ import_log.log.verbose("no input schema in function metadata", {
356
+ functionId
357
+ }, {
358
+ F: __dxlog_file,
359
+ L: 149,
360
+ S: void 0,
361
+ C: (f, a) => f(...a)
362
+ });
363
+ }
364
+ (0, import_chunk_XS6GEYYH.setUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(deployedFunction), `/${ownerDid}/${functionId}`);
359
365
  setView("split");
360
366
  } catch (err) {
361
367
  import_log.log.catch(err, void 0, {
362
368
  F: __dxlog_file,
363
- L: 156,
369
+ L: 155,
364
370
  S: void 0,
365
371
  C: (f, a) => f(...a)
366
372
  });
@@ -377,7 +383,7 @@ var ScriptEditor = ({ classNames, script, env }) => {
377
383
  if (!existingFunctionUrl) {
378
384
  return;
379
385
  }
380
- return (0, import_chunk_FY5KKL5N.getInvocationUrl)(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? "", {
386
+ return (0, import_chunk_XS6GEYYH.getInvocationUrl)(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? "", {
381
387
  spaceId: space?.id
382
388
  });
383
389
  }, [
@@ -392,7 +398,7 @@ var ScriptEditor = ({ classNames, script, env }) => {
392
398
  functionUrl,
393
399
  error,
394
400
  view,
395
- templates: import_chunk_ACLCRWDB.templates,
401
+ templates: import_chunk_WPP65EYS.templates,
396
402
  onDeploy: handleDeploy,
397
403
  onFormat: handleFormat,
398
404
  onViewChange: setView,
@@ -403,11 +409,8 @@ var ScriptEditor = ({ classNames, script, env }) => {
403
409
  initialValue,
404
410
  extensions,
405
411
  className: "flex is-full bs-full overflow-hidden ch-focus-ring-inset-over-all"
406
- }), view !== "editor" && /* @__PURE__ */ import_react2.default.createElement(import_chunk_JWKMTYYH.DebugPanel, {
407
- functionUrl,
408
- showBindingConfig: true,
409
- binding: fn?.binding,
410
- onBindingChange: handleBindingChange
412
+ }), view !== "editor" && /* @__PURE__ */ import_react2.default.createElement(import_chunk_BJ4WIWCP.DebugPanel, {
413
+ functionUrl
411
414
  }));
412
415
  };
413
416
  var ScriptContainer = ({ script, ...props }) => {
@@ -422,4 +425,4 @@ var ScriptContainer = ({ script, ...props }) => {
422
425
  }));
423
426
  };
424
427
  var ScriptContainer_default = ScriptContainer;
425
- //# sourceMappingURL=ScriptContainer-BV7HMUY5.cjs.map
428
+ //# sourceMappingURL=ScriptContainer-X76C7OD2.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ScriptContainer.tsx", "../../../src/components/ScriptEditor.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/TypescriptEditor/TypescriptEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ScriptEditor, type ScriptEditorProps } from './ScriptEditor';\n\nconst ScriptContainer = ({ script, ...props }: ScriptEditorProps) => {\n const attendableAttrs = useAttendableAttributes(fullyQualifiedId(script));\n return (\n <div role='none' className={mx('flex row-span-2 w-full overflow-hidden attention-surface')} {...attendableAttrs}>\n <ScriptEditor {...props} script={script} />\n </div>\n );\n};\n\nexport default ScriptContainer;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DebugPanel } from './DebugPanel';\nimport { type TemplateSelectProps, Toolbar, type ViewType } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n USERFUNCTIONS_PRESET_META_KEY,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { templates } from '../templates';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = ThemedClassName<{\n script: ScriptType;\n}> &\n Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ classNames, script, env }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n // TODO(dmaretskyi): Parametric query.\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 [view, setView] = useState<ViewType>('editor');\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 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 handleTemplateChange: TemplateSelectProps['onTemplateSelect'] = (id) => {\n const template = templates.find((template) => template.id === id);\n if (template) {\n script.name = template.name;\n script.source!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === USERFUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: USERFUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n };\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({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\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, meta } = 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\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n script.changed = false;\n\n if (meta.inputSchema) {\n deployedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n setUserFunctionUrlInMetadata(getMeta(deployedFunction), `/${ownerDid}/${functionId}`);\n\n setView('split');\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 return getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n return (\n <div role='none' className={mx('flex flex-col w-full overflow-hidden divide-y divide-separator', classNames)}>\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n view={view}\n templates={templates}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onViewChange={setView}\n onTemplateSelect={handleTemplateChange}\n />\n\n {view !== 'preview' && (\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\n {view !== 'editor' && <DebugPanel functionUrl={functionUrl} />}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport {\n ElevationProvider,\n Icon,\n Select,\n type ThemedClassName,\n ToggleGroup,\n ToggleGroupItem,\n type ToolbarButtonProps,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type Template } from '../../templates';\n\nexport type ToolbarProps = ThemedClassName<\n {\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n } & TemplateSelectProps &\n ViewSelectorProps\n>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n view,\n templates,\n onDeploy,\n onFormat,\n onViewChange,\n onTemplateSelect,\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 if (!pending) {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n }\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {templates && <TemplateSelect templates={templates} onTemplateSelect={onTemplateSelect} />}\n {onFormat && <ToolbarIconButton icon='ph--magic-wand--regular' text={t('format label')} onClick={onFormat} />}\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 <ToolbarIconButton icon='ph--link--regular' text={t('copy link label')} onClick={handleCopyLink} />\n )}\n\n {onDeploy && (\n <ToolbarIconButton\n icon={pending ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular'}\n classNames={[pending && 'animate-spin']}\n text={pending ? t('pending label') : t('deploy label')}\n onClick={handleDeploy}\n />\n )}\n\n <ViewSelector view={view} onViewChange={onViewChange} />\n </NaturalToolbar.Root>\n </ElevationProvider>\n );\n};\n\nconst ToolbarIconButton = ({\n icon,\n text,\n classNames,\n disabled,\n onClick,\n}: { icon: string; text: string } & Pick<ToolbarButtonProps, 'classNames' | 'disabled' | 'onClick'>) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' disabled={disabled} onClick={onClick}>\n <Icon icon={icon} size={4} classNames={classNames} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {text}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport type ViewType = 'editor' | 'split' | 'preview';\n\nexport type TemplateSelectProps = {\n templates?: Template[];\n onTemplateSelect?: (id: string) => void;\n};\n\nexport const TemplateSelect = ({ templates = [], onTemplateSelect }: TemplateSelectProps) => {\n return (\n <Select.Root value={''} onValueChange={onTemplateSelect}>\n <Select.TriggerButton />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value={''}>Template</Select.Option>\n {templates.map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n};\n\nexport type ViewSelectorProps = {\n view?: ViewType;\n onViewChange?: (view: ViewType) => void;\n};\n\nexport const ViewSelector = ({ view, onViewChange }: ViewSelectorProps) => {\n return (\n <ToggleGroup type='single' value={view} onValueChange={(value) => onViewChange?.(value as ViewType)}>\n <ToggleGroupItem value='editor' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--code--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='split' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--square-split-vertical--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='preview' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--eye--regular' size={4} />\n </ToggleGroupItem>\n </ToggleGroup>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n editorGutter,\n editorMonospace,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { nonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n env?: VirtualTypeScriptEnvironment;\n} & Pick<UseTextEditorProps, 'className' | 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n env,\n className,\n initialValue,\n extensions,\n scrollTo,\n selection,\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n createBasicExtensions({\n highlightActiveLine: true,\n indentWithTab: true,\n lineNumbers: true,\n lineWrapping: false,\n scrollPastEnd: true,\n }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n slots: {\n content: { className: editorFullWidth },\n },\n }),\n editorGutter,\n // TODO(burdon): Factor out.\n [\n editorMonospace,\n javascript({ typescript: true }),\n // https://github.com/val-town/codemirror-ts\n autocomplete({ override: env ? [tsAutocomplete()] : [] }),\n env ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],\n InputModeExtensions.vscode,\n ],\n ].filter(nonNullable),\n selection,\n scrollTo,\n }),\n [id, initialValue, extensions, themeMode, selection, scrollTo],\n );\n\n return <div ref={parentRef} className={className} {...focusAttributes} />;\n};\n\nexport default TypescriptEditor;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAkB;AAElB,kBAAiC;AACjC,gCAAwC;AACxC,4BAAmB;ACHnB,sBAAuB;AACvB,oBAAiC;AACjC,wBAAqC;AACrC,IAAAA,gBAAsD;AAEtD,iBAAoB;AACpB,0BAA0B;AAC1B,IAAAC,eAA+E;AAC/E,kBAA4B;AAC5B,sBAAqD;AACrD,6BAA+C;AAC/C,IAAAC,yBAAmB;ACZnB,IAAAF,gBAAgC;AAEhC,IAAAG,mBAWO;ACbP,6BAA2B;AAE3B,2BAAmE;AACnE,IAAAH,gBAAkB;AAElB,IAAAG,mBAAgC;AAChC,IAAAC,0BAUO;AACP,kBAA4B;ADYrB,IAAMC,UAAU,CAAC,EACtBC,YACAC,UACAC,OACAC,aACAC,MACAC,WAAAA,YACAC,UACAC,UACAC,cACAC,iBAAgB,MACH;AACb,QAAM,EAAEC,EAAC,QAAKC,iCAAeC,mCAAAA;AAC7B,QAAM,CAACC,SAASC,UAAAA,QAAcC,wBAAS,KAAA;AAEvC,QAAMC,iBAAiB,YAAA;AACrB,QAAI,CAACb,aAAa;AAChB;IACF;AAEA,UAAMc,UAAUC,UAAUC,UAAUhB,WAAAA;EACtC;AAEA,QAAMiB,eAAe,YAAA;AACnB,QAAI,CAACP,SAAS;AACZC,iBAAW,IAAA;AACX,YAAMR,WAAAA;AACNQ,iBAAW,KAAA;IACb;EACF;AAGA,SACE,8BAAAO,QAAA,cAACC,oCAAAA;IAAkBC,WAAU;KAC3B,8BAAAF,QAAA,cAACG,iBAAAA,QAAeC,MAAI;IAACzB,YAAY;MAAC;MAAOA;;IAAa0B,OAAO;MAAEC,SAAS;IAAS;KAC9EtB,cAAa,8BAAAgB,QAAA,cAACO,gBAAAA;IAAevB,WAAWA;IAAWI;MACnDF,YAAY,8BAAAc,QAAA,cAACQ,mBAAAA;IAAkBC,MAAK;IAA0BC,MAAMrB,EAAE,cAAA;IAAiBsB,SAASzB;MAEjG,8BAAAc,QAAA,cAACY,OAAAA;IAAIC,MAAK;IAAYC,WAAU;MAE/BjC,QACC,8BAAAmB,QAAA,cAACe,yBAAQX,MAAI,MACX,8BAAAJ,QAAA,cAACe,yBAAQC,SAAO,MACd,8BAAAhB,QAAA,cAACiB,uBAAAA;IAAKR,MAAK;IAA8BS,MAAM;OAEjD,8BAAAlB,QAAA,cAACe,yBAAQI,QAAM,MACb,8BAAAnB,QAAA,cAACe,yBAAQK,SAAO,MACd,8BAAApB,QAAA,cAACe,yBAAQM,OAAK,IAAA,GACbxC,KAAAA,CAAAA,CAAAA,IAIL,MAEHC,eAAeF,YACd,8BAAAoB,QAAA,cAACQ,mBAAAA;IAAkBC,MAAK;IAAoBC,MAAMrB,EAAE,iBAAA;IAAoBsB,SAAShB;MAGlFV,YACC,8BAAAe,QAAA,cAACQ,mBAAAA;IACCC,MAAMjB,UAAU,6BAA6B;IAC7Cb,YAAY;MAACa,WAAW;;IACxBkB,MAAMlB,UAAUH,EAAE,eAAA,IAAmBA,EAAE,cAAA;IACvCsB,SAASZ;MAIb,8BAAAC,QAAA,cAACsB,cAAAA;IAAavC;IAAYI;;AAIlC;AAEA,IAAMqB,oBAAoB,CAAC,EACzBC,MACAC,MACA/B,YACA4C,UACAZ,QAAO,MAC0F;AACjG,SACE,8BAAAX,QAAA,cAACe,yBAAQX,MAAI,MACX,8BAAAJ,QAAA,cAACe,yBAAQC,SAAO;IAACQ,SAAAA;KACf,8BAAAxB,QAAA,cAACG,iBAAAA,QAAesB,QAAM;IAACC,SAAQ;IAAQH;IAAoBZ;KACzD,8BAAAX,QAAA,cAACiB,uBAAAA;IAAKR;IAAYS,MAAM;IAAGvC;QAG/B,8BAAAqB,QAAA,cAACe,yBAAQI,QAAM,MACb,8BAAAnB,QAAA,cAACe,yBAAQK,SAAO,MACd,8BAAApB,QAAA,cAACe,yBAAQM,OAAK,IAAA,GACbX,IAAAA,CAAAA,CAAAA;AAKX;AASO,IAAMH,iBAAiB,CAAC,EAAEvB,WAAAA,aAAY,CAAA,GAAII,iBAAgB,MAAuB;AACtF,SACE,8BAAAY,QAAA,cAAC2B,wBAAOvB,MAAI;IAACwB,OAAO;IAAIC,eAAezC;KACrC,8BAAAY,QAAA,cAAC2B,wBAAOG,eAAa,IAAA,GACrB,8BAAA9B,QAAA,cAAC2B,wBAAOR,QAAM,MACZ,8BAAAnB,QAAA,cAAC2B,wBAAOP,SAAO,MACb,8BAAApB,QAAA,cAAC2B,wBAAOI,UAAQ,MACd,8BAAA/B,QAAA,cAAC2B,wBAAOK,QAAM;IAACJ,OAAO;KAAI,UAAA,GACzB5C,WAAUiD,IAAI,CAAC,EAAEC,IAAIC,KAAI,MACxB,8BAAAnC,QAAA,cAAC2B,wBAAOK,QAAM;IAACI,KAAKF;IAAIN,OAAOM;KAC5BC,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAQjB;AAOO,IAAMb,eAAe,CAAC,EAAEvC,MAAMI,aAAY,MAAqB;AACpE,SACE,8BAAAa,QAAA,cAACqC,8BAAAA;IAAYC,MAAK;IAASV,OAAO7C;IAAM8C,eAAe,CAACD,UAAUzC,eAAeyC,KAAAA;KAC/E,8BAAA5B,QAAA,cAACuC,kCAAAA;IAAgBX,OAAM;IAASjD,YAAW;KACzC,8BAAAqB,QAAA,cAACiB,uBAAAA;IAAKR,MAAK;IAAoBS,MAAM;OAEvC,8BAAAlB,QAAA,cAACuC,kCAAAA;IAAgBX,OAAM;IAAQjD,YAAW;KACxC,8BAAAqB,QAAA,cAACiB,uBAAAA;IAAKR,MAAK;IAAqCS,MAAM;OAExD,8BAAAlB,QAAA,cAACuC,kCAAAA;IAAgBX,OAAM;IAAUjD,YAAW;KAC1C,8BAAAqB,QAAA,cAACiB,uBAAAA;IAAKR,MAAK;IAAmBS,MAAM;;AAI5C;ACpJO,IAAMsB,mBAAmB,CAAC,EAC/BN,IACAO,KACA3B,WACA4B,cACAC,YACAC,UACAC,UAAS,MACa;AACtB,QAAM,EAAEC,UAAS,QAAKC,kCAAAA;AACtB,QAAM,EAAEC,WAAWC,gBAAe,QAAKC,uCACrC,OAAO;IACLhB;IACAQ;IACAC,YAAY;MACVA;UACAQ,+CAAsB;QACpBC,qBAAqB;QACrBC,eAAe;QACfC,aAAa;QACbC,cAAc;QACdC,eAAe;MACjB,CAAA;UACAC,+CAAsB;QACpBX;QACAY,oBAAoB;QACpBC,OAAO;UACLC,SAAS;YAAE9C,WAAW+C;UAAgB;QACxC;MACF,CAAA;MACAC;;MAEA;QACEC;YACAC,mCAAW;UAAEC,YAAY;QAAK,CAAA;;YAE9BC,sCAAa;UAAEC,UAAU1B,MAAM;gBAAC2B,qCAAAA;cAAoB,CAAA;QAAG,CAAA;QACvD3B,MAAM;UAAC4B,6BAAQC,GAAG;YAAE7B;YAAK8B,MAAM,QAAQrC,EAAAA;UAAQ,CAAA;cAAIsC,6BAAAA;cAAUC,+BAAAA;cAAYC,8BAAAA;YAAa,CAAA;QACtFC,4CAAoBC;;MAEtBC,OAAOC,uBAAAA;IACTjC;IACAD;EACF,IACA;IAACV;IAAIQ;IAAcC;IAAYG;IAAWD;IAAWD;GAAS;AAGhE,SAAO5C,8BAAAA,QAAA,cAACY,OAAAA;IAAImE,KAAK/B;IAAWlC;IAAuB,GAAGmC;;AACxD;;AFrCO,IAAM+B,eAAe,CAAC,EAAErG,YAAYsG,QAAQxC,IAAG,MAAqB;AACzE,QAAM,EAAEpD,EAAC,QAAKC,gBAAAA,gBAAeC,mCAAAA;AAC7B,QAAM2F,aAASC,+BAAAA;AACf,QAAMC,eAAWC,yBAAAA;AACjB,QAAMC,YAAQC,uBAASN,MAAAA;AAEvB,QAAM,CAACO,EAAAA,QAAMC,uBACXH,OACAI,oBAAOC,OAAOC,oCAAc,CAACJ,QAAOA,IAAGK,WAAWZ,MAAAA,CAAAA;AAGpD,QAAMtC,iBAAamD,uBACjB,MAAM;QACJC,iCAAS;MACPC,UAAU,CAACtF,SAAAA;AACT,YAAIuE,OAAOY,UAAUZ,OAAOY,QAAQjC,YAAYlD,MAAM;AACpDuE,iBAAOgB,UAAU;QACnB;MACF;IACF,CAAA;QACAC,6CAAqB;MACnBhE,IAAI+C,OAAO/C;MACXxB,MAAMuE,OAAOY,cAAUM,gCAAkBlB,OAAOY,QAAQ;QAAC;OAAU;MACnEP;MACAF;IACF,CAAA;KAEF;IAACH;IAAQA,OAAOY;IAAQP;IAAOF;GAAS;AAG1C,QAAM,CAACrG,MAAMqH,OAAAA,QAAW1G,cAAAA,UAAmB,QAAA;AAC3C,QAAMgD,mBAAeoD,uBAAQ,MAAMb,OAAOY,QAAQjC,SAAS;IAACqB,OAAOY;GAAO;AAC1E,QAAMQ,sBAAsBb,UAAMc,wDAA6BC,sBAAQf,EAAAA,CAAAA;AACvE,QAAM,CAAC3G,OAAO2H,QAAAA,QAAY9G,cAAAA,UAAAA;AAE1B,QAAM+G,mBAAeC,2BAAY,YAAA;AAC/B,QAAI,CAACzB,OAAOY,QAAQ;AAClB;IACF;AAEA,QAAI;AACFZ,aAAOY,OAAOjC,UAAU,UAAM+C,wBAAO1B,OAAOY,OAAOjC,SAAS;QAC1DgD,QAAQ;QACRC,SAAS;UAACC,cAAAA;UAAsBC,kBAAAA;;QAChCC,MAAM;QACNC,aAAa;MACf,CAAA;IACF,SAASC,KAAU;AAEjBC,qBAAIC,MAAMF,KAAAA,QAAAA;;;;;;IACZ;EACF,GAAG;IAACjC,OAAOY;GAAO;AAElB,QAAMwB,uBAAgE,CAACnF,OAAAA;AACrE,UAAMoF,WAAWtI,gCAAUuI,KAAK,CAACD,cAAaA,UAASpF,OAAOA,EAAAA;AAC9D,QAAIoF,UAAU;AACZrC,aAAO9C,OAAOmF,SAASnF;AACvB8C,aAAOY,OAAQjC,UAAU0D,SAASzB;AAClC,YAAM2B,eAAWjB,sBAAQtB,MAAAA,EAAQwC;AACjC,YAAMC,iBAAiBF,SAASG,UAAU,CAACvF,QAAQA,IAAIyD,WAAW+B,mDAAAA;AAClE,UAAIF,kBAAkB,GAAG;AACvBF,iBAASK,OAAOH,gBAAgB,CAAA;MAClC;AACA,UAAIJ,SAASQ,UAAU;AACrBN,iBAASO,KAAK;UAAElC,QAAQ+B;UAA+B1F,IAAIoF,SAASQ;QAAS,CAAA;MAC/E;IACF;EACF;AAEA,QAAM/H,mBAAe2G,2BAAY,YAAA;AAC/B,QAAI,CAACzB,OAAOY,UAAU,CAACT,YAAY,CAACE,OAAO;AACzC;IACF;AAEAkB,aAASwB,MAAAA;AAET,QAAI;AACF,YAAMC,qBAAqB5B,qBAAqB6B,MAAM,GAAA,EAAKC,GAAG,EAAC;AAC/D,YAAMC,WAAY/B,qBAAqB6B,MAAM,GAAA,EAAKC,GAAG,EAAC,SAAcE,sCAAejD,SAASkD,WAAW;AAEvG,YAAMC,UAAU,IAAIC,8BAAQ;QAAEC,UAAU;QAAWC,kBAAkB,CAAA;QAAIC,eAAe,CAAC;MAAE,CAAA;AAC3F,YAAMC,cAAc,MAAML,QAAQM,OAAO5D,OAAOY,OAAOjC,OAAO;AAC9D,UAAIgF,YAAY/J,SAAS,CAAC+J,YAAYC,QAAQ;AAC5C,cAAMD,YAAY/J;MACpB;AAEA,YAAM,EAAEiK,QAAQC,YAAYC,uBAAuBC,cAAcC,KAAI,IAAK,UAAMC,4CAAqB;QACnGC,cAAclE,OAAOmE;QACrBC,MAAMpE,OAAOoE;QACblB;QACAW,YAAYd;QACZpC,QAAQ+C,YAAYC;MACtB,CAAA;AACA,UAAIC,WAAW,aAAaC,eAAef,UAAagB,0BAA0BhB,QAAW;AAC3F,cAAM,IAAIuB,MAAMN,YAAAA;MAClB;AAEA9B,qBAAIqC,KAAK,qBAAqB;QAAET;QAAYC;MAAsB,GAAA;;;;;;AAClE,UAAIxD,IAAI;AACNA,WAAGiE,UAAUT;MACf;AAEA,YAAMU,mBACJlE,MAAMF,MAAMqE,GAAGC,QAAIC,qBAAOjE,oCAAc;QAAE6D,SAAST;QAAuBnD,QAAQZ;MAAO,CAAA,CAAA;AAC3FA,aAAOgB,UAAU;AAEjB,UAAIiD,KAAKY,aAAa;AACpBJ,yBAAiBI,cAAcZ,KAAKY;MACtC,OAAO;AACL3C,uBAAI4C,QAAQ,wCAAwC;UAAEhB;QAAW,GAAA;;;;;;MACnE;AACAiB,kEAA6BzD,sBAAQmD,gBAAAA,GAAmB,IAAItB,QAAAA,IAAYW,UAAAA,EAAY;AAEpF3C,cAAQ,OAAA;IACV,SAASc,KAAU;AACjBC,qBAAIC,MAAMF,KAAAA,QAAAA;;;;;;AACVV,eAASnH,EAAE,qBAAA,CAAA;IACb;EACF,GAAG;IAACmG;IAAIa;IAAqBpB;IAAQA,OAAO9C;IAAM8C,OAAOY;GAAO;AAEhE,QAAM/G,kBAAcgH,uBAAQ,MAAA;AAC1B,QAAI,CAACO,qBAAqB;AACxB;IACF;AAEA,eAAO4D,wCAAiB5D,qBAAqBnB,OAAOmE,OAAOa,OAAOC,SAASC,UAAUC,MAAMC,OAAO,IAAI;MACpGC,SAASjF,OAAOpD;IAClB,CAAA;EACF,GAAG;IAACmE;IAAqBf;GAAM;AAE/B,SACEtF,8BAAAA,QAAA,cAACY,OAAAA;IAAIC,MAAK;IAAOC,eAAW0J,2BAAG,kEAAkE7L,UAAAA;KAC/FqB,8BAAAA,QAAA,cAACtB,SAAAA;IACCE,UAAU6L,QAAQpE,mBAAAA,KAAwB,CAACpB,OAAOgB;IAClDnH;IACAD;IACAE;IACAC;IACAC,UAAUc;IACVb,UAAUuH;IACVtH,cAAciH;IACdhH,kBAAkBiI;MAGnBtI,SAAS,aACRiB,8BAAAA,QAAA,cAACwC,kBAAAA;IACCN,IAAI+C,OAAO/C;IACXO;IACAC;IACAC;IACA7B,WAAU;MAIb/B,SAAS,YAAYiB,8BAAAA,QAAA,cAAC0K,kCAAAA;IAAW5L;;AAGxC;ADxLA,IAAM6L,kBAAkB,CAAC,EAAE1F,QAAQ,GAAG2F,MAAAA,MAA0B;AAC9D,QAAMC,sBAAkBC,uDAAwBC,8BAAiB9F,MAAAA,CAAAA;AACjE,SACEjF,6BAAAA,QAAA,cAACY,OAAAA;IAAIC,MAAK;IAAOC,eAAW0J,sBAAAA,IAAG,0DAAA;IAA8D,GAAGK;KAC9F7K,6BAAAA,QAAA,cAACgF,cAAAA;IAAc,GAAG4F;IAAO3F;;AAG/B;AAEA,IAAA,0BAAe0F;",
6
+ "names": ["import_react", "import_echo", "import_react_ui_theme", "import_react_ui", "import_react_ui_editor", "Toolbar", "classNames", "deployed", "error", "functionUrl", "view", "templates", "onDeploy", "onFormat", "onViewChange", "onTemplateSelect", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "React", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "style", "contain", "TemplateSelect", "ToolbarIconButton", "icon", "text", "onClick", "div", "role", "className", "Tooltip", "Trigger", "Icon", "size", "Portal", "Content", "Arrow", "ViewSelector", "disabled", "asChild", "Button", "variant", "Select", "value", "onValueChange", "TriggerButton", "Viewport", "Option", "map", "id", "name", "key", "ToggleGroup", "type", "ToggleGroupItem", "TypescriptEditor", "env", "initialValue", "extensions", "scrollTo", "selection", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "editorFullWidth", "editorGutter", "editorMonospace", "javascript", "typescript", "autocomplete", "override", "tsAutocomplete", "tsFacet", "of", "path", "tsSync", "tsLinter", "tsHover", "InputModeExtensions", "vscode", "filter", "nonNullable", "ref", "ScriptEditor", "script", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "useMemo", "listener", "onChange", "changed", "createDataExtensions", "createDocAccessor", "setView", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "setError", "handleFormat", "useCallback", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "handleTemplateChange", "template", "find", "metaKeys", "keys", "oldPresetIndex", "findIndex", "USERFUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "undefined", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "result", "functionId", "functionVersionNumber", "errorMessage", "meta", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "inputSchema", "verbose", "setUserFunctionUrlInMetadata", "getInvocationUrl", "values", "runtime", "services", "edge", "url", "spaceId", "mx", "Boolean", "DebugPanel", "ScriptContainer", "props", "attendableAttrs", "useAttendableAttributes", "fullyQualifiedId"]
7
+ }
@@ -16,25 +16,26 @@ 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 chunk_EJC55SDD_exports = {};
20
- __export(chunk_EJC55SDD_exports, {
19
+ var chunk_6LYX73ZT_exports = {};
20
+ __export(chunk_6LYX73ZT_exports, {
21
21
  SCRIPT_PLUGIN: () => SCRIPT_PLUGIN,
22
22
  meta_default: () => meta_default
23
23
  });
24
- module.exports = __toCommonJS(chunk_EJC55SDD_exports);
24
+ module.exports = __toCommonJS(chunk_6LYX73ZT_exports);
25
25
  var SCRIPT_PLUGIN = "dxos.org/plugin/script";
26
26
  var meta_default = {
27
27
  id: SCRIPT_PLUGIN,
28
28
  name: "Scripts",
29
29
  description: "Distributed functions.",
30
+ icon: "ph--code--regular",
31
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
30
32
  tags: [
31
33
  "experimental"
32
- ],
33
- icon: "ph--code--regular"
34
+ ]
34
35
  };
35
36
  // Annotate the CommonJS export names for ESM import in node:
36
37
  0 && (module.exports = {
37
38
  SCRIPT_PLUGIN,
38
39
  meta_default
39
40
  });
40
- //# sourceMappingURL=chunk-EJC55SDD.cjs.map
41
+ //# sourceMappingURL=chunk-6LYX73ZT.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport default {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description: 'Distributed functions.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer',\n tags: ['experimental'],\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,gBAAgB;AAE7B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;AACT;",
6
+ "names": ["SCRIPT_PLUGIN", "id", "name", "description", "icon", "source", "tags"]
7
+ }
@@ -26,25 +26,20 @@ 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 chunk_JWKMTYYH_exports = {};
30
- __export(chunk_JWKMTYYH_exports, {
29
+ var chunk_BJ4WIWCP_exports = {};
30
+ __export(chunk_BJ4WIWCP_exports, {
31
31
  DebugPanel: () => DebugPanel
32
32
  });
33
- module.exports = __toCommonJS(chunk_JWKMTYYH_exports);
34
- var import_chunk_EJC55SDD = require("./chunk-EJC55SDD.cjs");
33
+ module.exports = __toCommonJS(chunk_BJ4WIWCP_exports);
34
+ var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
35
35
  var import_react = __toESM(require("react"));
36
36
  var import_log = require("@dxos/log");
37
37
  var import_react_ui = require("@dxos/react-ui");
38
38
  var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
39
39
  var import_react_ui_theme = require("@dxos/react-ui-theme");
40
40
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx";
41
- var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange, showBindingConfig = false }) => {
42
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_EJC55SDD.SCRIPT_PLUGIN);
43
- const bindingInputRef = (0, import_react.useRef)(null);
44
- const [binding, setBinding] = (0, import_react_ui.useControlledValue)(_binding ?? "");
45
- const handleBlur = () => {
46
- onBindingChange?.(binding);
47
- };
41
+ var DebugPanel = ({ classNames, functionUrl }) => {
42
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
48
43
  const inputRef = (0, import_react.useRef)(null);
49
44
  const [input, setInput] = (0, import_react.useState)("");
50
45
  const [result, setResult] = (0, import_react.useState)("");
@@ -159,7 +154,7 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
159
154
  if (err.name !== "AbortError") {
160
155
  import_log.log.catch(err, void 0, {
161
156
  F: __dxlog_file,
162
- L: 161,
157
+ L: 146,
163
158
  S: void 0,
164
159
  C: (f, a) => f(...a)
165
160
  });
@@ -173,7 +168,7 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
173
168
  });
174
169
  import_log.log.catch(err, void 0, {
175
170
  F: __dxlog_file,
176
- L: 168,
171
+ L: 153,
177
172
  S: void 0,
178
173
  C: (f, a) => f(...a)
179
174
  });
@@ -200,13 +195,6 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
200
195
  value: input,
201
196
  onChange: (ev) => setInput(ev.target.value),
202
197
  onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
203
- })), showBindingConfig && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
204
- ref: bindingInputRef,
205
- classNames: "!w-[10rem]",
206
- placeholder: t("binding placeholder"),
207
- value: binding,
208
- onChange: (ev) => setBinding(ev.target.value.toUpperCase()),
209
- onBlur: handleBlur
210
198
  })), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
211
199
  onClick: () => handleRequest(input)
212
200
  }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
@@ -274,4 +262,4 @@ var RobotAvatar = () => /* @__PURE__ */ import_react.default.createElement(impor
274
262
  0 && (module.exports = {
275
263
  DebugPanel
276
264
  });
277
- //# sourceMappingURL=chunk-JWKMTYYH.cjs.map
265
+ //# sourceMappingURL=chunk-BJ4WIWCP.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DebugPanel/DebugPanel.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { Avatar, Icon, Input, type ThemedClassName, Toolbar, useTranslation } 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}>;\n\nexport const DebugPanel = ({ classNames, functionUrl }: DebugPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\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 -- at least for session (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 <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-2 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 <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 );\n};\n\n// TODO(burdon): Replace with thread?\n// TODO(burdon): Button to delete individual messages.\n// TODO(burdon): Button to edit/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-[2rem_1fr_2rem]'>\n <div className='p-1'>{message.type === 'response' && <RobotAvatar />}</div>\n <div className='overflow-auto'>\n <MessageItem message={message} />\n </div>\n </div>\n ))}\n {result?.length > 0 && (\n <div className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin' />) || (\n <Icon icon='ph--robot--regular' size={6} classNames='animate-[pulse_1s_ease-in-out_infinite]' />\n )}\n </div>\n <div className='overflow-auto'>\n <MessageItem message={{ type: 'response', text: result }} />\n </div>\n </div>\n )}\n </>\n );\n};\n\nconst MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message }>) => {\n const { type, text, data, error } = message;\n const wrapper = 'p-1 px-2 rounded-lg bg-hoverSurface overflow-auto';\n return (\n <div className={mx('flex', type === 'request' ? 'ml-[1rem] justify-end' : 'mr-[1rem]', classNames)}>\n {error && <div className={mx(wrapper, 'whitespace-pre text-error')}>{String(error)}</div>}\n\n {text !== undefined && (\n <div className={mx(wrapper, type === 'request' && 'bg-primary-400 dark:bg-primary-600')}>\n {text || '\\u00D8'}\n </div>\n )}\n\n {data && (\n <SyntaxHighlighter language='json' className={mx(wrapper, 'px-8 py-2 text-xs')}>\n {JSON.stringify(data, null, 2)}\n </SyntaxHighlighter>\n )}\n </div>\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"],
5
+ "mappings": "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",
6
+ "names": ["DebugPanel", "classNames", "functionUrl", "t", "useTranslation", "SCRIPT_PLUGIN", "inputRef", "useRef", "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", "div", "className", "mx", "ref", "MessageThread", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "Button", "onClick", "Icon", "icon", "size", "map", "message", "i", "RobotAvatar", "MessageItem", "length", "wrapper", "SyntaxHighlighter", "language", "Avatar", "variant", "Frame"]
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 chunk_ACLCRWDB_exports = {};
20
- __export(chunk_ACLCRWDB_exports, {
19
+ var chunk_WPP65EYS_exports = {};
20
+ __export(chunk_WPP65EYS_exports, {
21
21
  Bundler: () => Bundler,
22
22
  initializeBundler: () => initializeBundler,
23
23
  templates: () => templates
24
24
  });
25
- module.exports = __toCommonJS(chunk_ACLCRWDB_exports);
25
+ module.exports = __toCommonJS(chunk_WPP65EYS_exports);
26
26
  var import_esbuild_wasm = require("esbuild-wasm");
27
27
  var import_crypto = require("@dxos/crypto");
28
28
  var import_invariant = require("@dxos/invariant");
@@ -86,6 +86,14 @@ var Bundler = class {
86
86
  external: true
87
87
  };
88
88
  });
89
+ build2.onResolve({
90
+ filter: /^dxos:functions$/
91
+ }, ({ path }) => {
92
+ return {
93
+ path: "./runtime.js",
94
+ external: true
95
+ };
96
+ });
89
97
  build2.onResolve({
90
98
  filter: /^memory:/
91
99
  }, ({ path }) => {
@@ -136,7 +144,7 @@ var Bundler = class {
136
144
  });
137
145
  (0, import_log.log)("compile complete", result.metafile, {
138
146
  F: __dxlog_file,
139
- L: 117,
147
+ L: 121,
140
148
  S: this,
141
149
  C: (f, a) => f(...a)
142
150
  });
@@ -154,7 +162,7 @@ var Bundler = class {
154
162
  analyzeImports(result) {
155
163
  (0, import_invariant.invariant)(result.outputFiles, void 0, {
156
164
  F: __dxlog_file,
157
- L: 130,
165
+ L: 134,
158
166
  S: this,
159
167
  A: [
160
168
  "result.outputFiles",
@@ -287,4 +295,4 @@ var templates = [
287
295
  initializeBundler,
288
296
  templates
289
297
  });
290
- //# sourceMappingURL=chunk-ACLCRWDB.cjs.map
298
+ //# sourceMappingURL=chunk-WPP65EYS.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bundler/bundler.ts", "raw-loader:./templates/chat.ts?raw", "raw-loader:./templates/chess.ts?raw", "raw-loader:./templates/echo.ts?raw", "raw-loader:./templates/email.ts?raw", "raw-loader:./templates/forex.ts?raw", "../../../src/templates.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type BuildOptions } from 'esbuild';\nimport { build, initialize, type BuildResult, type Plugin } from 'esbuild-wasm';\n\nimport { subtleCrypto } from '@dxos/crypto';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nexport type Import = {\n moduleUrl: string;\n defaultImport: boolean;\n namedImports: string[];\n};\n\nexport type BundlerResult = {\n timestamp: number;\n sourceHash: Buffer;\n imports?: Import[];\n bundle?: string;\n error?: any;\n};\n\nexport type BundlerOptions = {\n platform: BuildOptions['platform'];\n sandboxedModules: string[];\n remoteModules: Record<string, string>;\n};\n\nlet initialized: Promise<void>;\nexport const initializeBundler = async (options: { wasmUrl: string }) => {\n await (initialized ??= initialize({\n wasmURL: options.wasmUrl,\n }));\n};\n\n/**\n * ESBuild bundler.\n */\nexport class Bundler {\n constructor(private readonly _options: BundlerOptions) {}\n\n async bundle(source: string): Promise<BundlerResult> {\n const { sandboxedModules: providedModules, ...options } = this._options;\n\n const createResult = async (result?: Partial<BundlerResult>) => {\n return {\n timestamp: Date.now(),\n sourceHash: Buffer.from(await subtleCrypto.digest('SHA-256', Buffer.from(source))),\n ...result,\n };\n };\n\n if (this._options.platform === 'browser') {\n invariant(initialized, 'Compiler not initialized.');\n await initialized;\n }\n\n const imports = analyzeSourceFileImports(source);\n\n // https://esbuild.github.io/api/#build\n try {\n const result = await build({\n platform: options.platform,\n conditions: ['workerd', 'browser'],\n metafile: true,\n write: false,\n entryPoints: ['memory:main.tsx'],\n bundle: true,\n format: 'esm',\n plugins: [\n {\n name: 'memory',\n setup: (build) => {\n build.onResolve({ filter: /^\\.\\/runtime\\.js$/ }, ({ path }) => {\n return { path, external: true };\n });\n\n build.onResolve({ filter: /^dxos:functions$/ }, ({ path }) => {\n return { path: './runtime.js', external: true };\n });\n\n build.onResolve({ filter: /^memory:/ }, ({ path }) => {\n return { path: path.split(':')[1], namespace: 'memory' };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'memory' }, ({ path }) => {\n if (path === 'main.tsx') {\n return {\n contents: source,\n loader: 'tsx',\n };\n }\n });\n\n for (const module of providedModules) {\n build.onResolve({ filter: new RegExp(`^${module}$`) }, ({ path }) => {\n return { path, namespace: 'injected-module' };\n });\n }\n\n build.onLoad({ filter: /.*/, namespace: 'injected-module' }, ({ path }) => {\n const namedImports = imports.find((entry) => entry.moduleIdentifier === path)?.namedImports ?? [];\n return {\n contents: `\n const { ${namedImports.join(',')} } = window.__DXOS_SANDBOX_MODULES__[${JSON.stringify(path)}];\n export { ${namedImports.join(',')} };\n export default window.__DXOS_SANDBOX_MODULES__[${JSON.stringify(path)}].default;\n `,\n loader: 'tsx',\n };\n });\n },\n },\n httpPlugin,\n ],\n });\n\n log('compile complete', result.metafile);\n\n return await createResult({\n imports: this.analyzeImports(result),\n bundle: result.outputFiles![0].text,\n });\n } catch (err) {\n return await createResult({ error: err });\n }\n }\n\n // TODO(dmaretskyi): In the future we can replace the compiler with SWC with plugins running in WASM.\n analyzeImports(result: BuildResult): Import[] {\n invariant(result.outputFiles);\n\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, result.outputFiles[0].text);\n return Object.values(result.metafile!.outputs)[0].imports.map((entry): Import => {\n const namedImports: string[] = [];\n\n const parsedImport = parsedImports.find((capture) => capture?.[4] === entry.path);\n if (parsedImport?.[2]) {\n NAMED_IMPORTS_REGEX.lastIndex = 0;\n const namedImportsMatch = NAMED_IMPORTS_REGEX.exec(parsedImport[2]);\n if (namedImportsMatch) {\n namedImportsMatch[1].split(',').forEach((importName) => {\n namedImports.push(importName.trim());\n });\n }\n }\n\n return {\n moduleUrl: entry.path,\n defaultImport: !!parsedImport?.[1],\n namedImports,\n };\n });\n }\n\n analyzeSourceFileImports(code: string) {\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, code);\n return parsedImports.map((capture) => {\n return {\n defaultImportName: capture[1],\n namedImports: capture[2]?.split(',').map((importName) => importName.trim()),\n wildcardImportName: capture[3],\n moduleIdentifier: capture[4],\n quotes: capture[5],\n };\n });\n }\n}\n\n// https://regex101.com/r/FEN5ks/1\n// https://stackoverflow.com/a/73265022\n// $1 = default import name (can be non-existent)\n// $2 = destructured exports (can be non-existent)\n// $3 = wildcard import name (can be non-existent)\n// $4 = module identifier\n// $5 = quotes used (either ' or \")\nconst IMPORT_REGEX =\n /import(?:(?:(?:[ \\n\\t]+([^ *\\n\\t{},]+)[ \\n\\t]*(?:,|[ \\n\\t]+))?([ \\n\\t]*{(?:[ \\n\\t]*[^ \\n\\t\"'{}]+[ \\n\\t]*,?)+})?[ \\n\\t]*)|[ \\n\\t]*\\*[ \\n\\t]*as[ \\n\\t]+([^ \\n\\t{}]+)[ \\n\\t]+)from[ \\n\\t]*(?:['\"])([^'\"\\n]+)(['\"])/gm;\n\nconst NAMED_IMPORTS_REGEX = /[ \\n\\t]*{((?:[ \\n\\t]*[^ \\n\\t\"'{}]+[ \\n\\t]*,?)+)}[ \\n\\t]*/gm;\n\nconst allMatches = (regex: RegExp, str: string) => {\n regex.lastIndex = 0;\n\n let match;\n const matches = [];\n while ((match = regex.exec(str))) {\n matches.push(match);\n }\n\n return matches;\n};\n\ntype ParsedImport = {\n defaultImportName?: string;\n namedImports: string[];\n wildcardImportName?: string;\n moduleIdentifier: string;\n quotes: string;\n};\n\nconst analyzeSourceFileImports = (code: string): ParsedImport[] => {\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, code);\n return parsedImports.map((capture) => {\n return {\n defaultImportName: capture[1],\n namedImports: capture[2]\n ?.trim()\n .slice(1, -1)\n .split(',')\n .map((importName) => importName.trim()),\n wildcardImportName: capture[3],\n moduleIdentifier: capture[4],\n quotes: capture[5],\n };\n });\n};\n\nconst httpPlugin: Plugin = {\n name: 'http',\n setup: (build) => {\n // Intercept import paths starting with \"http:\" and \"https:\" so esbuild doesn't attempt to map them to a file system location.\n // Tag them with the \"http-url\" namespace to associate them with this plugin.\n build.onResolve({ filter: /^https?:\\/\\// }, (args) => ({\n path: args.path,\n namespace: 'http-url',\n }));\n\n // We also want to intercept all import paths inside downloaded files and resolve them against the original URL.\n // All of these files will be in the \"http-url\" namespace.\n // Make sure to keep the newly resolved URL in the \"http-url\" namespace so imports inside it will also be resolved as URLs recursively.\n build.onResolve({ filter: /.*/, namespace: 'http-url' }, (args) => ({\n path: new URL(args.path, args.importer).toString(),\n namespace: 'http-url',\n }));\n\n // When a URL is loaded, we want to actually download the content from the internet.\n // This has just enough logic to be able to handle the example import from unpkg.com but in reality this would probably need to be more complex.\n build.onLoad({ filter: /.*/, namespace: 'http-url' }, async (args) => {\n const response = await fetch(args.path);\n return { contents: await response.text(), loader: 'jsx' };\n });\n },\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// @ts-ignore\nimport { transformServerSentEvents } from 'https://esm.sh/@dxos/script-toolbox';\n\n/**\n * Chatbot that answers questions based on the context data.\n */\nexport default async ({\n event: {\n data: { request },\n },\n context: { space, ai },\n}: any) => {\n const textBody = await request.text();\n let parsedRequest: any;\n try {\n parsedRequest = JSON.parse(textBody);\n } catch (err) {\n const answer = await ai.run('@cf/meta/llama-3.1-8b-instruct', {\n stream: true,\n prompt: `\n Using only the context data below to answer the user's question.\n If you cannot answer the question from the provided content, then reply with \"I don't know.\"\n\n CONTEXT:\n ${await getContext({ space })}\n\n QUESTION:\n ${textBody}\n `,\n });\n return new Response(transformServerSentEvents(answer));\n }\n\n const promptId = parsedRequest.trigger.promptId;\n const promptObject = await space.crud.query({ id: promptId }).first();\n\n if (parsedRequest.data.objects.length !== 1) {\n return new Response('Message batches not supported.');\n }\n\n const messageId = parsedRequest.data.objects[0];\n let message;\n try {\n message = await space.crud.query({ id: messageId }).first();\n } catch (err) {\n return new Response('Message not replicated yet.', { status: 409 });\n }\n\n if (message.text.includes('--------')) {\n return new Response('Message was already processed.');\n }\n\n let prompt = promptObject.template;\n for (const input of promptObject.inputs) {\n let value: string | null = null;\n if (input.type === ChainInputType.VALUE) {\n value = String(input.value);\n } else if (input.type === ChainInputType.RETRIEVER) {\n value = await getContext({ space });\n } else if (input.type === ChainInputType.PASS_THROUGH) {\n value = message.text;\n }\n if (value) {\n prompt = prompt.replaceAll(`{${input.name}}`, value);\n }\n }\n\n const answer = await ai.run('@cf/meta/llama-3.1-8b-instruct', {\n stream: false,\n prompt,\n });\n const response = { response: answer.response, prompt, message };\n const textWithAnswer = message.text + '\\n--------\\n\\n' + answer.response;\n await space.crud.update({ id: messageId }, { text: textWithAnswer });\n\n return new Response(JSON.stringify(response));\n};\n\nconst getContext = async ({ space }: any) => {\n let context = '';\n const { objects: docs } = await space.crud.query({ __typename: 'dxos.org/type/Document' }).run();\n for (const doc of docs) {\n const { content } = await space.crud.query({ id: doc.content }).first();\n context += content + '\\n\\n';\n }\n return context;\n};\n\nenum ChainInputType {\n VALUE = 0,\n PASS_THROUGH = 1,\n RETRIEVER = 2,\n FUNCTION = 3,\n QUERY = 4,\n RESOLVER = 5,\n CONTEXT = 6,\n SCHEMA = 7,\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// @ts-ignore\nimport { Chess } from 'https://esm.sh/chess.js@0.13.1';\n\n/**\n * Plays a random move in a chess game.\n */\nexport default async ({\n event: {\n data: { request },\n },\n context: { space },\n}: any) => {\n const {\n data: {\n objects: [gameId],\n player = 'b',\n },\n } = await request.json();\n\n const { pgn } = await space.crud.query({ id: gameId }).first();\n const game = new Chess();\n game.load_pgn(pgn);\n if (game.turn() !== player) {\n return new Response('Invalid turn', { status: 409 });\n }\n\n const moves = game.moves();\n const move = moves[Math.floor(Math.random() * moves.length)];\n if (!move) {\n return new Response('No legal moves', { status: 406 });\n }\n\n game.move(move);\n const newPgn = game.pgn();\n await space.crud.update({ id: gameId }, { pgn: newPgn });\n return new Response(game.ascii());\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Echos the request data.\n */\nexport default async ({\n event: {\n data: { request },\n },\n}: any) => {\n const data = await request.json();\n return new Response(JSON.stringify(data ?? {}), { headers: { 'Content-Type': 'application/json' } });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Stores a message into ECHO Mailbox object.\n */\nexport default async ({\n event: {\n data: { request },\n },\n context: { space },\n}: any) => {\n const {\n data: {\n objects: [message],\n },\n } = await request.json();\n\n const mailbox = await space.crud.query({ __typename: 'dxos.org/type/MailboxType' }).first();\n if (!mailbox) {\n return new Response('Mailbox not found.', { status: 500 });\n }\n\n await space.crud.push(\n { id: mailbox.id },\n {\n sender: { email: message.from },\n timestamp: new Date(message.created).toISOString(),\n text: message.body,\n properties: {\n subject: message.subject,\n to: [{ email: message.to }],\n },\n },\n );\n return new Response(JSON.stringify(message));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Returns the exchange rate between two currencies.\n */\nexport default async ({\n event: {\n data: { request },\n },\n}: any) => {\n const { args: [from = 'EUR', to = 'USD'] = [] } = await request.json();\n\n const res = await fetch(`https://free.ratesdb.com/v1/rates?from=${from}&to=${to}`);\n const {\n data: { rates },\n } = await res.json();\n\n return new Response(rates[to].toString());\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// @ts-ignore\nimport chat from './templates/chat.ts?raw';\n// @ts-ignore\nimport chess from './templates/chess.ts?raw';\n// @ts-ignore\nimport echo from './templates/echo.ts?raw';\n// @ts-ignore\nimport email from './templates/email.ts?raw';\n// @ts-ignore\nimport forex from './templates/forex.ts?raw';\n\nconst removeHeader = (str: string) => str.split('\\n').slice(4).join('\\n');\n\nexport type Template = {\n id: string;\n name: string;\n source: string;\n presetId?: string;\n};\n\nexport const templates: Template[] = [\n {\n id: 'dxos.org/script/echo',\n name: 'Echo',\n source: removeHeader(echo),\n },\n {\n id: 'dxos.org/script/forex',\n name: 'Forex',\n source: removeHeader(forex),\n },\n {\n id: 'dxos.org/script/gpt',\n name: 'Gpt',\n source: removeHeader(chat),\n presetId: 'dxos.org/function/gpt',\n },\n {\n id: 'dxos.org/script/chess',\n name: 'Chess',\n source: removeHeader(chess),\n presetId: 'dxos.org/function/chess',\n },\n {\n id: 'dxos.org/script/email',\n name: 'Email',\n source: removeHeader(email),\n presetId: 'dxos.org/function/email',\n },\n];\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAKA,0BAAiE;AAEjE,oBAA6B;AAC7B,uBAA0B;AAC1B,iBAAoB;;AAsBpB,IAAIA;AACG,IAAMC,oBAAoB,OAAOC,YAAAA;AACtC,SAAOF,oBAAgBG,gCAAW;IAChCC,SAASF,QAAQG;EACnB,CAAA;AACF;AAKO,IAAMC,UAAN,MAAMA;EACXC,YAA6BC,UAA0B;SAA1BA,WAAAA;EAA2B;EAExD,MAAMC,OAAOC,QAAwC;AACnD,UAAM,EAAEC,kBAAkBC,iBAAiB,GAAGV,QAAAA,IAAY,KAAKM;AAE/D,UAAMK,eAAe,OAAOC,WAAAA;AAC1B,aAAO;QACLC,WAAWC,KAAKC,IAAG;QACnBC,YAAYC,OAAOC,KAAK,MAAMC,2BAAaC,OAAO,WAAWH,OAAOC,KAAKV,MAAAA,CAAAA,CAAAA;QACzE,GAAGI;MACL;IACF;AAEA,QAAI,KAAKN,SAASe,aAAa,WAAW;AACxCC,sCAAUxB,aAAa,6BAAA;;;;;;;;;AACvB,YAAMA;IACR;AAEA,UAAMyB,UAAUC,yBAAyBhB,MAAAA;AAGzC,QAAI;AACF,YAAMI,SAAS,UAAMa,2BAAM;QACzBJ,UAAUrB,QAAQqB;QAClBK,YAAY;UAAC;UAAW;;QACxBC,UAAU;QACVC,OAAO;QACPC,aAAa;UAAC;;QACdtB,QAAQ;QACRuB,QAAQ;QACRC,SAAS;UACP;YACEC,MAAM;YACNC,OAAO,CAACR,WAAAA;AACNA,qBAAMS,UAAU;gBAAEC,QAAQ;cAAoB,GAAG,CAAC,EAAEC,KAAI,MAAE;AACxD,uBAAO;kBAAEA;kBAAMC,UAAU;gBAAK;cAChC,CAAA;AAEAZ,qBAAMS,UAAU;gBAAEC,QAAQ;cAAmB,GAAG,CAAC,EAAEC,KAAI,MAAE;AACvD,uBAAO;kBAAEA,MAAM;kBAAgBC,UAAU;gBAAK;cAChD,CAAA;AAEAZ,qBAAMS,UAAU;gBAAEC,QAAQ;cAAW,GAAG,CAAC,EAAEC,KAAI,MAAE;AAC/C,uBAAO;kBAAEA,MAAMA,KAAKE,MAAM,GAAA,EAAK,CAAA;kBAAIC,WAAW;gBAAS;cACzD,CAAA;AAEAd,qBAAMe,OAAO;gBAAEL,QAAQ;gBAAMI,WAAW;cAAS,GAAG,CAAC,EAAEH,KAAI,MAAE;AAC3D,oBAAIA,SAAS,YAAY;AACvB,yBAAO;oBACLK,UAAUjC;oBACVkC,QAAQ;kBACV;gBACF;cACF,CAAA;AAEA,yBAAWC,WAAUjC,iBAAiB;AACpCe,uBAAMS,UAAU;kBAAEC,QAAQ,IAAIS,OAAO,IAAID,OAAAA,GAAS;gBAAE,GAAG,CAAC,EAAEP,KAAI,MAAE;AAC9D,yBAAO;oBAAEA;oBAAMG,WAAW;kBAAkB;gBAC9C,CAAA;cACF;AAEAd,qBAAMe,OAAO;gBAAEL,QAAQ;gBAAMI,WAAW;cAAkB,GAAG,CAAC,EAAEH,KAAI,MAAE;AACpE,sBAAMS,eAAetB,QAAQuB,KAAK,CAACC,UAAUA,MAAMC,qBAAqBZ,IAAAA,GAAOS,gBAAgB,CAAA;AAC/F,uBAAO;kBACLJ,UAAU;4BACAI,aAAaI,KAAK,GAAA,CAAA,wCAA4CC,KAAKC,UAAUf,IAAAA,CAAAA;6BAC5ES,aAAaI,KAAK,GAAA,CAAA;mEACoBC,KAAKC,UAAUf,IAAAA,CAAAA;;kBAEhEM,QAAQ;gBACV;cACF,CAAA;YACF;UACF;UACAU;;MAEJ,CAAA;AAEAC,0BAAI,oBAAoBzC,OAAOe,UAAQ;;;;;;AAEvC,aAAO,MAAMhB,aAAa;QACxBY,SAAS,KAAK+B,eAAe1C,MAAAA;QAC7BL,QAAQK,OAAO2C,YAAa,CAAA,EAAGC;MACjC,CAAA;IACF,SAASC,KAAK;AACZ,aAAO,MAAM9C,aAAa;QAAE+C,OAAOD;MAAI,CAAA;IACzC;EACF;;EAGAH,eAAe1C,QAA+B;AAC5CU,oCAAUV,OAAO2C,aAAW,QAAA;;;;;;;;;AAG5B,UAAMI,gBAAgBC,WAAWC,cAAcjD,OAAO2C,YAAY,CAAA,EAAGC,IAAI;AACzE,WAAOM,OAAOC,OAAOnD,OAAOe,SAAUqC,OAAO,EAAE,CAAA,EAAGzC,QAAQ0C,IAAI,CAAClB,UAAAA;AAC7D,YAAMF,eAAyB,CAAA;AAE/B,YAAMqB,eAAeP,cAAcb,KAAK,CAACqB,YAAYA,UAAU,CAAA,MAAOpB,MAAMX,IAAI;AAChF,UAAI8B,eAAe,CAAA,GAAI;AACrBE,4BAAoBC,YAAY;AAChC,cAAMC,oBAAoBF,oBAAoBG,KAAKL,aAAa,CAAA,CAAE;AAClE,YAAII,mBAAmB;AACrBA,4BAAkB,CAAA,EAAGhC,MAAM,GAAA,EAAKkC,QAAQ,CAACC,eAAAA;AACvC5B,yBAAa6B,KAAKD,WAAWE,KAAI,CAAA;UACnC,CAAA;QACF;MACF;AAEA,aAAO;QACLC,WAAW7B,MAAMX;QACjByC,eAAe,CAAC,CAACX,eAAe,CAAA;QAChCrB;MACF;IACF,CAAA;EACF;EAEArB,yBAAyBsD,MAAc;AAErC,UAAMnB,gBAAgBC,WAAWC,cAAciB,IAAAA;AAC/C,WAAOnB,cAAcM,IAAI,CAACE,YAAAA;AACxB,aAAO;QACLY,mBAAmBZ,QAAQ,CAAA;QAC3BtB,cAAcsB,QAAQ,CAAA,GAAI7B,MAAM,GAAA,EAAK2B,IAAI,CAACQ,eAAeA,WAAWE,KAAI,CAAA;QACxEK,oBAAoBb,QAAQ,CAAA;QAC5BnB,kBAAkBmB,QAAQ,CAAA;QAC1Bc,QAAQd,QAAQ,CAAA;MAClB;IACF,CAAA;EACF;AACF;AASA,IAAMN,eACJ;AAEF,IAAMO,sBAAsB;AAE5B,IAAMR,aAAa,CAACsB,OAAeC,QAAAA;AACjCD,QAAMb,YAAY;AAElB,MAAIe;AACJ,QAAMC,UAAU,CAAA;AAChB,SAAQD,QAAQF,MAAMX,KAAKY,GAAAA,GAAO;AAChCE,YAAQX,KAAKU,KAAAA;EACf;AAEA,SAAOC;AACT;AAUA,IAAM7D,2BAA2B,CAACsD,SAAAA;AAEhC,QAAMnB,gBAAgBC,WAAWC,cAAciB,IAAAA;AAC/C,SAAOnB,cAAcM,IAAI,CAACE,YAAAA;AACxB,WAAO;MACLY,mBAAmBZ,QAAQ,CAAA;MAC3BtB,cAAcsB,QAAQ,CAAA,GAClBQ,KAAAA,EACDW,MAAM,GAAG,EAAC,EACVhD,MAAM,GAAA,EACN2B,IAAI,CAACQ,eAAeA,WAAWE,KAAI,CAAA;MACtCK,oBAAoBb,QAAQ,CAAA;MAC5BnB,kBAAkBmB,QAAQ,CAAA;MAC1Bc,QAAQd,QAAQ,CAAA;IAClB;EACF,CAAA;AACF;AAEA,IAAMf,aAAqB;EACzBpB,MAAM;EACNC,OAAO,CAACR,WAAAA;AAGNA,WAAMS,UAAU;MAAEC,QAAQ;IAAe,GAAG,CAACoD,UAAU;MACrDnD,MAAMmD,KAAKnD;MACXG,WAAW;IACb,EAAA;AAKAd,WAAMS,UAAU;MAAEC,QAAQ;MAAMI,WAAW;IAAW,GAAG,CAACgD,UAAU;MAClEnD,MAAM,IAAIoD,IAAID,KAAKnD,MAAMmD,KAAKE,QAAQ,EAAEC,SAAQ;MAChDnD,WAAW;IACb,EAAA;AAIAd,WAAMe,OAAO;MAAEL,QAAQ;MAAMI,WAAW;IAAW,GAAG,OAAOgD,SAAAA;AAC3D,YAAMI,WAAW,MAAMC,MAAML,KAAKnD,IAAI;AACtC,aAAO;QAAEK,UAAU,MAAMkD,SAASnC,KAAI;QAAId,QAAQ;MAAM;IAC1D,CAAA;EACF;AACF;ACzPA,IAAA,eAAA;ACAA,IAAA,gBAAA;ACAA,IAAA,eAAA;ACAA,IAAA,gBAAA;ACAA,IAAA,gBAAA;ACeA,IAAMmD,eAAe,CAACV,QAAgBA,IAAI7C,MAAM,IAAA,EAAMgD,MAAM,CAAA,EAAGrC,KAAK,IAAA;AAS7D,IAAM6C,YAAwB;EACnC;IACEC,IAAI;IACJ/D,MAAM;IACNxB,QAAQqF,aAAaG,YAAAA;EACvB;EACA;IACED,IAAI;IACJ/D,MAAM;IACNxB,QAAQqF,aAAaI,aAAAA;EACvB;EACA;IACEF,IAAI;IACJ/D,MAAM;IACNxB,QAAQqF,aAAaK,YAAAA;IACrBC,UAAU;EACZ;EACA;IACEJ,IAAI;IACJ/D,MAAM;IACNxB,QAAQqF,aAAaO,aAAAA;IACrBD,UAAU;EACZ;EACA;IACEJ,IAAI;IACJ/D,MAAM;IACNxB,QAAQqF,aAAaQ,aAAAA;IACrBF,UAAU;EACZ;;",
6
+ "names": ["initialized", "initializeBundler", "options", "initialize", "wasmURL", "wasmUrl", "Bundler", "constructor", "_options", "bundle", "source", "sandboxedModules", "providedModules", "createResult", "result", "timestamp", "Date", "now", "sourceHash", "Buffer", "from", "subtleCrypto", "digest", "platform", "invariant", "imports", "analyzeSourceFileImports", "build", "conditions", "metafile", "write", "entryPoints", "format", "plugins", "name", "setup", "onResolve", "filter", "path", "external", "split", "namespace", "onLoad", "contents", "loader", "module", "RegExp", "namedImports", "find", "entry", "moduleIdentifier", "join", "JSON", "stringify", "httpPlugin", "log", "analyzeImports", "outputFiles", "text", "err", "error", "parsedImports", "allMatches", "IMPORT_REGEX", "Object", "values", "outputs", "map", "parsedImport", "capture", "NAMED_IMPORTS_REGEX", "lastIndex", "namedImportsMatch", "exec", "forEach", "importName", "push", "trim", "moduleUrl", "defaultImport", "code", "defaultImportName", "wildcardImportName", "quotes", "regex", "str", "match", "matches", "slice", "args", "URL", "importer", "toString", "response", "fetch", "removeHeader", "templates", "id", "echo", "forex", "chat", "presetId", "chess", "email"]
7
+ }