@dxos/plugin-script 0.8.2-main.fbd8ed0 → 0.8.2-staging.42af850
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/DeploymentDialog-NLWQHNKE.mjs +12 -0
- package/dist/lib/browser/ScriptContainer-Q2K5FJSC.mjs +272 -0
- package/dist/lib/browser/ScriptContainer-Q2K5FJSC.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-BFBTQPSP.mjs → app-graph-builder-V3HPXJAD.mjs} +2 -2
- package/dist/lib/browser/{artifact-definition-PD4UAAQZ.mjs → artifact-definition-L3AIY4XA.mjs} +15 -24
- package/dist/lib/browser/artifact-definition-L3AIY4XA.mjs.map +7 -0
- package/dist/lib/browser/{chunk-INL55MFV.mjs → chunk-6T64VQHF.mjs} +2 -2
- package/dist/lib/browser/{chunk-KJMVDGRB.mjs → chunk-6ZHHWU6S.mjs} +3 -3
- package/dist/lib/browser/{chunk-KJMVDGRB.mjs.map → chunk-6ZHHWU6S.mjs.map} +1 -1
- package/dist/lib/browser/chunk-74DEDPHT.mjs +530 -0
- package/dist/lib/{node-esm/chunk-A3TXZHGD.mjs.map → browser/chunk-74DEDPHT.mjs.map} +1 -1
- package/dist/lib/browser/chunk-BTEFFA4C.mjs +153 -0
- package/dist/lib/{node-esm/chunk-V733VFCJ.mjs.map → browser/chunk-BTEFFA4C.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-FFDJENAN.mjs → chunk-JQOAZJTK.mjs} +4 -4
- package/dist/lib/browser/chunk-M6QMJBKQ.mjs +87 -0
- package/dist/lib/browser/chunk-M6QMJBKQ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6MLJJI73.mjs → chunk-WB3X5Z7Q.mjs} +7 -7
- package/dist/lib/browser/chunk-WB3X5Z7Q.mjs.map +7 -0
- package/dist/lib/browser/{chunk-A4VOGQ2P.mjs → chunk-YSQMXTYO.mjs} +3 -3
- package/dist/lib/{node-esm/chunk-HKJUN636.mjs.map → browser/chunk-YSQMXTYO.mjs.map} +1 -1
- package/dist/lib/browser/{compiler-O4FJK7RR.mjs → compiler-W4BYJYTL.mjs} +3 -3
- package/dist/lib/browser/compiler-W4BYJYTL.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +13 -13
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/{intent-resolver-SXO6X6XQ.mjs → intent-resolver-U5YRUE7W.mjs} +7 -7
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-TZGE7EGC.mjs → react-surface-3MSPT54G.mjs} +9 -9
- package/dist/lib/browser/{settings-EOKSUGB6.mjs → settings-FU7NTENS.mjs} +3 -3
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/{DeploymentDialog-43SI7XFL.cjs → DeploymentDialog-PC5AL3BB.cjs} +10 -10
- package/dist/lib/node/DeploymentDialog-PC5AL3BB.cjs.map +7 -0
- package/dist/lib/node/ScriptContainer-56SH6R24.cjs +289 -0
- package/dist/lib/node/ScriptContainer-56SH6R24.cjs.map +7 -0
- package/dist/lib/node/{app-graph-builder-IKOX7GHW.cjs → app-graph-builder-YE4OM4OC.cjs} +9 -9
- package/dist/lib/node/{artifact-definition-C644EAYM.cjs → artifact-definition-6BD6CVOV.cjs} +23 -32
- package/dist/lib/node/artifact-definition-6BD6CVOV.cjs.map +7 -0
- package/dist/lib/node/chunk-5LHP5EUJ.cjs +557 -0
- package/dist/lib/node/{chunk-HPBQHRM3.cjs.map → chunk-5LHP5EUJ.cjs.map} +1 -1
- package/dist/lib/node/chunk-BYLHJ26I.cjs +91 -0
- package/dist/lib/node/chunk-BYLHJ26I.cjs.map +7 -0
- package/dist/lib/node/{chunk-SXJGHLK6.cjs → chunk-HCRW6T3G.cjs} +8 -8
- package/dist/lib/node/chunk-HCRW6T3G.cjs.map +7 -0
- package/dist/lib/node/{chunk-7NNN3IUQ.cjs → chunk-NRZJV5SV.cjs} +16 -16
- package/dist/lib/node/{chunk-NO5Y74F3.cjs → chunk-QG2X6J74.cjs} +6 -6
- package/dist/lib/node/{chunk-NO5Y74F3.cjs.map → chunk-QG2X6J74.cjs.map} +1 -1
- package/dist/lib/node/chunk-RARNZD62.cjs +179 -0
- package/dist/lib/node/{chunk-VHSIOCS5.cjs.map → chunk-RARNZD62.cjs.map} +1 -1
- package/dist/lib/node/{chunk-K7PPLRVQ.cjs → chunk-V6L73D7S.cjs} +6 -6
- package/dist/lib/node/{chunk-KFJQVOGS.cjs → chunk-ZEV3VARQ.cjs} +7 -7
- package/dist/lib/node/{chunk-KFJQVOGS.cjs.map → chunk-ZEV3VARQ.cjs.map} +1 -1
- package/dist/lib/node/{compiler-FBC6ELQN.cjs → compiler-TFSJRLL4.cjs} +7 -7
- package/dist/lib/node/{compiler-FBC6ELQN.cjs.map → compiler-TFSJRLL4.cjs.map} +3 -3
- package/dist/lib/node/index.cjs +38 -38
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/{intent-resolver-PDSMZM2T.cjs → intent-resolver-7SF26VGC.cjs} +15 -15
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-BHHJQZ7P.cjs → react-surface-L6RS7BT2.cjs} +31 -31
- package/dist/lib/node/{settings-425QHVGC.cjs → settings-RRCQ7ZQD.cjs} +9 -9
- package/dist/lib/node/types.cjs +5 -5
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{DeploymentDialog-2RRUJEBC.mjs → DeploymentDialog-QHB2BGNJ.mjs} +5 -5
- package/dist/lib/node-esm/ScriptContainer-6RCZ43TI.mjs +273 -0
- package/dist/lib/node-esm/ScriptContainer-6RCZ43TI.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-KZGKGSP6.mjs → app-graph-builder-4CN7URJQ.mjs} +2 -2
- package/dist/lib/node-esm/{artifact-definition-J6UM6BQF.mjs → artifact-definition-PPV2XKU7.mjs} +15 -24
- package/dist/lib/node-esm/artifact-definition-PPV2XKU7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-25GOLUXY.mjs +154 -0
- package/dist/lib/{browser/chunk-YNOCAJYT.mjs.map → node-esm/chunk-25GOLUXY.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-HKJUN636.mjs → chunk-2KJYPUQD.mjs} +3 -3
- package/dist/lib/{browser/chunk-A4VOGQ2P.mjs.map → node-esm/chunk-2KJYPUQD.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-F47OE6ZM.mjs → chunk-47MABIVX.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs → chunk-AEB5TPEW.mjs} +3 -3
- package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs.map → chunk-AEB5TPEW.mjs.map} +1 -1
- package/dist/lib/node-esm/chunk-KOO76P2Y.mjs +531 -0
- package/dist/lib/{browser/chunk-BONEXAIK.mjs.map → node-esm/chunk-KOO76P2Y.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-VMQPOPKV.mjs → chunk-UESZKXLR.mjs} +7 -7
- package/dist/lib/node-esm/chunk-UESZKXLR.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NYA7KDN6.mjs → chunk-WD7OFSM3.mjs} +4 -4
- package/dist/lib/node-esm/chunk-Z44O2YIK.mjs +89 -0
- package/dist/lib/node-esm/chunk-Z44O2YIK.mjs.map +7 -0
- package/dist/lib/node-esm/{compiler-3NG4T5LH.mjs → compiler-7PQ4D43R.mjs} +3 -3
- package/dist/lib/{browser/compiler-O4FJK7RR.mjs.map → node-esm/compiler-7PQ4D43R.mjs.map} +3 -3
- package/dist/lib/node-esm/index.mjs +13 -13
- package/dist/lib/node-esm/index.mjs.map +1 -1
- package/dist/lib/node-esm/{intent-resolver-WSAVLQY5.mjs → intent-resolver-3APO7YDF.mjs} +7 -7
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-W7BM4PDK.mjs → react-surface-S5LHD3IA.mjs} +9 -9
- package/dist/lib/node-esm/{settings-BWSKKIVQ.mjs → settings-NKNC32QC.mjs} +3 -3
- package/dist/lib/node-esm/types.mjs +2 -2
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
- package/dist/types/src/compiler/compiler.d.ts.map +1 -1
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
- package/dist/types/src/templates/discord.d.ts.map +1 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +51 -51
- package/src/capabilities/artifact-definition.ts +10 -11
- package/src/compiler/compiler.ts +3 -3
- package/src/components/ScriptToolbar/ScriptToolbar.tsx +19 -16
- package/src/components/TypescriptEditor/TypescriptEditor.tsx +0 -6
- package/src/meta.ts +2 -2
- package/src/templates/chat.ts +1 -1
- package/src/templates/chess.ts +1 -1
- package/src/templates/data-generator.ts +1 -1
- package/src/templates/discord.ts +7 -5
- package/src/templates/forex-effect.ts +2 -2
- package/src/templates/gmail.ts +6 -4
- package/src/types.ts +2 -2
- package/dist/lib/browser/DeploymentDialog-W7PY33VN.mjs +0 -12
- package/dist/lib/browser/ScriptContainer-6DYV7D65.mjs +0 -260
- package/dist/lib/browser/ScriptContainer-6DYV7D65.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-PD4UAAQZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-6MLJJI73.mjs.map +0 -7
- package/dist/lib/browser/chunk-BONEXAIK.mjs +0 -480
- package/dist/lib/browser/chunk-RTVU4RZW.mjs +0 -87
- package/dist/lib/browser/chunk-RTVU4RZW.mjs.map +0 -7
- package/dist/lib/browser/chunk-YNOCAJYT.mjs +0 -147
- package/dist/lib/node/DeploymentDialog-43SI7XFL.cjs.map +0 -7
- package/dist/lib/node/ScriptContainer-H56OW5FC.cjs +0 -277
- package/dist/lib/node/ScriptContainer-H56OW5FC.cjs.map +0 -7
- package/dist/lib/node/artifact-definition-C644EAYM.cjs.map +0 -7
- package/dist/lib/node/chunk-HPBQHRM3.cjs +0 -507
- package/dist/lib/node/chunk-SXJGHLK6.cjs.map +0 -7
- package/dist/lib/node/chunk-VHSIOCS5.cjs +0 -173
- package/dist/lib/node/chunk-VNSZBEJW.cjs +0 -91
- package/dist/lib/node/chunk-VNSZBEJW.cjs.map +0 -7
- package/dist/lib/node-esm/ScriptContainer-762FHDZ4.mjs +0 -261
- package/dist/lib/node-esm/ScriptContainer-762FHDZ4.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-J6UM6BQF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-A3TXZHGD.mjs +0 -481
- package/dist/lib/node-esm/chunk-V733VFCJ.mjs +0 -148
- package/dist/lib/node-esm/chunk-VMQPOPKV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YCTECQLY.mjs +0 -89
- package/dist/lib/node-esm/chunk-YCTECQLY.mjs.map +0 -7
- package/dist/lib/node-esm/compiler-3NG4T5LH.mjs.map +0 -7
- /package/dist/lib/browser/{DeploymentDialog-W7PY33VN.mjs.map → DeploymentDialog-NLWQHNKE.mjs.map} +0 -0
- /package/dist/lib/browser/{app-graph-builder-BFBTQPSP.mjs.map → app-graph-builder-V3HPXJAD.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-INL55MFV.mjs.map → chunk-6T64VQHF.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-FFDJENAN.mjs.map → chunk-JQOAZJTK.mjs.map} +0 -0
- /package/dist/lib/browser/{intent-resolver-SXO6X6XQ.mjs.map → intent-resolver-U5YRUE7W.mjs.map} +0 -0
- /package/dist/lib/browser/{react-surface-TZGE7EGC.mjs.map → react-surface-3MSPT54G.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-EOKSUGB6.mjs.map → settings-FU7NTENS.mjs.map} +0 -0
- /package/dist/lib/node/{app-graph-builder-IKOX7GHW.cjs.map → app-graph-builder-YE4OM4OC.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-7NNN3IUQ.cjs.map → chunk-NRZJV5SV.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-K7PPLRVQ.cjs.map → chunk-V6L73D7S.cjs.map} +0 -0
- /package/dist/lib/node/{intent-resolver-PDSMZM2T.cjs.map → intent-resolver-7SF26VGC.cjs.map} +0 -0
- /package/dist/lib/node/{react-surface-BHHJQZ7P.cjs.map → react-surface-L6RS7BT2.cjs.map} +0 -0
- /package/dist/lib/node/{settings-425QHVGC.cjs.map → settings-RRCQ7ZQD.cjs.map} +0 -0
- /package/dist/lib/node-esm/{DeploymentDialog-2RRUJEBC.mjs.map → DeploymentDialog-QHB2BGNJ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{app-graph-builder-KZGKGSP6.mjs.map → app-graph-builder-4CN7URJQ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-F47OE6ZM.mjs.map → chunk-47MABIVX.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-NYA7KDN6.mjs.map → chunk-WD7OFSM3.mjs.map} +0 -0
- /package/dist/lib/node-esm/{intent-resolver-WSAVLQY5.mjs.map → intent-resolver-3APO7YDF.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-surface-W7BM4PDK.mjs.map → react-surface-S5LHD3IA.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-BWSKKIVQ.mjs.map → settings-NKNC32QC.mjs.map} +0 -0
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/DeploymentDialog/DeploymentDialog.tsx", "../../../src/components/DeploymentDialog/index.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useMemo } from 'react';\n\nimport { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\nimport { type DataType } from '@dxos/schema';\n\nimport { useCreateAndDeployScriptTemplates } from '../../hooks/useCreateAndDeployScriptTemplates';\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type Template } from '../../templates';\n\nexport const DEPLOYMENT_DIALOG = `${SCRIPT_PLUGIN}/deployment/dialog`;\n\n// TODO(ZaymonFC):\n// - Show activity and feedback to the user.\n// - Only take an array of templateIds and get the name from the data.\n// - Pending / onError states.\n\ntype DeploymentDialogProps = {\n accessToken: DataType.AccessToken;\n scriptTemplates: Template[];\n};\n\nexport const DeploymentDialog = ({ accessToken, scriptTemplates }: DeploymentDialogProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const space = useMemo(() => getSpace(accessToken), [accessToken]);\n\n // TODO(ZaymonFC): Thinking further. All of this should get moved to intents to run async in the background.\n // Deployment shouldn't be tied to the lifecycle of the dialogue component.\n const { handleCreateAndDeployScripts, status } = useCreateAndDeployScriptTemplates(space, scriptTemplates);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n useEffect(() => {\n if (status === 'success') {\n // TODO(ZaymonFC): We can probably re-use this toast for normal script deployment.\n void dispatch(\n createIntent(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${SCRIPT_PLUGIN}/deployment-success`,\n icon: 'ph--check--regular',\n duration: Infinity,\n title: ['script deployment toast label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],\n description: ['script deployment toast description', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],\n closeLabel: ['script deployment toast close label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],\n },\n }),\n );\n void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));\n }\n if (status === 'error') {\n void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));\n void dispatch(\n createIntent(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${SCRIPT_PLUGIN}/deployment-error`,\n icon: 'ph--warning--regular',\n duration: Infinity,\n title: ['script deployment error toast label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],\n description: [\n 'script deployment error toast description',\n { ns: SCRIPT_PLUGIN, count: scriptTemplates.length },\n ],\n closeLabel: [\n 'script deployment error toast close label',\n { ns: SCRIPT_PLUGIN, count: scriptTemplates.length },\n ],\n },\n }),\n );\n }\n }, [status, dispatch]);\n\n return (\n <Dialog.Content>\n <div className='flex justify-between items-center'>\n <Dialog.Title>{t('deployment dialog title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost'>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <div role='none' className='plb-4'>\n {/* TODO: Implement deployment logic and UI. */}\n <p>{t('deployment dialog scripts found message', { count: scriptTemplates.length })}</p>\n <ul className='pbs-2'>\n {scriptTemplates.map((template) => {\n return <li key={template.id}>{template.name}</li>;\n })}\n </ul>\n </div>\n <div role='none' className='flex flex-row-reverse gap-1'>\n <Button variant='primary' onClick={handleCreateAndDeployScripts} disabled={status === 'pending'}>\n {status === 'pending'\n ? t('deployment dialog deploy functions pending button label', { count: scriptTemplates.length })\n : t('deployment dialog deploy functions button label', { count: scriptTemplates.length })}\n </Button>\n <Dialog.Close asChild disabled={status === 'pending'}>\n <Button disabled={status === 'pending'}>{t('deployment dialog skip button label')}</Button>\n </Dialog.Close>\n </div>\n </Dialog.Content>\n );\n};\n\nexport default DeploymentDialog;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { DeploymentDialog, DEPLOYMENT_DIALOG } from './DeploymentDialog';\n\nexport { DEPLOYMENT_DIALOG };\n\nexport default DeploymentDialog;\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["React", "useEffect", "useMemo", "createIntent", "LayoutAction", "useIntentDispatcher", "getSpace", "Button", "Dialog", "Icon", "useTranslation", "DEPLOYMENT_DIALOG", "SCRIPT_PLUGIN", "DeploymentDialog", "accessToken", "scriptTemplates", "t", "useTranslation", "space", "useMemo", "getSpace", "handleCreateAndDeployScripts", "status", "useCreateAndDeployScriptTemplates", "dispatchPromise", "dispatch", "useIntentDispatcher", "useEffect", "createIntent", "LayoutAction", "AddToast", "part", "subject", "id", "icon", "duration", "Infinity", "title", "ns", "count", "length", "description", "closeLabel", "UpdateDialog", "options", "state", "Dialog", "Content", "div", "className", "Title", "Close", "asChild", "Button", "density", "variant", "Icon", "size", "role", "p", "ul", "map", "template", "li", "key", "name", "onClick", "disabled", "DeploymentDialog"]
|
|
7
7
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
meta
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AEB5TPEW.mjs";
|
|
5
5
|
|
|
6
6
|
// packages/plugins/plugin-script/src/capabilities/capabilities.ts
|
|
7
7
|
import { defineCapability } from "@dxos/app-framework";
|
|
8
|
-
var ScriptCapabilities;
|
|
9
8
|
(function(ScriptCapabilities2) {
|
|
10
9
|
ScriptCapabilities2.Compiler = defineCapability(`${meta.id}/capability/compiler`);
|
|
11
10
|
})(ScriptCapabilities || (ScriptCapabilities = {}));
|
|
11
|
+
var ScriptCapabilities;
|
|
12
12
|
|
|
13
13
|
export {
|
|
14
14
|
ScriptCapabilities
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# sourceMappingURL=chunk-2KJYPUQD.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/capabilities/capabilities.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\n\nimport { type Compiler } from '../compiler';\nimport { meta } from '../meta';\n\nexport namespace ScriptCapabilities {\n export const Compiler = defineCapability<Compiler>(`${meta.id}/capability/compiler`);\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;AAIA,SAASA,wBAAwB;UAKhBC,qBAAAA;sBACFC,WAAWC,iBAA2B,GAAGC,KAAKC,EAAE,sBAAsB;AACrF,GAFiBJ,uBAAAA,qBAAAA,CAAAA,EAAAA;;",
|
|
6
6
|
"names": ["defineCapability", "ScriptCapabilities", "Compiler", "defineCapability", "meta", "id"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
ScriptAction
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-UESZKXLR.mjs";
|
|
5
5
|
|
|
6
6
|
// packages/plugins/plugin-script/src/util/functions.ts
|
|
7
7
|
import { getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
|
|
@@ -231,4 +231,4 @@ export {
|
|
|
231
231
|
deployScript,
|
|
232
232
|
useCreateAndDeployScriptTemplates
|
|
233
233
|
};
|
|
234
|
-
//# sourceMappingURL=chunk-
|
|
234
|
+
//# sourceMappingURL=chunk-47MABIVX.mjs.map
|
|
@@ -7,9 +7,9 @@ var meta = {
|
|
|
7
7
|
name: "Scripts",
|
|
8
8
|
description: "Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API\u2019s or external data inside of Composer.",
|
|
9
9
|
icon: "ph--code--regular",
|
|
10
|
-
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/
|
|
10
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer",
|
|
11
11
|
tags: [
|
|
12
|
-
"
|
|
12
|
+
"labs"
|
|
13
13
|
],
|
|
14
14
|
screenshots: [
|
|
15
15
|
"https://dxos.network/plugin-details-scripts-dark.png"
|
|
@@ -27,4 +27,4 @@ export {
|
|
|
27
27
|
meta,
|
|
28
28
|
defaultScriptsForIntegration
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
30
|
+
//# sourceMappingURL=chunk-AEB5TPEW.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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 const meta: PluginMeta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/
|
|
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 const meta: PluginMeta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer',\n tags: ['labs'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n};\n\n// TODO(ZaymonFC): Configure by scopes?\nexport const defaultScriptsForIntegration: Record<string, string[]> = {\n // TODO(wittjosiah): Also include content extraction scripts in the default set.\n 'gmail.com': ['dxos.org/script/gmail'],\n};\n"],
|
|
5
5
|
"mappings": ";;;AAMO,IAAMA,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;AAGO,IAAMC,+BAAyD;;EAEpE,aAAa;IAAC;;AAChB;",
|
|
6
6
|
"names": ["SCRIPT_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots", "defaultScriptsForIntegration"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
SCRIPT_PLUGIN,
|
|
4
|
+
meta
|
|
5
|
+
} from "./chunk-AEB5TPEW.mjs";
|
|
6
|
+
|
|
7
|
+
// packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx
|
|
8
|
+
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
9
|
+
import { Octokit } from "@octokit/core";
|
|
10
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
11
|
+
import { createIntent, SettingsAction, useIntentDispatcher } from "@dxos/app-framework";
|
|
12
|
+
import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
|
|
13
|
+
import { log } from "@dxos/log";
|
|
14
|
+
import { useClient } from "@dxos/react-client";
|
|
15
|
+
import { Filter, getMeta, getSpace, Ref, useQuery } from "@dxos/react-client/echo";
|
|
16
|
+
import { Button, Clipboard, Input, useControlledState, useTranslation } from "@dxos/react-ui";
|
|
17
|
+
import { DataType } from "@dxos/schema";
|
|
18
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx";
|
|
19
|
+
var ScriptObjectSettings = ({ object }) => {
|
|
20
|
+
var _effect = _useSignals();
|
|
21
|
+
try {
|
|
22
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Binding, {
|
|
23
|
+
object
|
|
24
|
+
}), /* @__PURE__ */ React.createElement(Publishing, {
|
|
25
|
+
object
|
|
26
|
+
}));
|
|
27
|
+
} finally {
|
|
28
|
+
_effect.f();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var ScriptProperties = ({ object }) => {
|
|
32
|
+
var _effect = _useSignals();
|
|
33
|
+
try {
|
|
34
|
+
const { t } = useTranslation(SCRIPT_PLUGIN);
|
|
35
|
+
return /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, null, t("description label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
|
|
36
|
+
placeholder: t("description placeholder"),
|
|
37
|
+
value: object.description ?? "",
|
|
38
|
+
onChange: (event) => {
|
|
39
|
+
object.description = event.target.value;
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
42
|
+
} finally {
|
|
43
|
+
_effect.f();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
var Binding = ({ object }) => {
|
|
47
|
+
var _effect = _useSignals();
|
|
48
|
+
try {
|
|
49
|
+
const { t } = useTranslation(SCRIPT_PLUGIN);
|
|
50
|
+
const client = useClient();
|
|
51
|
+
const space = getSpace(object);
|
|
52
|
+
const [fn] = useQuery(space, Filter.type(FunctionType, {
|
|
53
|
+
source: Ref.make(object)
|
|
54
|
+
}));
|
|
55
|
+
const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));
|
|
56
|
+
const functionUrl = functionPath && getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
|
|
57
|
+
spaceId: space?.id
|
|
58
|
+
});
|
|
59
|
+
const [binding, setBinding] = useControlledState(fn?.binding ?? "");
|
|
60
|
+
const handleBindingChange = useCallback((event) => {
|
|
61
|
+
setBinding(event.target.value);
|
|
62
|
+
}, [
|
|
63
|
+
setBinding
|
|
64
|
+
]);
|
|
65
|
+
const handleBindingBlur = useCallback(() => {
|
|
66
|
+
fn.binding = binding;
|
|
67
|
+
}, [
|
|
68
|
+
fn,
|
|
69
|
+
binding
|
|
70
|
+
]);
|
|
71
|
+
if (!fn || !functionUrl) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
75
|
+
role: "form",
|
|
76
|
+
className: "flex flex-col p-2 gap-2"
|
|
77
|
+
}, /* @__PURE__ */ React.createElement("h2", null, t("remote function settings heading")), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement("div", {
|
|
78
|
+
role: "none",
|
|
79
|
+
className: "flex flex-col gap-1"
|
|
80
|
+
}, /* @__PURE__ */ React.createElement(Input.Label, null, t("function url label")), /* @__PURE__ */ React.createElement("div", {
|
|
81
|
+
role: "none",
|
|
82
|
+
className: "flex gap-1"
|
|
83
|
+
}, /* @__PURE__ */ React.createElement(Input.TextInput, {
|
|
84
|
+
disabled: true,
|
|
85
|
+
value: functionUrl,
|
|
86
|
+
onChange: (event) => {
|
|
87
|
+
fn.name = event.target.value;
|
|
88
|
+
}
|
|
89
|
+
}), /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
|
|
90
|
+
value: functionUrl
|
|
91
|
+
})))), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement("div", {
|
|
92
|
+
role: "none",
|
|
93
|
+
className: "flex flex-col gap-1"
|
|
94
|
+
}, /* @__PURE__ */ React.createElement(Input.Label, null, t("function binding label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
|
|
95
|
+
placeholder: t("function binding placeholder"),
|
|
96
|
+
value: binding,
|
|
97
|
+
onChange: handleBindingChange,
|
|
98
|
+
onBlur: handleBindingBlur
|
|
99
|
+
}))));
|
|
100
|
+
} finally {
|
|
101
|
+
_effect.f();
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
var Publishing = ({ object }) => {
|
|
105
|
+
var _effect = _useSignals();
|
|
106
|
+
try {
|
|
107
|
+
const { t } = useTranslation(SCRIPT_PLUGIN);
|
|
108
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
109
|
+
const space = getSpace(object);
|
|
110
|
+
const [githubToken] = useQuery(space, Filter.type(DataType.AccessToken, {
|
|
111
|
+
source: "github.com"
|
|
112
|
+
}));
|
|
113
|
+
const gistKey = getMeta(object).keys.find(({ source }) => source === "github.com");
|
|
114
|
+
const [gistUrl, setGistUrl] = useState();
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
const token = githubToken?.token;
|
|
117
|
+
const gistId = gistKey?.id;
|
|
118
|
+
if (!token || !gistId) {
|
|
119
|
+
setGistUrl(void 0);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const timeout = setTimeout(async () => {
|
|
123
|
+
try {
|
|
124
|
+
const octokit = new Octokit({
|
|
125
|
+
auth: githubToken.token
|
|
126
|
+
});
|
|
127
|
+
const response = await octokit.request("GET /gists/{gist_id}", {
|
|
128
|
+
gist_id: gistId
|
|
129
|
+
});
|
|
130
|
+
setGistUrl(response.data.html_url);
|
|
131
|
+
} catch (err) {
|
|
132
|
+
log.catch(err, void 0, {
|
|
133
|
+
F: __dxlog_file,
|
|
134
|
+
L: 135,
|
|
135
|
+
S: void 0,
|
|
136
|
+
C: (f, a) => f(...a)
|
|
137
|
+
});
|
|
138
|
+
setGistUrl(void 0);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
return () => clearTimeout(timeout);
|
|
142
|
+
}, [
|
|
143
|
+
githubToken,
|
|
144
|
+
gistKey
|
|
145
|
+
]);
|
|
146
|
+
const handleOpenTokenManager = useCallback(() => dispatch(createIntent(SettingsAction.Open, {
|
|
147
|
+
plugin: "dxos.org/plugin/token-manager"
|
|
148
|
+
})), []);
|
|
149
|
+
const [publishing, setPublishing] = useState(false);
|
|
150
|
+
const handlePublish = useCallback(async () => {
|
|
151
|
+
setPublishing(true);
|
|
152
|
+
const octokit = new Octokit({
|
|
153
|
+
auth: githubToken.token
|
|
154
|
+
});
|
|
155
|
+
const source = await object.source.load();
|
|
156
|
+
const filename = object.name ? kebabize(object.name) : "composer-script";
|
|
157
|
+
const files = {
|
|
158
|
+
[`${filename}.ts`]: {
|
|
159
|
+
content: source.content
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
try {
|
|
163
|
+
const meta2 = getMeta(object);
|
|
164
|
+
const githubKey = meta2.keys.find(({ source: source2 }) => source2 === "github.com");
|
|
165
|
+
const gistId = githubKey?.id;
|
|
166
|
+
if (gistId) {
|
|
167
|
+
await octokit.request("PATCH /gists/{gist_id}", {
|
|
168
|
+
gist_id: gistId,
|
|
169
|
+
files
|
|
170
|
+
});
|
|
171
|
+
} else {
|
|
172
|
+
const response = await octokit.request("POST /gists", {
|
|
173
|
+
public: true,
|
|
174
|
+
files
|
|
175
|
+
});
|
|
176
|
+
if (response.data.id) {
|
|
177
|
+
meta2.keys.push({
|
|
178
|
+
source: "github.com",
|
|
179
|
+
id: response.data.id
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
} finally {
|
|
184
|
+
setPublishing(false);
|
|
185
|
+
}
|
|
186
|
+
}, [
|
|
187
|
+
object,
|
|
188
|
+
githubToken
|
|
189
|
+
]);
|
|
190
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
191
|
+
className: "flex flex-col p-2 gap-4"
|
|
192
|
+
}, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h2", null, t("script publish settings label")), /* @__PURE__ */ React.createElement("p", {
|
|
193
|
+
className: "text-description text-sm"
|
|
194
|
+
}, t("script publish settings description"))), !githubToken && /* @__PURE__ */ React.createElement("div", {
|
|
195
|
+
className: "flex flex-col gap-2"
|
|
196
|
+
}, /* @__PURE__ */ React.createElement("span", null, t("no github token label")), /* @__PURE__ */ React.createElement(Button, {
|
|
197
|
+
onClick: handleOpenTokenManager
|
|
198
|
+
}, t("open token manager label"))), githubToken && /* @__PURE__ */ React.createElement("div", {
|
|
199
|
+
className: "flex justify-end gap-2"
|
|
200
|
+
}, gistUrl && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
|
|
201
|
+
value: gistUrl
|
|
202
|
+
}), /* @__PURE__ */ React.createElement(Button, {
|
|
203
|
+
disabled: publishing,
|
|
204
|
+
onClick: handlePublish
|
|
205
|
+
}, t(publishing ? "publishing label" : "publish label"))));
|
|
206
|
+
} finally {
|
|
207
|
+
_effect.f();
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
|
|
211
|
+
|
|
212
|
+
// packages/plugins/plugin-script/src/components/Settings/ScriptPluginSettings.tsx
|
|
213
|
+
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
214
|
+
import React2 from "react";
|
|
215
|
+
import { useClient as useClient2 } from "@dxos/react-client";
|
|
216
|
+
import { Button as Button2, Select, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
217
|
+
import { EditorInputModes } from "@dxos/react-ui-editor";
|
|
218
|
+
import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
|
|
219
|
+
var ScriptPluginSettings = ({ settings }) => {
|
|
220
|
+
var _effect = _useSignals2();
|
|
221
|
+
try {
|
|
222
|
+
const { t } = useTranslation2(meta.id);
|
|
223
|
+
const client = useClient2();
|
|
224
|
+
const handleAuthenticate = async () => {
|
|
225
|
+
const { identityKey } = client.halo.identity.get();
|
|
226
|
+
await client.halo.writeCredentials([
|
|
227
|
+
{
|
|
228
|
+
issuer: identityKey,
|
|
229
|
+
issuanceDate: /* @__PURE__ */ new Date(),
|
|
230
|
+
subject: {
|
|
231
|
+
id: identityKey,
|
|
232
|
+
assertion: {
|
|
233
|
+
"@type": "dxos.halo.credentials.ServiceAccess",
|
|
234
|
+
serverName: "hub.dxos.network",
|
|
235
|
+
serverKey: identityKey,
|
|
236
|
+
identityKey,
|
|
237
|
+
capabilities: [
|
|
238
|
+
"composer:beta"
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
]);
|
|
244
|
+
};
|
|
245
|
+
return /* @__PURE__ */ React2.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
|
|
246
|
+
label: t("authenticate action label")
|
|
247
|
+
}, /* @__PURE__ */ React2.createElement(Button2, {
|
|
248
|
+
onClick: handleAuthenticate
|
|
249
|
+
}, t("authenticate button label"))), /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
|
|
250
|
+
label: t("editor input mode label")
|
|
251
|
+
}, /* @__PURE__ */ React2.createElement(Select.Root, {
|
|
252
|
+
value: settings.editorInputMode ?? "default",
|
|
253
|
+
onValueChange: (value) => {
|
|
254
|
+
settings.editorInputMode = value;
|
|
255
|
+
}
|
|
256
|
+
}, /* @__PURE__ */ React2.createElement(Select.TriggerButton, {
|
|
257
|
+
placeholder: t("select editor input mode placeholder")
|
|
258
|
+
}), /* @__PURE__ */ React2.createElement(Select.Portal, null, /* @__PURE__ */ React2.createElement(Select.Content, null, /* @__PURE__ */ React2.createElement(Select.Viewport, null, EditorInputModes.map((mode) => /* @__PURE__ */ React2.createElement(Select.Option, {
|
|
259
|
+
key: mode,
|
|
260
|
+
value: mode
|
|
261
|
+
}, t(`settings editor input mode ${mode} label`)))))))));
|
|
262
|
+
} finally {
|
|
263
|
+
_effect.f();
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
// packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx
|
|
268
|
+
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
|
269
|
+
import React3, { forwardRef, useEffect as useEffect2, useRef, useState as useState2 } from "react";
|
|
270
|
+
import { log as log2 } from "@dxos/log";
|
|
271
|
+
import { Avatar, Icon, Input as Input2, Toolbar, useTranslation as useTranslation3 } from "@dxos/react-ui";
|
|
272
|
+
import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
|
|
273
|
+
import { errorText, mx } from "@dxos/react-ui-theme";
|
|
274
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx";
|
|
275
|
+
var TestPanel = ({ classNames, functionUrl }) => {
|
|
276
|
+
var _effect = _useSignals3();
|
|
277
|
+
try {
|
|
278
|
+
const { t } = useTranslation3(SCRIPT_PLUGIN);
|
|
279
|
+
const inputRef = useRef(null);
|
|
280
|
+
const [input, setInput] = useState2("");
|
|
281
|
+
const [result, setResult] = useState2("");
|
|
282
|
+
const [state, setState] = useState2(null);
|
|
283
|
+
const [history, setHistory] = useState2([]);
|
|
284
|
+
const scrollerRef = useRef(null);
|
|
285
|
+
const handleScroll = () => {
|
|
286
|
+
if (scrollerRef.current) {
|
|
287
|
+
scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
const controller = useRef();
|
|
291
|
+
useEffect2(() => {
|
|
292
|
+
return () => {
|
|
293
|
+
handleStop();
|
|
294
|
+
};
|
|
295
|
+
}, []);
|
|
296
|
+
const handleStop = () => {
|
|
297
|
+
controller.current?.abort("stop");
|
|
298
|
+
controller.current = void 0;
|
|
299
|
+
};
|
|
300
|
+
const handleClear = () => {
|
|
301
|
+
handleStop();
|
|
302
|
+
setInput("");
|
|
303
|
+
setResult("");
|
|
304
|
+
setHistory([]);
|
|
305
|
+
inputRef.current?.focus();
|
|
306
|
+
};
|
|
307
|
+
const handleResponse = ({ text, data, error } = {}) => {
|
|
308
|
+
controller.current = void 0;
|
|
309
|
+
setHistory((history2) => [
|
|
310
|
+
...history2,
|
|
311
|
+
{
|
|
312
|
+
type: "response",
|
|
313
|
+
text,
|
|
314
|
+
data,
|
|
315
|
+
error
|
|
316
|
+
}
|
|
317
|
+
]);
|
|
318
|
+
setResult("");
|
|
319
|
+
setState(null);
|
|
320
|
+
handleScroll();
|
|
321
|
+
};
|
|
322
|
+
const handleRequest = async (input2) => {
|
|
323
|
+
try {
|
|
324
|
+
setState("pending");
|
|
325
|
+
let data = null;
|
|
326
|
+
if (input2.charAt(0) === "{") {
|
|
327
|
+
try {
|
|
328
|
+
const validJsonString = input2.replace(/'/g, '"').replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3');
|
|
329
|
+
data = JSON.parse(validJsonString);
|
|
330
|
+
input2 = JSON.stringify(data, null, 2);
|
|
331
|
+
} catch (err) {
|
|
332
|
+
inputRef.current?.focus();
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
setInput("");
|
|
337
|
+
setResult("");
|
|
338
|
+
setHistory((history2) => [
|
|
339
|
+
...history2,
|
|
340
|
+
{
|
|
341
|
+
type: "request",
|
|
342
|
+
text: input2
|
|
343
|
+
}
|
|
344
|
+
]);
|
|
345
|
+
setTimeout(() => {
|
|
346
|
+
handleScroll();
|
|
347
|
+
});
|
|
348
|
+
controller.current = new AbortController();
|
|
349
|
+
const response = await fetch(functionUrl, {
|
|
350
|
+
signal: controller.current.signal,
|
|
351
|
+
method: "POST",
|
|
352
|
+
body: input2,
|
|
353
|
+
headers: {
|
|
354
|
+
"Content-Type": data ? "application/json" : "text/plain"
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
if (!response.ok) {
|
|
358
|
+
const text2 = await response.text();
|
|
359
|
+
handleResponse({
|
|
360
|
+
error: new Error(text2 || response.statusText || String(response.status))
|
|
361
|
+
});
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const contentType = response.headers.get("content-type");
|
|
365
|
+
if (contentType === "application/json") {
|
|
366
|
+
const data2 = await response.json();
|
|
367
|
+
handleResponse({
|
|
368
|
+
data: data2
|
|
369
|
+
});
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
setState("responding");
|
|
373
|
+
let text = "";
|
|
374
|
+
const reader = response.body.getReader();
|
|
375
|
+
const pump = async ({ done, value }) => {
|
|
376
|
+
text = text + new TextDecoder().decode(value);
|
|
377
|
+
if (!controller.current || done) {
|
|
378
|
+
handleResponse({
|
|
379
|
+
text
|
|
380
|
+
});
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
setResult(text);
|
|
384
|
+
setTimeout(() => {
|
|
385
|
+
handleScroll();
|
|
386
|
+
});
|
|
387
|
+
return reader.read().then(pump);
|
|
388
|
+
};
|
|
389
|
+
void reader.read().then(pump).catch((err) => {
|
|
390
|
+
if (err.name !== "AbortError") {
|
|
391
|
+
log2.catch(err, void 0, {
|
|
392
|
+
F: __dxlog_file2,
|
|
393
|
+
L: 147,
|
|
394
|
+
S: void 0,
|
|
395
|
+
C: (f, a) => f(...a)
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
} catch (err) {
|
|
400
|
+
if (err !== "stop") {
|
|
401
|
+
const error = err instanceof Error ? err : new Error(err);
|
|
402
|
+
handleResponse({
|
|
403
|
+
error
|
|
404
|
+
});
|
|
405
|
+
log2.catch(err, void 0, {
|
|
406
|
+
F: __dxlog_file2,
|
|
407
|
+
L: 154,
|
|
408
|
+
S: void 0,
|
|
409
|
+
C: (f, a) => f(...a)
|
|
410
|
+
});
|
|
411
|
+
} else {
|
|
412
|
+
handleResponse();
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
return /* @__PURE__ */ React3.createElement("div", {
|
|
417
|
+
className: mx("flex flex-col h-full overflow-hidden", classNames)
|
|
418
|
+
}, /* @__PURE__ */ React3.createElement(MessageThread, {
|
|
419
|
+
ref: scrollerRef,
|
|
420
|
+
state,
|
|
421
|
+
result,
|
|
422
|
+
history
|
|
423
|
+
}), /* @__PURE__ */ React3.createElement(Toolbar.Root, {
|
|
424
|
+
classNames: "p-2"
|
|
425
|
+
}, /* @__PURE__ */ React3.createElement(Input2.Root, null, /* @__PURE__ */ React3.createElement(Input2.TextInput, {
|
|
426
|
+
ref: inputRef,
|
|
427
|
+
autoFocus: true,
|
|
428
|
+
placeholder: t("function request placeholder"),
|
|
429
|
+
value: input,
|
|
430
|
+
onChange: (ev) => setInput(ev.target.value),
|
|
431
|
+
onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
|
|
432
|
+
})), /* @__PURE__ */ React3.createElement(Toolbar.Button, {
|
|
433
|
+
onClick: () => handleRequest(input)
|
|
434
|
+
}, /* @__PURE__ */ React3.createElement(Icon, {
|
|
435
|
+
icon: "ph--play--regular",
|
|
436
|
+
size: 4
|
|
437
|
+
})), /* @__PURE__ */ React3.createElement(Toolbar.Button, {
|
|
438
|
+
onClick: () => state ? handleStop() : handleClear()
|
|
439
|
+
}, /* @__PURE__ */ React3.createElement(Icon, {
|
|
440
|
+
icon: state ? "ph--stop--regular" : "ph--trash--regular",
|
|
441
|
+
size: 4
|
|
442
|
+
}))));
|
|
443
|
+
} finally {
|
|
444
|
+
_effect.f();
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
var MessageThread = /* @__PURE__ */ forwardRef(({ state, history, result }, forwardedRef) => {
|
|
448
|
+
var _effect = _useSignals3();
|
|
449
|
+
try {
|
|
450
|
+
return /* @__PURE__ */ React3.createElement("div", {
|
|
451
|
+
ref: forwardedRef,
|
|
452
|
+
className: "flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto"
|
|
453
|
+
}, history.map((message, i) => /* @__PURE__ */ React3.createElement("div", {
|
|
454
|
+
key: i,
|
|
455
|
+
className: "grid grid-cols-[2rem_1fr_2rem]"
|
|
456
|
+
}, /* @__PURE__ */ React3.createElement("div", {
|
|
457
|
+
className: "p-1"
|
|
458
|
+
}, message.type === "response" && /* @__PURE__ */ React3.createElement(RobotAvatar, null)), /* @__PURE__ */ React3.createElement("div", {
|
|
459
|
+
className: "overflow-auto"
|
|
460
|
+
}, /* @__PURE__ */ React3.createElement(MessageItem, {
|
|
461
|
+
message
|
|
462
|
+
})))), result?.length > 0 && /* @__PURE__ */ React3.createElement("div", {
|
|
463
|
+
className: "grid grid-cols-[2rem_1fr_2rem]"
|
|
464
|
+
}, /* @__PURE__ */ React3.createElement("div", {
|
|
465
|
+
className: "p-1"
|
|
466
|
+
}, state === "pending" && /* @__PURE__ */ React3.createElement(Icon, {
|
|
467
|
+
icon: "ph--spinner--regular",
|
|
468
|
+
size: 6,
|
|
469
|
+
classNames: "animate-spin"
|
|
470
|
+
}) || /* @__PURE__ */ React3.createElement(Icon, {
|
|
471
|
+
icon: "ph--robot--regular",
|
|
472
|
+
size: 6,
|
|
473
|
+
classNames: "animate-[pulse_1s_ease-in-out_infinite]"
|
|
474
|
+
})), /* @__PURE__ */ React3.createElement("div", {
|
|
475
|
+
className: "overflow-auto"
|
|
476
|
+
}, /* @__PURE__ */ React3.createElement(MessageItem, {
|
|
477
|
+
message: {
|
|
478
|
+
type: "response",
|
|
479
|
+
text: result
|
|
480
|
+
}
|
|
481
|
+
}))));
|
|
482
|
+
} finally {
|
|
483
|
+
_effect.f();
|
|
484
|
+
}
|
|
485
|
+
});
|
|
486
|
+
var MessageItem = ({ classNames, message }) => {
|
|
487
|
+
var _effect = _useSignals3();
|
|
488
|
+
try {
|
|
489
|
+
const { type, text, data, error } = message;
|
|
490
|
+
const wrapper = "p-1 px-2 rounded-lg bg-hoverSurface overflow-auto";
|
|
491
|
+
return /* @__PURE__ */ React3.createElement("div", {
|
|
492
|
+
className: mx("flex", type === "request" ? "ml-[1rem] justify-end" : "mr-[1rem]", classNames)
|
|
493
|
+
}, error && /* @__PURE__ */ React3.createElement("div", {
|
|
494
|
+
className: mx(wrapper, "whitespace-pre", errorText)
|
|
495
|
+
}, String(error)), text !== void 0 && /* @__PURE__ */ React3.createElement("div", {
|
|
496
|
+
className: mx(wrapper, type === "request" && "bg-primary-400 dark:bg-primary-600")
|
|
497
|
+
}, text || "\xD8"), data && /* @__PURE__ */ React3.createElement(SyntaxHighlighter, {
|
|
498
|
+
language: "json",
|
|
499
|
+
className: mx(wrapper, "px-8 py-2 text-xs")
|
|
500
|
+
}, JSON.stringify(data, null, 2)));
|
|
501
|
+
} finally {
|
|
502
|
+
_effect.f();
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
var RobotAvatar = () => {
|
|
506
|
+
var _effect = _useSignals3();
|
|
507
|
+
try {
|
|
508
|
+
return /* @__PURE__ */ React3.createElement(Avatar.Root, null, /* @__PURE__ */ React3.createElement(Avatar.Content, {
|
|
509
|
+
size: 6,
|
|
510
|
+
variant: "circle",
|
|
511
|
+
icon: "ph--robot--regular"
|
|
512
|
+
}));
|
|
513
|
+
} finally {
|
|
514
|
+
_effect.f();
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
// packages/plugins/plugin-script/src/components/index.ts
|
|
519
|
+
import { lazy } from "react";
|
|
520
|
+
var ScriptContainer = lazy(() => import("./ScriptContainer-6RCZ43TI.mjs"));
|
|
521
|
+
var DeploymentDialog = lazy(() => import("./DeploymentDialog-QHB2BGNJ.mjs"));
|
|
522
|
+
|
|
523
|
+
export {
|
|
524
|
+
ScriptObjectSettings,
|
|
525
|
+
ScriptProperties,
|
|
526
|
+
ScriptPluginSettings,
|
|
527
|
+
TestPanel,
|
|
528
|
+
ScriptContainer,
|
|
529
|
+
DeploymentDialog
|
|
530
|
+
};
|
|
531
|
+
//# sourceMappingURL=chunk-KOO76P2Y.mjs.map
|