@dxos/plugin-script 0.6.13 → 0.6.14-main.1366248
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/lib/browser/AutomationPanel-XLL2ZXGS.mjs +78 -0
- package/dist/lib/browser/AutomationPanel-XLL2ZXGS.mjs.map +7 -0
- package/dist/lib/browser/ScriptContainer-YXH4MFEO.mjs +415 -0
- package/dist/lib/browser/ScriptContainer-YXH4MFEO.mjs.map +7 -0
- package/dist/lib/browser/chunk-C7VBULMK.mjs +18 -0
- package/dist/lib/browser/chunk-C7VBULMK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-RHEZ5LUU.mjs → chunk-G6H56WFS.mjs} +51 -2
- package/dist/lib/browser/{chunk-RHEZ5LUU.mjs.map → chunk-G6H56WFS.mjs.map} +4 -4
- package/dist/lib/browser/{chunk-DL5XQRQM.mjs → chunk-KHNN3F7J.mjs} +18 -6
- package/dist/lib/browser/chunk-KHNN3F7J.mjs.map +7 -0
- package/dist/lib/browser/chunk-NCZUJKJE.mjs +236 -0
- package/dist/lib/browser/chunk-NCZUJKJE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-O4LWBX6A.mjs → chunk-USXWNH3S.mjs} +2 -2
- package/dist/lib/browser/{chunk-O4LWBX6A.mjs.map → chunk-USXWNH3S.mjs.map} +2 -2
- package/dist/lib/browser/edge/index.mjs +5 -1
- package/dist/lib/browser/index.mjs +185 -62
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +1 -1
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node/AutomationPanel-OSPAFWZU.cjs +100 -0
- package/dist/lib/node/AutomationPanel-OSPAFWZU.cjs.map +7 -0
- package/dist/lib/node/ScriptContainer-FWHFEIHK.cjs +417 -0
- package/dist/lib/node/ScriptContainer-FWHFEIHK.cjs.map +7 -0
- package/dist/lib/node/{TypescriptEditor-M3WWFIP2.cjs → chunk-6LYX73ZT.cjs} +19 -8
- package/dist/lib/node/chunk-6LYX73ZT.cjs.map +7 -0
- package/dist/lib/node/{chunk-4GTXIELQ.cjs → chunk-ACLCRWDB.cjs} +44 -6
- package/dist/lib/node/chunk-ACLCRWDB.cjs.map +7 -0
- package/dist/lib/node/chunk-BJ4WIWCP.cjs +265 -0
- package/dist/lib/node/chunk-BJ4WIWCP.cjs.map +7 -0
- package/dist/lib/node/{chunk-5RBVXKXT.cjs → chunk-CPNHUAFN.cjs} +6 -6
- package/dist/lib/node/{chunk-5RBVXKXT.cjs.map → chunk-CPNHUAFN.cjs.map} +2 -2
- package/dist/lib/node/{chunk-PFH3ROEH.cjs → chunk-FY5KKL5N.cjs} +22 -8
- package/dist/lib/node/chunk-FY5KKL5N.cjs.map +7 -0
- package/dist/lib/node/edge/index.cjs +12 -8
- package/dist/lib/node/edge/index.cjs.map +2 -2
- package/dist/lib/node/index.cjs +196 -81
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.cjs +3 -3
- package/dist/lib/node/meta.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types/index.cjs +5 -5
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/AutomationPanel-KJNL6ARP.mjs +79 -0
- package/dist/lib/node-esm/AutomationPanel-KJNL6ARP.mjs.map +7 -0
- package/dist/lib/node-esm/ScriptContainer-6U5WJFRB.mjs +416 -0
- package/dist/lib/node-esm/ScriptContainer-6U5WJFRB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-2NPZGQGA.mjs +47 -0
- package/dist/lib/node-esm/chunk-2NPZGQGA.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-DXWSRDEN.mjs +237 -0
- package/dist/lib/node-esm/chunk-DXWSRDEN.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-LDLNTVAK.mjs +280 -0
- package/dist/lib/node-esm/chunk-LDLNTVAK.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QMTTZYLF.mjs +255 -0
- package/dist/lib/node-esm/chunk-QMTTZYLF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SLTZMY34.mjs +20 -0
- package/dist/lib/node-esm/chunk-SLTZMY34.mjs.map +7 -0
- package/dist/lib/node-esm/edge/index.mjs +24 -0
- package/dist/lib/node-esm/index.mjs +415 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/meta.mjs +10 -0
- package/dist/lib/node-esm/meta.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +13 -0
- package/dist/lib/node-esm/types/index.mjs.map +7 -0
- package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +17 -0
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -0
- package/dist/types/src/components/AutomationPanel/index.d.ts +4 -0
- package/dist/types/src/components/AutomationPanel/index.d.ts.map +1 -0
- package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +7 -0
- package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -0
- package/dist/types/src/components/DebugPanel/index.d.ts +2 -0
- package/dist/types/src/components/DebugPanel/index.d.ts.map +1 -0
- package/dist/types/src/components/{ScriptBlock/FrameContainer → FrameContainer}/FrameContainer.d.ts +1 -1
- package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -0
- package/dist/types/src/components/FrameContainer/frame.d.ts.map +1 -0
- package/dist/types/src/components/FrameContainer/index.d.ts.map +1 -0
- package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts +1 -3
- package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts.map +1 -1
- package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts +3 -8
- package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScriptContainer.d.ts +5 -0
- package/dist/types/src/components/ScriptContainer.d.ts.map +1 -0
- package/dist/types/src/components/ScriptEditor.d.ts +4 -5
- package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts +6 -0
- package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -0
- package/dist/types/src/components/ScriptSettings/index.d.ts +2 -0
- package/dist/types/src/components/ScriptSettings/index.d.ts.map +1 -0
- package/dist/types/src/components/ScriptSettingsPanel.d.ts +7 -0
- package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +23 -0
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +14 -0
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/index.d.ts +2 -0
- package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
- package/dist/types/src/components/{TypescriptEditor.d.ts → TypescriptEditor/TypescriptEditor.d.ts} +1 -2
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -0
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +6 -0
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -0
- package/dist/types/src/components/TypescriptEditor/index.d.ts +2 -0
- package/dist/types/src/components/TypescriptEditor/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +4 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/edge/functions.d.ts +7 -0
- package/dist/types/src/edge/functions.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +5 -9
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/templates/chat.d.ts +6 -0
- package/dist/types/src/templates/chat.d.ts.map +1 -0
- package/dist/types/src/templates/chess.d.ts +6 -0
- package/dist/types/src/templates/chess.d.ts.map +1 -0
- package/dist/types/src/templates/echo.d.ts +6 -0
- package/dist/types/src/templates/echo.d.ts.map +1 -0
- package/dist/types/src/templates/email.d.ts +6 -0
- package/dist/types/src/templates/email.d.ts.map +1 -0
- package/dist/types/src/templates/forex.d.ts +6 -0
- package/dist/types/src/templates/forex.d.ts.map +1 -0
- package/dist/types/src/templates.d.ts +8 -0
- package/dist/types/src/templates.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +7 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/script.d.ts +4 -4
- package/dist/types/src/types/types.d.ts +4 -3
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/package.json +59 -64
- package/src/ScriptPlugin.tsx +47 -41
- package/src/bundler/bundler.test.ts +12 -2
- package/src/components/AutomationPanel/AutomationPanel.tsx +101 -0
- package/src/components/AutomationPanel/index.ts +9 -0
- package/src/components/{DebugPanel.tsx → DebugPanel/DebugPanel.tsx} +74 -96
- package/src/components/DebugPanel/index.ts +5 -0
- package/src/components/{ScriptBlock/FrameContainer → FrameContainer}/FrameContainer.tsx +1 -1
- package/src/components/ScriptBlock/ScriptBlock.stories.tsx +15 -14
- package/src/components/ScriptBlock/ScriptBlock.tsx +23 -51
- package/src/components/ScriptContainer.tsx +22 -0
- package/src/components/ScriptEditor.tsx +51 -62
- package/src/components/ScriptSettings/ScriptSettings.tsx +47 -0
- package/src/components/ScriptSettings/index.ts +5 -0
- package/src/components/ScriptSettingsPanel.tsx +105 -0
- package/src/components/Toolbar/Toolbar.stories.tsx +30 -0
- package/src/components/Toolbar/Toolbar.tsx +177 -0
- package/src/components/{ScriptBlock/Splitter → Toolbar}/index.ts +1 -1
- package/src/components/{TypescriptEditor.stories.tsx → TypescriptEditor/TypescriptEditor.stories.tsx} +17 -35
- package/src/components/{TypescriptEditor.tsx → TypescriptEditor/TypescriptEditor.tsx} +1 -3
- package/src/components/TypescriptEditor/index.ts +5 -0
- package/src/components/index.ts +6 -3
- package/src/edge/functions.ts +19 -0
- package/src/meta.ts +16 -0
- package/src/templates/chat.ts +102 -0
- package/src/templates/chess.ts +41 -0
- package/src/templates/echo.ts +15 -0
- package/src/templates/email.ts +38 -0
- package/src/templates/forex.ts +21 -0
- package/src/templates.ts +54 -0
- package/src/translations.ts +7 -0
- package/src/types/types.ts +9 -5
- package/dist/lib/browser/ScriptEditor-5Y3EROG3.mjs +0 -513
- package/dist/lib/browser/ScriptEditor-5Y3EROG3.mjs.map +0 -7
- package/dist/lib/browser/TypescriptEditor-GPE72Y6I.mjs +0 -9
- package/dist/lib/browser/chunk-DL5XQRQM.mjs.map +0 -7
- package/dist/lib/browser/chunk-JBACGDOJ.mjs +0 -21
- package/dist/lib/browser/chunk-JBACGDOJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-MRGOT5RF.mjs +0 -78
- package/dist/lib/browser/chunk-MRGOT5RF.mjs.map +0 -7
- package/dist/lib/node/ScriptEditor-YCUQFWQM.cjs +0 -526
- package/dist/lib/node/ScriptEditor-YCUQFWQM.cjs.map +0 -7
- package/dist/lib/node/TypescriptEditor-M3WWFIP2.cjs.map +0 -7
- package/dist/lib/node/chunk-4GTXIELQ.cjs.map +0 -7
- package/dist/lib/node/chunk-4VMNBXWU.cjs +0 -54
- package/dist/lib/node/chunk-4VMNBXWU.cjs.map +0 -7
- package/dist/lib/node/chunk-IMLDKD5Y.cjs +0 -111
- package/dist/lib/node/chunk-IMLDKD5Y.cjs.map +0 -7
- package/dist/lib/node/chunk-PFH3ROEH.cjs.map +0 -7
- package/dist/types/src/components/DebugPanel.d.ts +0 -9
- package/dist/types/src/components/DebugPanel.d.ts.map +0 -1
- package/dist/types/src/components/ScriptBlock/FrameContainer/FrameContainer.d.ts.map +0 -1
- package/dist/types/src/components/ScriptBlock/FrameContainer/frame.d.ts.map +0 -1
- package/dist/types/src/components/ScriptBlock/FrameContainer/index.d.ts.map +0 -1
- package/dist/types/src/components/ScriptBlock/Splitter/Splitter.d.ts +0 -15
- package/dist/types/src/components/ScriptBlock/Splitter/Splitter.d.ts.map +0 -1
- package/dist/types/src/components/ScriptBlock/Splitter/Splitter.stories.d.ts +0 -13
- package/dist/types/src/components/ScriptBlock/Splitter/Splitter.stories.d.ts.map +0 -1
- package/dist/types/src/components/ScriptBlock/Splitter/index.d.ts +0 -2
- package/dist/types/src/components/ScriptBlock/Splitter/index.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar.d.ts +0 -13
- package/dist/types/src/components/Toolbar.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +0 -14
- package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
- package/dist/types/src/components/TypescriptEditor.d.ts.map +0 -1
- package/dist/types/src/components/TypescriptEditor.stories.d.ts +0 -10
- package/dist/types/src/components/TypescriptEditor.stories.d.ts.map +0 -1
- package/src/components/ScriptBlock/Splitter/Splitter.stories.tsx +0 -37
- package/src/components/ScriptBlock/Splitter/Splitter.tsx +0 -52
- package/src/components/Toolbar.stories.tsx +0 -17
- package/src/components/Toolbar.tsx +0 -147
- package/src/meta.tsx +0 -19
- /package/dist/lib/{browser/TypescriptEditor-GPE72Y6I.mjs.map → node-esm/edge/index.mjs.map} +0 -0
- /package/dist/types/src/components/{ScriptBlock/FrameContainer → FrameContainer}/frame.d.ts +0 -0
- /package/dist/types/src/components/{ScriptBlock/FrameContainer → FrameContainer}/index.d.ts +0 -0
- /package/src/components/{ScriptBlock/FrameContainer → FrameContainer}/frame.html +0 -0
- /package/src/components/{ScriptBlock/FrameContainer → FrameContainer}/frame.tsx +0 -0
- /package/src/components/{ScriptBlock/FrameContainer → FrameContainer}/index.ts +0 -0
|
@@ -0,0 +1,417 @@
|
|
|
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_FWHFEIHK_exports = {};
|
|
30
|
+
__export(ScriptContainer_FWHFEIHK_exports, {
|
|
31
|
+
default: () => ScriptContainer_default
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(ScriptContainer_FWHFEIHK_exports);
|
|
34
|
+
var import_chunk_ACLCRWDB = require("./chunk-ACLCRWDB.cjs");
|
|
35
|
+
var import_chunk_BJ4WIWCP = require("./chunk-BJ4WIWCP.cjs");
|
|
36
|
+
var import_chunk_FY5KKL5N = require("./chunk-FY5KKL5N.cjs");
|
|
37
|
+
var import_chunk_CPNHUAFN = require("./chunk-CPNHUAFN.cjs");
|
|
38
|
+
var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
|
|
39
|
+
var import_react = __toESM(require("react"));
|
|
40
|
+
var import_echo = require("@dxos/react-client/echo");
|
|
41
|
+
var import_react_ui_attention = require("@dxos/react-ui-attention");
|
|
42
|
+
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
43
|
+
var import_prettier = require("prettier");
|
|
44
|
+
var import_estree = __toESM(require("prettier/plugins/estree"));
|
|
45
|
+
var import_typescript = __toESM(require("prettier/plugins/typescript"));
|
|
46
|
+
var import_react2 = __toESM(require("react"));
|
|
47
|
+
var import_log = require("@dxos/log");
|
|
48
|
+
var import_react_client = require("@dxos/react-client");
|
|
49
|
+
var import_echo2 = require("@dxos/react-client/echo");
|
|
50
|
+
var import_halo = require("@dxos/react-client/halo");
|
|
51
|
+
var import_react_ui = require("@dxos/react-ui");
|
|
52
|
+
var import_react_ui_editor = require("@dxos/react-ui-editor");
|
|
53
|
+
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
|
54
|
+
var import_react3 = __toESM(require("react"));
|
|
55
|
+
var import_react_ui2 = require("@dxos/react-ui");
|
|
56
|
+
var import_lang_javascript = require("@codemirror/lang-javascript");
|
|
57
|
+
var import_codemirror_ts = require("@valtown/codemirror-ts");
|
|
58
|
+
var import_react4 = __toESM(require("react"));
|
|
59
|
+
var import_react_ui3 = require("@dxos/react-ui");
|
|
60
|
+
var import_react_ui_editor2 = require("@dxos/react-ui-editor");
|
|
61
|
+
var import_util = require("@dxos/util");
|
|
62
|
+
var Toolbar = ({ classNames, deployed, error, functionUrl, view, templates: templates2, onDeploy, onFormat, onViewChange, onTemplateSelect }) => {
|
|
63
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
|
|
64
|
+
const [pending, setPending] = (0, import_react3.useState)(false);
|
|
65
|
+
const handleCopyLink = async () => {
|
|
66
|
+
if (!functionUrl) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
await navigator.clipboard.writeText(functionUrl);
|
|
70
|
+
};
|
|
71
|
+
const handleDeploy = async () => {
|
|
72
|
+
if (!pending) {
|
|
73
|
+
setPending(true);
|
|
74
|
+
await onDeploy?.();
|
|
75
|
+
setPending(false);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ElevationProvider, {
|
|
79
|
+
elevation: "chrome"
|
|
80
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Root, {
|
|
81
|
+
classNames: [
|
|
82
|
+
"p-1",
|
|
83
|
+
classNames
|
|
84
|
+
],
|
|
85
|
+
style: {
|
|
86
|
+
contain: "layout"
|
|
87
|
+
}
|
|
88
|
+
}, templates2 && /* @__PURE__ */ import_react3.default.createElement(TemplateSelect, {
|
|
89
|
+
templates: templates2,
|
|
90
|
+
onTemplateSelect
|
|
91
|
+
}), onFormat && /* @__PURE__ */ import_react3.default.createElement(ToolbarIconButton, {
|
|
92
|
+
icon: "ph--magic-wand--regular",
|
|
93
|
+
text: t("format label"),
|
|
94
|
+
onClick: onFormat
|
|
95
|
+
}), /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
96
|
+
role: "separator",
|
|
97
|
+
className: "grow"
|
|
98
|
+
}), error ? /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
|
|
99
|
+
icon: "ph--warning-circle--regular",
|
|
100
|
+
size: 4
|
|
101
|
+
})), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null), error))) : null, functionUrl && deployed && /* @__PURE__ */ import_react3.default.createElement(ToolbarIconButton, {
|
|
102
|
+
icon: "ph--link--regular",
|
|
103
|
+
text: t("copy link label"),
|
|
104
|
+
onClick: handleCopyLink
|
|
105
|
+
}), onDeploy && /* @__PURE__ */ import_react3.default.createElement(ToolbarIconButton, {
|
|
106
|
+
icon: pending ? "ph--spinner-gap--regular" : "ph--cloud-arrow-up--regular",
|
|
107
|
+
classNames: [
|
|
108
|
+
pending && "animate-spin"
|
|
109
|
+
],
|
|
110
|
+
text: pending ? t("pending label") : t("deploy label"),
|
|
111
|
+
onClick: handleDeploy
|
|
112
|
+
}), /* @__PURE__ */ import_react3.default.createElement(ViewSelector, {
|
|
113
|
+
view,
|
|
114
|
+
onViewChange
|
|
115
|
+
})));
|
|
116
|
+
};
|
|
117
|
+
var ToolbarIconButton = ({ icon, text, classNames, disabled, onClick }) => {
|
|
118
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
|
|
119
|
+
asChild: true
|
|
120
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Button, {
|
|
121
|
+
variant: "ghost",
|
|
122
|
+
disabled,
|
|
123
|
+
onClick
|
|
124
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
|
|
125
|
+
icon,
|
|
126
|
+
size: 4,
|
|
127
|
+
classNames
|
|
128
|
+
}))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null), text)));
|
|
129
|
+
};
|
|
130
|
+
var TemplateSelect = ({ templates: templates2 = [], onTemplateSelect }) => {
|
|
131
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Select.Root, {
|
|
132
|
+
value: "",
|
|
133
|
+
onValueChange: onTemplateSelect
|
|
134
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Select.TriggerButton, null), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Select.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Select.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Select.Viewport, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Select.Option, {
|
|
135
|
+
value: ""
|
|
136
|
+
}, "Template"), templates2.map(({ id, name }) => /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Select.Option, {
|
|
137
|
+
key: id,
|
|
138
|
+
value: id
|
|
139
|
+
}, name))))));
|
|
140
|
+
};
|
|
141
|
+
var ViewSelector = ({ view, onViewChange }) => {
|
|
142
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ToggleGroup, {
|
|
143
|
+
type: "single",
|
|
144
|
+
value: view,
|
|
145
|
+
onValueChange: (value) => onViewChange?.(value)
|
|
146
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ToggleGroupItem, {
|
|
147
|
+
value: "editor",
|
|
148
|
+
classNames: "bg-transparent text-subdued"
|
|
149
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
|
|
150
|
+
icon: "ph--code--regular",
|
|
151
|
+
size: 4
|
|
152
|
+
})), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ToggleGroupItem, {
|
|
153
|
+
value: "split",
|
|
154
|
+
classNames: "bg-transparent text-subdued"
|
|
155
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
|
|
156
|
+
icon: "ph--square-split-vertical--regular",
|
|
157
|
+
size: 4
|
|
158
|
+
})), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ToggleGroupItem, {
|
|
159
|
+
value: "preview",
|
|
160
|
+
classNames: "bg-transparent text-subdued"
|
|
161
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
|
|
162
|
+
icon: "ph--eye--regular",
|
|
163
|
+
size: 4
|
|
164
|
+
})));
|
|
165
|
+
};
|
|
166
|
+
var TypescriptEditor = ({ id, env, className, initialValue, extensions, scrollTo, selection }) => {
|
|
167
|
+
const { themeMode } = (0, import_react_ui3.useThemeContext)();
|
|
168
|
+
const { parentRef, focusAttributes } = (0, import_react_ui_editor2.useTextEditor)(() => ({
|
|
169
|
+
id,
|
|
170
|
+
initialValue,
|
|
171
|
+
extensions: [
|
|
172
|
+
extensions,
|
|
173
|
+
(0, import_react_ui_editor2.createBasicExtensions)({
|
|
174
|
+
highlightActiveLine: true,
|
|
175
|
+
indentWithTab: true,
|
|
176
|
+
lineNumbers: true,
|
|
177
|
+
lineWrapping: false,
|
|
178
|
+
scrollPastEnd: true
|
|
179
|
+
}),
|
|
180
|
+
(0, import_react_ui_editor2.createThemeExtensions)({
|
|
181
|
+
themeMode,
|
|
182
|
+
syntaxHighlighting: true,
|
|
183
|
+
slots: {
|
|
184
|
+
content: {
|
|
185
|
+
className: import_react_ui_editor2.editorFullWidth
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}),
|
|
189
|
+
import_react_ui_editor2.editorGutter,
|
|
190
|
+
// TODO(burdon): Factor out.
|
|
191
|
+
[
|
|
192
|
+
import_react_ui_editor2.editorMonospace,
|
|
193
|
+
(0, import_lang_javascript.javascript)({
|
|
194
|
+
typescript: true
|
|
195
|
+
}),
|
|
196
|
+
// https://github.com/val-town/codemirror-ts
|
|
197
|
+
(0, import_react_ui_editor2.autocomplete)({
|
|
198
|
+
override: env ? [
|
|
199
|
+
(0, import_codemirror_ts.tsAutocomplete)()
|
|
200
|
+
] : []
|
|
201
|
+
}),
|
|
202
|
+
env ? [
|
|
203
|
+
import_codemirror_ts.tsFacet.of({
|
|
204
|
+
env,
|
|
205
|
+
path: `/src/${id}.ts`
|
|
206
|
+
}),
|
|
207
|
+
(0, import_codemirror_ts.tsSync)(),
|
|
208
|
+
(0, import_codemirror_ts.tsLinter)(),
|
|
209
|
+
(0, import_codemirror_ts.tsHover)()
|
|
210
|
+
] : [],
|
|
211
|
+
import_react_ui_editor2.InputModeExtensions.vscode
|
|
212
|
+
]
|
|
213
|
+
].filter(import_util.nonNullable),
|
|
214
|
+
selection,
|
|
215
|
+
scrollTo
|
|
216
|
+
}), [
|
|
217
|
+
id,
|
|
218
|
+
initialValue,
|
|
219
|
+
extensions,
|
|
220
|
+
themeMode,
|
|
221
|
+
selection,
|
|
222
|
+
scrollTo
|
|
223
|
+
]);
|
|
224
|
+
return /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
225
|
+
ref: parentRef,
|
|
226
|
+
className,
|
|
227
|
+
...focusAttributes
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx";
|
|
231
|
+
var ScriptEditor = ({ classNames, script, env }) => {
|
|
232
|
+
const { t } = (0, import_react_ui.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
|
|
233
|
+
const client = (0, import_react_client.useClient)();
|
|
234
|
+
const identity = (0, import_halo.useIdentity)();
|
|
235
|
+
const space = (0, import_echo2.getSpace)(script);
|
|
236
|
+
const [fn] = (0, import_echo2.useQuery)(space, import_echo2.Filter.schema(import_chunk_CPNHUAFN.FunctionType, (fn2) => fn2.source === script));
|
|
237
|
+
const extensions = (0, import_react2.useMemo)(() => [
|
|
238
|
+
(0, import_react_ui_editor.listener)({
|
|
239
|
+
onChange: (text) => {
|
|
240
|
+
if (script.source && script.source?.content !== text) {
|
|
241
|
+
script.changed = true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}),
|
|
245
|
+
(0, import_react_ui_editor.createDataExtensions)({
|
|
246
|
+
id: script.id,
|
|
247
|
+
text: script.source && (0, import_echo2.createDocAccessor)(script.source, [
|
|
248
|
+
"content"
|
|
249
|
+
]),
|
|
250
|
+
space,
|
|
251
|
+
identity
|
|
252
|
+
})
|
|
253
|
+
], [
|
|
254
|
+
script,
|
|
255
|
+
script.source,
|
|
256
|
+
space,
|
|
257
|
+
identity
|
|
258
|
+
]);
|
|
259
|
+
const [view, setView] = (0, import_react2.useState)("editor");
|
|
260
|
+
const initialValue = (0, import_react2.useMemo)(() => script.source?.content, [
|
|
261
|
+
script.source
|
|
262
|
+
]);
|
|
263
|
+
const existingFunctionUrl = fn && (0, import_chunk_FY5KKL5N.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
|
|
264
|
+
const [error, setError] = (0, import_react2.useState)();
|
|
265
|
+
const handleFormat = (0, import_react2.useCallback)(async () => {
|
|
266
|
+
if (!script.source) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
try {
|
|
270
|
+
script.source.content = await (0, import_prettier.format)(script.source.content, {
|
|
271
|
+
parser: "typescript",
|
|
272
|
+
plugins: [
|
|
273
|
+
import_estree.default,
|
|
274
|
+
import_typescript.default
|
|
275
|
+
],
|
|
276
|
+
semi: true,
|
|
277
|
+
singleQuote: true
|
|
278
|
+
});
|
|
279
|
+
} catch (err) {
|
|
280
|
+
import_log.log.catch(err, void 0, {
|
|
281
|
+
F: __dxlog_file,
|
|
282
|
+
L: 89,
|
|
283
|
+
S: void 0,
|
|
284
|
+
C: (f, a) => f(...a)
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}, [
|
|
288
|
+
script.source
|
|
289
|
+
]);
|
|
290
|
+
const handleTemplateChange = (id) => {
|
|
291
|
+
const template = import_chunk_ACLCRWDB.templates.find((template2) => template2.id === id);
|
|
292
|
+
if (template) {
|
|
293
|
+
script.name = template.name;
|
|
294
|
+
script.source.content = template.source;
|
|
295
|
+
const metaKeys = (0, import_echo2.getMeta)(script).keys;
|
|
296
|
+
const oldPresetIndex = metaKeys.findIndex((key) => key.source === import_chunk_FY5KKL5N.USERFUNCTIONS_PRESET_META_KEY);
|
|
297
|
+
if (oldPresetIndex >= 0) {
|
|
298
|
+
metaKeys.splice(oldPresetIndex, 1);
|
|
299
|
+
}
|
|
300
|
+
if (template.presetId) {
|
|
301
|
+
metaKeys.push({
|
|
302
|
+
source: import_chunk_FY5KKL5N.USERFUNCTIONS_PRESET_META_KEY,
|
|
303
|
+
id: template.presetId
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
const handleDeploy = (0, import_react2.useCallback)(async () => {
|
|
309
|
+
if (!script.source || !identity || !space) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
setError(void 0);
|
|
313
|
+
try {
|
|
314
|
+
const existingFunctionId = existingFunctionUrl?.split("/").at(-1);
|
|
315
|
+
const ownerDid = existingFunctionUrl?.split("/").at(-2) ?? (0, import_chunk_FY5KKL5N.publicKeyToDid)(identity.identityKey);
|
|
316
|
+
const bundler = new import_chunk_ACLCRWDB.Bundler({
|
|
317
|
+
platform: "browser",
|
|
318
|
+
sandboxedModules: [],
|
|
319
|
+
remoteModules: {}
|
|
320
|
+
});
|
|
321
|
+
const buildResult = await bundler.bundle(script.source.content);
|
|
322
|
+
if (buildResult.error || !buildResult.bundle) {
|
|
323
|
+
throw buildResult.error;
|
|
324
|
+
}
|
|
325
|
+
const { result, functionId, functionVersionNumber, errorMessage } = await (0, import_chunk_FY5KKL5N.uploadWorkerFunction)({
|
|
326
|
+
clientConfig: client.config,
|
|
327
|
+
halo: client.halo,
|
|
328
|
+
ownerDid,
|
|
329
|
+
functionId: existingFunctionId,
|
|
330
|
+
source: buildResult.bundle
|
|
331
|
+
});
|
|
332
|
+
if (result !== "success" || functionId === void 0 || functionVersionNumber === void 0) {
|
|
333
|
+
throw new Error(errorMessage);
|
|
334
|
+
}
|
|
335
|
+
import_log.log.info("function uploaded", {
|
|
336
|
+
functionId,
|
|
337
|
+
functionVersionNumber
|
|
338
|
+
}, {
|
|
339
|
+
F: __dxlog_file,
|
|
340
|
+
L: 137,
|
|
341
|
+
S: void 0,
|
|
342
|
+
C: (f, a) => f(...a)
|
|
343
|
+
});
|
|
344
|
+
if (fn) {
|
|
345
|
+
fn.version = functionVersionNumber;
|
|
346
|
+
}
|
|
347
|
+
const deployedFunction = fn ?? space.db.add((0, import_echo2.create)(import_chunk_CPNHUAFN.FunctionType, {
|
|
348
|
+
version: functionVersionNumber,
|
|
349
|
+
source: script
|
|
350
|
+
}));
|
|
351
|
+
const meta = (0, import_echo2.getMeta)(deployedFunction);
|
|
352
|
+
script.changed = false;
|
|
353
|
+
(0, import_chunk_FY5KKL5N.setUserFunctionUrlInMetadata)(meta, `/${ownerDid}/${functionId}`);
|
|
354
|
+
setView("split");
|
|
355
|
+
} catch (err) {
|
|
356
|
+
import_log.log.catch(err, void 0, {
|
|
357
|
+
F: __dxlog_file,
|
|
358
|
+
L: 149,
|
|
359
|
+
S: void 0,
|
|
360
|
+
C: (f, a) => f(...a)
|
|
361
|
+
});
|
|
362
|
+
setError(t("upload failed label"));
|
|
363
|
+
}
|
|
364
|
+
}, [
|
|
365
|
+
fn,
|
|
366
|
+
existingFunctionUrl,
|
|
367
|
+
script,
|
|
368
|
+
script.name,
|
|
369
|
+
script.source
|
|
370
|
+
]);
|
|
371
|
+
const functionUrl = (0, import_react2.useMemo)(() => {
|
|
372
|
+
if (!existingFunctionUrl) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
return (0, import_chunk_FY5KKL5N.getInvocationUrl)(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? "", {
|
|
376
|
+
spaceId: space?.id
|
|
377
|
+
});
|
|
378
|
+
}, [
|
|
379
|
+
existingFunctionUrl,
|
|
380
|
+
space
|
|
381
|
+
]);
|
|
382
|
+
return /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
383
|
+
role: "none",
|
|
384
|
+
className: (0, import_react_ui_theme2.mx)("flex flex-col w-full overflow-hidden divide-y divide-separator", classNames)
|
|
385
|
+
}, /* @__PURE__ */ import_react2.default.createElement(Toolbar, {
|
|
386
|
+
deployed: Boolean(existingFunctionUrl) && !script.changed,
|
|
387
|
+
functionUrl,
|
|
388
|
+
error,
|
|
389
|
+
view,
|
|
390
|
+
templates: import_chunk_ACLCRWDB.templates,
|
|
391
|
+
onDeploy: handleDeploy,
|
|
392
|
+
onFormat: handleFormat,
|
|
393
|
+
onViewChange: setView,
|
|
394
|
+
onTemplateSelect: handleTemplateChange
|
|
395
|
+
}), view !== "preview" && /* @__PURE__ */ import_react2.default.createElement(TypescriptEditor, {
|
|
396
|
+
id: script.id,
|
|
397
|
+
env,
|
|
398
|
+
initialValue,
|
|
399
|
+
extensions,
|
|
400
|
+
className: "flex is-full bs-full overflow-hidden ch-focus-ring-inset-over-all"
|
|
401
|
+
}), view !== "editor" && /* @__PURE__ */ import_react2.default.createElement(import_chunk_BJ4WIWCP.DebugPanel, {
|
|
402
|
+
functionUrl
|
|
403
|
+
}));
|
|
404
|
+
};
|
|
405
|
+
var ScriptContainer = ({ script, ...props }) => {
|
|
406
|
+
const attendableAttrs = (0, import_react_ui_attention.useAttendableAttributes)((0, import_echo.fullyQualifiedId)(script));
|
|
407
|
+
return /* @__PURE__ */ import_react.default.createElement("div", {
|
|
408
|
+
role: "none",
|
|
409
|
+
className: (0, import_react_ui_theme.mx)("flex row-span-2 w-full overflow-hidden attention-surface"),
|
|
410
|
+
...attendableAttrs
|
|
411
|
+
}, /* @__PURE__ */ import_react.default.createElement(ScriptEditor, {
|
|
412
|
+
...props,
|
|
413
|
+
script
|
|
414
|
+
}));
|
|
415
|
+
};
|
|
416
|
+
var ScriptContainer_default = ScriptContainer;
|
|
417
|
+
//# sourceMappingURL=ScriptContainer-FWHFEIHK.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 } = 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 const meta = getMeta(deployedFunction);\n script.changed = false;\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\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": "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",
|
|
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", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "getInvocationUrl", "values", "runtime", "services", "edge", "url", "spaceId", "mx", "Boolean", "DebugPanel", "ScriptContainer", "props", "attendableAttrs", "useAttendableAttributes", "fullyQualifiedId"]
|
|
7
|
+
}
|
|
@@ -16,15 +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
|
|
20
|
-
__export(
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
var chunk_6LYX73ZT_exports = {};
|
|
20
|
+
__export(chunk_6LYX73ZT_exports, {
|
|
21
|
+
SCRIPT_PLUGIN: () => SCRIPT_PLUGIN,
|
|
22
|
+
meta_default: () => meta_default
|
|
23
23
|
});
|
|
24
|
-
module.exports = __toCommonJS(
|
|
25
|
-
var
|
|
24
|
+
module.exports = __toCommonJS(chunk_6LYX73ZT_exports);
|
|
25
|
+
var SCRIPT_PLUGIN = "dxos.org/plugin/script";
|
|
26
|
+
var meta_default = {
|
|
27
|
+
id: SCRIPT_PLUGIN,
|
|
28
|
+
name: "Scripts",
|
|
29
|
+
description: "Distributed functions.",
|
|
30
|
+
icon: "ph--code--regular",
|
|
31
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
|
|
32
|
+
tags: [
|
|
33
|
+
"experimental"
|
|
34
|
+
]
|
|
35
|
+
};
|
|
26
36
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
37
|
0 && (module.exports = {
|
|
28
|
-
|
|
38
|
+
SCRIPT_PLUGIN,
|
|
39
|
+
meta_default
|
|
29
40
|
});
|
|
30
|
-
//# sourceMappingURL=
|
|
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
|
+
}
|
|
@@ -16,12 +16,13 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var chunk_ACLCRWDB_exports = {};
|
|
20
|
+
__export(chunk_ACLCRWDB_exports, {
|
|
21
21
|
Bundler: () => Bundler,
|
|
22
|
-
initializeBundler: () => initializeBundler
|
|
22
|
+
initializeBundler: () => initializeBundler,
|
|
23
|
+
templates: () => templates
|
|
23
24
|
});
|
|
24
|
-
module.exports = __toCommonJS(
|
|
25
|
+
module.exports = __toCommonJS(chunk_ACLCRWDB_exports);
|
|
25
26
|
var import_esbuild_wasm = require("esbuild-wasm");
|
|
26
27
|
var import_crypto = require("@dxos/crypto");
|
|
27
28
|
var import_invariant = require("@dxos/invariant");
|
|
@@ -244,9 +245,46 @@ var httpPlugin = {
|
|
|
244
245
|
});
|
|
245
246
|
}
|
|
246
247
|
};
|
|
248
|
+
var chat_default = "//\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";
|
|
249
|
+
var chess_default = "//\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";
|
|
250
|
+
var echo_default = "//\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";
|
|
251
|
+
var email_default = "//\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";
|
|
252
|
+
var forex_default = "//\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";
|
|
253
|
+
var removeHeader = (str) => str.split("\n").slice(4).join("\n");
|
|
254
|
+
var templates = [
|
|
255
|
+
{
|
|
256
|
+
id: "dxos.org/script/echo",
|
|
257
|
+
name: "Echo",
|
|
258
|
+
source: removeHeader(echo_default)
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
id: "dxos.org/script/forex",
|
|
262
|
+
name: "Forex",
|
|
263
|
+
source: removeHeader(forex_default)
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
id: "dxos.org/script/gpt",
|
|
267
|
+
name: "Gpt",
|
|
268
|
+
source: removeHeader(chat_default),
|
|
269
|
+
presetId: "dxos.org/function/gpt"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
id: "dxos.org/script/chess",
|
|
273
|
+
name: "Chess",
|
|
274
|
+
source: removeHeader(chess_default),
|
|
275
|
+
presetId: "dxos.org/function/chess"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
id: "dxos.org/script/email",
|
|
279
|
+
name: "Email",
|
|
280
|
+
source: removeHeader(email_default),
|
|
281
|
+
presetId: "dxos.org/function/email"
|
|
282
|
+
}
|
|
283
|
+
];
|
|
247
284
|
// Annotate the CommonJS export names for ESM import in node:
|
|
248
285
|
0 && (module.exports = {
|
|
249
286
|
Bundler,
|
|
250
|
-
initializeBundler
|
|
287
|
+
initializeBundler,
|
|
288
|
+
templates
|
|
251
289
|
});
|
|
252
|
-
//# sourceMappingURL=chunk-
|
|
290
|
+
//# sourceMappingURL=chunk-ACLCRWDB.cjs.map
|