@dxos/plugin-script 0.8.0 → 0.8.1-main.81238a8
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/{ScriptContainer-3RFMYKTV.mjs → ScriptContainer-7PTOJ4KY.mjs} +18 -21
- package/dist/lib/browser/ScriptContainer-7PTOJ4KY.mjs.map +7 -0
- package/dist/lib/browser/{artifact-definition-4LWPD3DH.mjs → artifact-definition-GYCZJGR4.mjs} +8 -7
- package/dist/lib/browser/artifact-definition-GYCZJGR4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FVVCAWNP.mjs → chunk-27LV6ARH.mjs} +1 -1
- package/dist/lib/browser/chunk-27LV6ARH.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PZPYF7M4.mjs → chunk-4SSKJNMZ.mjs} +2 -2
- package/dist/lib/browser/chunk-4SSKJNMZ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-N46LE7FS.mjs → chunk-AJNRPWAA.mjs} +4 -4
- package/dist/lib/browser/{chunk-N46LE7FS.mjs.map → chunk-AJNRPWAA.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-G2FYNDU4.mjs → chunk-DZB4KWOI.mjs} +96 -49
- package/dist/lib/browser/chunk-DZB4KWOI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6MOQ4BP3.mjs → chunk-FG66JYON.mjs} +2 -2
- package/dist/lib/browser/chunk-QHE53FDV.mjs +467 -0
- package/dist/lib/browser/chunk-QHE53FDV.mjs.map +7 -0
- package/dist/lib/browser/{compiler-YY2XSKHQ.mjs → compiler-ZQLHHJ5P.mjs} +3 -3
- package/dist/lib/browser/index.mjs +21 -18
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-D6FPY5ZA.mjs → intent-resolver-3B3Z67FP.mjs} +5 -5
- package/dist/lib/browser/{intent-resolver-D6FPY5ZA.mjs.map → intent-resolver-3B3Z67FP.mjs.map} +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-G4C2PZ2K.mjs → react-surface-GQD6LJDJ.mjs} +14 -16
- package/dist/lib/browser/react-surface-GQD6LJDJ.mjs.map +7 -0
- package/dist/lib/browser/{settings-SZCDKHWO.mjs → settings-467GVEBU.mjs} +3 -3
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/{ScriptContainer-G6FZU4AM.cjs → ScriptContainer-VHHYWC3A.cjs} +26 -28
- package/dist/lib/node/ScriptContainer-VHHYWC3A.cjs.map +7 -0
- package/dist/lib/node/{artifact-definition-BXQCFPAH.cjs → artifact-definition-3SNVJ34V.cjs} +20 -19
- package/dist/lib/node/artifact-definition-3SNVJ34V.cjs.map +7 -0
- package/dist/lib/node/{chunk-5UH3F7TA.cjs → chunk-2XX4L67K.cjs} +4 -4
- package/dist/lib/node/chunk-2XX4L67K.cjs.map +7 -0
- package/dist/lib/node/{chunk-ALY3N6PW.cjs → chunk-AOKGOI5J.cjs} +6 -6
- package/dist/lib/node/{chunk-XKYJYY3T.cjs → chunk-MSH4SVCN.cjs} +107 -61
- package/dist/lib/node/chunk-MSH4SVCN.cjs.map +7 -0
- package/dist/lib/node/chunk-W4U3OWKO.cjs +493 -0
- package/dist/lib/node/chunk-W4U3OWKO.cjs.map +7 -0
- package/dist/lib/node/{chunk-ITAJ3WRW.cjs → chunk-XCQNFRZ6.cjs} +5 -5
- package/dist/lib/node/chunk-XCQNFRZ6.cjs.map +7 -0
- package/dist/lib/node/{chunk-DJGLGRQV.cjs → chunk-XFB6JL2G.cjs} +10 -10
- package/dist/lib/node/chunk-XFB6JL2G.cjs.map +7 -0
- package/dist/lib/node/{compiler-UIBLKJKG.cjs → compiler-5ALLTH2B.cjs} +7 -7
- package/dist/lib/node/index.cjs +48 -45
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-NYJFPD5B.cjs → intent-resolver-CN5WMMAD.cjs} +11 -11
- package/dist/lib/node/intent-resolver-CN5WMMAD.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-EGSE3FMN.cjs → react-surface-VV7J7PQN.cjs} +28 -29
- package/dist/lib/node/react-surface-VV7J7PQN.cjs.map +7 -0
- package/dist/lib/node/{settings-SZFSMSKM.cjs → settings-WLYT2XQF.cjs} +9 -9
- package/dist/lib/node/types.cjs +4 -4
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{ScriptContainer-7FTCFIF3.mjs → ScriptContainer-A4J44DZD.mjs} +18 -21
- package/dist/lib/node-esm/ScriptContainer-A4J44DZD.mjs.map +7 -0
- package/dist/lib/node-esm/{artifact-definition-KT4DK2LQ.mjs → artifact-definition-VAFNV62U.mjs} +8 -7
- package/dist/lib/node-esm/artifact-definition-VAFNV62U.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-2RKD5MCW.mjs +468 -0
- package/dist/lib/node-esm/chunk-2RKD5MCW.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-YIWRJ25J.mjs → chunk-4YUSGXJ2.mjs} +2 -2
- package/dist/lib/node-esm/chunk-4YUSGXJ2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-P2V2Y5LV.mjs → chunk-5S2KBIMH.mjs} +1 -1
- package/dist/lib/node-esm/chunk-5S2KBIMH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CP5LXTK5.mjs → chunk-MFXRE7ZD.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-NRICF4KE.mjs → chunk-QHZ6KA5J.mjs} +96 -49
- package/dist/lib/node-esm/chunk-QHZ6KA5J.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UNQFIERE.mjs → chunk-WQ4YIZ2L.mjs} +4 -4
- package/dist/lib/node-esm/{chunk-UNQFIERE.mjs.map → chunk-WQ4YIZ2L.mjs.map} +1 -1
- package/dist/lib/node-esm/{compiler-XTXFGZJM.mjs → compiler-K7GYROAO.mjs} +3 -3
- package/dist/lib/node-esm/index.mjs +21 -18
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-KLBHSMW4.mjs → intent-resolver-6F7CVQEX.mjs} +5 -5
- package/dist/lib/node-esm/{intent-resolver-KLBHSMW4.mjs.map → intent-resolver-6F7CVQEX.mjs.map} +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-7YSGHZQM.mjs → react-surface-RPNDRJVD.mjs} +14 -16
- package/dist/lib/node-esm/react-surface-RPNDRJVD.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-GR4O2WHZ.mjs → settings-DR3B6GHE.mjs} +3 -3
- package/dist/lib/node-esm/types.mjs +2 -2
- package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +2 -1
- package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
- package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +2 -1
- package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
- package/dist/types/src/components/LogsPanel/LogsPanel.d.ts +8 -0
- package/dist/types/src/components/LogsPanel/LogsPanel.d.ts.map +1 -0
- package/dist/types/src/components/LogsPanel/index.d.ts +2 -0
- package/dist/types/src/components/LogsPanel/index.d.ts.map +1 -0
- package/dist/types/src/components/ScriptContainer.d.ts +4 -2
- package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts +2 -1
- package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -1
- package/dist/types/src/components/ScriptSettingsPanel.d.ts +3 -2
- package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -1
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +3 -2
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +2 -1
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/deploy.d.ts +24 -0
- package/dist/types/src/hooks/deploy.d.ts.map +1 -1
- package/dist/types/src/hooks/format.d.ts +1 -1
- package/dist/types/src/hooks/format.d.ts.map +1 -1
- package/dist/types/src/hooks/template.d.ts +1 -1
- package/dist/types/src/hooks/template.d.ts.map +1 -1
- package/dist/types/src/hooks/useToolbarAction.d.ts +1 -1
- package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -1
- package/dist/types/src/hooks/useToolbarState.d.ts +2 -8
- package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
- package/dist/types/src/hooks/view.d.ts +3 -15
- package/dist/types/src/hooks/view.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -9
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/templates/discord.d.ts.map +1 -1
- package/dist/types/src/templates/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +6 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +8 -2
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +47 -43
- package/src/ScriptPlugin.tsx +3 -2
- package/src/capabilities/artifact-definition.ts +2 -1
- package/src/capabilities/intent-resolver.ts +1 -1
- package/src/capabilities/react-surface.tsx +16 -6
- package/src/components/LogsPanel/LogsPanel.tsx +106 -0
- package/src/components/LogsPanel/index.ts +5 -0
- package/src/components/ScriptContainer.tsx +18 -12
- package/src/components/ScriptSettingsPanel.tsx +1 -1
- package/src/components/ScriptToolbar/ScriptToolbar.tsx +1 -1
- package/src/components/TypescriptEditor/TypescriptEditor.tsx +1 -0
- package/src/components/index.ts +1 -0
- package/src/hooks/deploy.ts +4 -5
- package/src/hooks/format.ts +1 -1
- package/src/hooks/template.ts +1 -1
- package/src/hooks/useToolbarAction.ts +13 -4
- package/src/hooks/useToolbarState.ts +2 -2
- package/src/hooks/view.ts +7 -24
- package/src/meta.ts +2 -2
- package/src/templates/discord.ts +12 -5
- package/src/templates/index.ts +0 -7
- package/src/translations.ts +3 -4
- package/src/types.ts +2 -2
- package/src/vite-env.d.ts +20 -0
- package/dist/lib/browser/ScriptContainer-3RFMYKTV.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-4LWPD3DH.mjs.map +0 -7
- package/dist/lib/browser/chunk-5SXOHNAK.mjs +0 -240
- package/dist/lib/browser/chunk-5SXOHNAK.mjs.map +0 -7
- package/dist/lib/browser/chunk-FVVCAWNP.mjs.map +0 -7
- package/dist/lib/browser/chunk-G2FYNDU4.mjs.map +0 -7
- package/dist/lib/browser/chunk-PZPYF7M4.mjs.map +0 -7
- package/dist/lib/browser/chunk-VTWBVFBK.mjs +0 -234
- package/dist/lib/browser/chunk-VTWBVFBK.mjs.map +0 -7
- package/dist/lib/browser/react-surface-G4C2PZ2K.mjs.map +0 -7
- package/dist/lib/node/ScriptContainer-G6FZU4AM.cjs.map +0 -7
- package/dist/lib/node/artifact-definition-BXQCFPAH.cjs.map +0 -7
- package/dist/lib/node/chunk-5UH3F7TA.cjs.map +0 -7
- package/dist/lib/node/chunk-DJGLGRQV.cjs.map +0 -7
- package/dist/lib/node/chunk-ITAJ3WRW.cjs.map +0 -7
- package/dist/lib/node/chunk-K3ZZWVXS.cjs +0 -269
- package/dist/lib/node/chunk-K3ZZWVXS.cjs.map +0 -7
- package/dist/lib/node/chunk-TOXBGIEI.cjs +0 -261
- package/dist/lib/node/chunk-TOXBGIEI.cjs.map +0 -7
- package/dist/lib/node/chunk-XKYJYY3T.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-NYJFPD5B.cjs.map +0 -7
- package/dist/lib/node/react-surface-EGSE3FMN.cjs.map +0 -7
- package/dist/lib/node-esm/ScriptContainer-7FTCFIF3.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-KT4DK2LQ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2AFXX34U.mjs +0 -241
- package/dist/lib/node-esm/chunk-2AFXX34U.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NRICF4KE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P2V2Y5LV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-S64WSJQK.mjs +0 -235
- package/dist/lib/node-esm/chunk-S64WSJQK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YIWRJ25J.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-7YSGHZQM.mjs.map +0 -7
- /package/dist/lib/browser/{chunk-6MOQ4BP3.mjs.map → chunk-FG66JYON.mjs.map} +0 -0
- /package/dist/lib/browser/{compiler-YY2XSKHQ.mjs.map → compiler-ZQLHHJ5P.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-SZCDKHWO.mjs.map → settings-467GVEBU.mjs.map} +0 -0
- /package/dist/lib/node/{chunk-ALY3N6PW.cjs.map → chunk-AOKGOI5J.cjs.map} +0 -0
- /package/dist/lib/node/{compiler-UIBLKJKG.cjs.map → compiler-5ALLTH2B.cjs.map} +0 -0
- /package/dist/lib/node/{settings-SZFSMSKM.cjs.map → settings-WLYT2XQF.cjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-CP5LXTK5.mjs.map → chunk-MFXRE7ZD.mjs.map} +0 -0
- /package/dist/lib/node-esm/{compiler-XTXFGZJM.mjs.map → compiler-K7GYROAO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-GR4O2WHZ.mjs.map → settings-DR3B6GHE.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/deploy.ts", "../../../src/hooks/useToolbarState.ts", "../../../src/hooks/format.ts", "../../../src/hooks/template.ts", "../../../src/hooks/view.ts", "../../../src/hooks/useToolbarAction.ts", "../../../src/components/LogsPanel/LogsPanel.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n FunctionType,\n type ScriptType,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n incrementSemverPatch,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '@dxos/functions';\nimport { Bundler } from '@dxos/functions/bundler';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, create, getMeta, getSpace, makeRef, useQuery } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { type ViewState } from './view';\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type DeployActionProperties = { type: 'deploy' } | { type: 'copy' };\n\nexport type DeployState = ViewState & {\n deploying: boolean;\n deployed: boolean;\n functionUrl: string;\n error: string;\n};\n\nexport const createDeploy = (state: Partial<DeployState>) => {\n const errorItem = createMenuAction('error', {\n label: state.error ?? ['no error label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--warning-circle--regular',\n hidden: !state.error,\n });\n\n const deployAction = createMenuAction<DeployActionProperties>('deploy', {\n type: 'deploy',\n label: [state.deploying ? 'pending label' : 'deploy label', { ns: SCRIPT_PLUGIN }],\n icon: state.deploying ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular',\n disabled: state.deploying,\n classNames: state.deploying ? '[&_svg]:animate-spin' : '',\n });\n\n const copyAction = createMenuAction<DeployActionProperties>('copy', {\n type: 'copy',\n label: ['copy link label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--link--regular',\n disabled: !state.functionUrl,\n });\n\n return {\n nodes: [errorItem, deployAction, copyAction],\n edges: [\n { source: 'root', target: 'error' },\n { source: 'root', target: 'deploy' },\n { source: 'root', target: 'copy' },\n ],\n };\n};\n\nexport const useDeployDeps = ({ script }: { script: ScriptType }) => {\n const space = getSpace(script);\n const [fn] = useQuery(space, Filter.schema(FunctionType, { source: script }));\n const client = useClient();\n const existingFunctionUrl = useMemo(() => fn && getUserFunctionUrlInMetadata(getMeta(fn)), [fn]);\n return { space, fn, client, existingFunctionUrl };\n};\n\nexport const useDeployState = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, client, existingFunctionUrl } = useDeployDeps({ script });\n useEffect(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n state.functionUrl = getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n useEffect(() => {\n state.deployed = Boolean(existingFunctionUrl) && !script.changed;\n }, [script.changed, existingFunctionUrl]);\n};\n\nexport const useDeployHandler = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, fn, client, existingFunctionUrl } = useDeployDeps({ script });\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n return useCallback(async () => {\n if (!script.source || !space) {\n return;\n }\n\n state.error = undefined;\n state.deploying = true;\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle({ source: script.source.target!.content });\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { functionId, version, meta } = await uploadWorkerFunction({\n client,\n spaceId: space.id,\n version: fn ? incrementSemverPatch(fn.version) : '0.0.1',\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (functionId === undefined || version === undefined) {\n throw new Error(`Upload didn't return expected data: functionId=${functionId}, version=${version}`);\n }\n\n log.info('function uploaded', { functionId, version });\n if (fn) {\n fn.version = version;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { name: functionId, version, source: makeRef(script) }));\n\n script.changed = false;\n if (script.description !== undefined && script.description.trim() !== '') {\n deployedFunction.description = script.description;\n } else if (meta.description) {\n deployedFunction.description = meta.description;\n } else {\n log.verbose('no description in function metadata', { functionId });\n }\n\n if (meta.inputSchema) {\n deployedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n\n if (meta.outputSchema) {\n deployedFunction.outputSchema = meta.outputSchema;\n } else {\n log.verbose('no output schema in function metadata', { functionId });\n }\n\n setUserFunctionUrlInMetadata(getMeta(deployedFunction), `/${space.id}/${functionId}`);\n } catch (err: any) {\n log.catch(err);\n state.error = t('upload failed label');\n }\n state.deploying = false;\n }, [fn, client, t, existingFunctionUrl, script, script.name, script.source, space?.id ?? null]);\n};\n\nexport const useCopyHandler = ({ state }: { state: Partial<DeployState> }) =>\n useCallback(async () => {\n if (!state.functionUrl) {\n return;\n }\n await navigator.clipboard.writeText(state.functionUrl);\n }, [state.functionUrl]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { create } from '@dxos/live-object';\n\nimport { type DeployState } from './deploy';\n\nexport type ScriptToolbarState = Partial<DeployState>;\n\n// TODO(burdon): Replace with context provider?\nexport const useToolbarState = (initialState: ScriptToolbarState = {}) => {\n return useMemo(() => create<ScriptToolbarState>(initialState), []);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions/types';\nimport { log } from '@dxos/log';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type FormatActionProperties = { type: 'format' };\n\nexport const createFormat = () => {\n const formatAction = createMenuAction('format', {\n label: ['format label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--magic-wand--regular',\n });\n\n return {\n nodes: [formatAction],\n edges: [{ source: 'root', target: 'format' }],\n };\n};\n\nexport const useFormatHandler = ({ script }: { script: ScriptType }) =>\n useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.target!.content = await format(script.source.target!.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// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions/types';\nimport { getMeta } from '@dxos/live-object';\nimport { createMenuItemGroup, createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { templates } from '../templates';\n\nexport type TemplateActionProperties = { type: 'template'; value: string };\n\nconst createTemplateSelectGroup = () => {\n return createMenuItemGroup('template-select', {\n label: ['template select group label', { ns: SCRIPT_PLUGIN }],\n variant: 'dropdownMenu',\n });\n};\n\nconst createTemplateSelectActions = () => {\n return templates.map((template) => {\n return createMenuAction<TemplateActionProperties>(`template--${template.id}`, {\n label: template.name,\n value: template.id,\n type: 'template',\n });\n });\n};\n\nexport const createTemplateSelect = () => {\n const templateSelectGroup = createTemplateSelectGroup();\n const templateSelectActions = createTemplateSelectActions();\n return {\n nodes: [templateSelectGroup, ...templateSelectActions],\n edges: [\n { source: 'root', target: 'template-select' },\n ...templateSelectActions.map((action) => ({ source: 'template-select', target: action.id })),\n ],\n };\n};\n\nexport const useTemplateSelectHandler = ({ script }: { script: ScriptType }) => {\n return useCallback(\n (templateId: string) => {\n const template = templates.find((template) => template.id === templateId);\n if (template) {\n script.name = template.name;\n script.source!.target!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n },\n [script],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type ViewType = /* 'editor' | 'split' | */ 'logs';\n\nexport type ViewState = { view: ViewType };\n\nexport type ViewActionProperties = { type: 'view'; value: ViewType };\n\nconst views: Record<ViewType, string> = {\n // editor: 'ph--code--regular',\n // split: 'ph--square-split-vertical--regular',\n logs: 'ph--clock-counter-clockwise--regular',\n};\n\nconst createViewActions = (state: Partial<ViewState>) => {\n return Object.entries(views).map(([viewType, icon]) => {\n return createMenuAction<ViewActionProperties>(`view--${viewType}`, {\n type: 'view',\n value: viewType as ViewType,\n label: [`view ${viewType} label`, { ns: SCRIPT_PLUGIN }],\n icon,\n });\n });\n};\n\nexport const createView = (state: Partial<ViewState>) => {\n const viewActions = createViewActions(state);\n return {\n nodes: viewActions,\n edges: viewActions.map((action) => ({ source: 'root', target: action.id })),\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ScriptType } from '@dxos/functions/types';\nimport { log } from '@dxos/log';\nimport { DeckAction, surfaceVariant } from '@dxos/plugin-deck/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type MenuAction, type MenuActionHandler } from '@dxos/react-ui-menu';\n\nimport { type DeployActionProperties, useDeployHandler, useCopyHandler } from './deploy';\nimport { type FormatActionProperties, useFormatHandler } from './format';\nimport { type TemplateActionProperties, useTemplateSelectHandler } from './template';\nimport { type ScriptToolbarState } from './useToolbarState';\nimport { type ViewActionProperties } from './view';\n\nexport type ScriptToolbarActionProperties =\n | TemplateActionProperties\n | ViewActionProperties\n | FormatActionProperties\n | DeployActionProperties;\n\nexport type ScriptToolbarAction = MenuAction<ScriptToolbarActionProperties>;\n\nexport const useToolbarAction = (props: { state: ScriptToolbarState; script: ScriptType }) => {\n const handleTemplateSelect = useTemplateSelectHandler(props);\n const handleFormat = useFormatHandler(props);\n const handleDeploy = useDeployHandler(props);\n const handleCopy = useCopyHandler(props);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n return useCallback(\n ((action: ScriptToolbarAction) => {\n switch (action.properties.type) {\n case 'view':\n void dispatch(\n createIntent(DeckAction.ChangeCompanion, {\n primary: fullyQualifiedId(props.script),\n companion: surfaceVariant('logs'),\n }),\n );\n break;\n case 'template':\n handleTemplateSelect(action.properties.value);\n break;\n case 'format':\n void handleFormat();\n break;\n case 'deploy':\n void handleDeploy();\n break;\n case 'copy':\n void handleCopy();\n break;\n default:\n log.error('Unknown action type', action);\n }\n }) as MenuActionHandler,\n [handleTemplateSelect, handleFormat, handleDeploy, handleCopy],\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { decodeReference } from '@dxos/echo-protocol';\nimport { type InvocationTraceEvent, type ScriptType, type TraceEvent } from '@dxos/functions/types';\nimport { useQueue } from '@dxos/react-client/echo';\nimport { Icon, List, ListItem, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useDeployDeps } from '../../hooks';\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type LogsPanelProps = ThemedClassName<{\n script: ScriptType;\n}>;\n\nexport const LogsPanel = ({ script, classNames }: LogsPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n // TODO(wittjosiah): Refactor these hooks.\n const { space, existingFunctionUrl } = useDeployDeps({ script });\n const invocationTraceQueue = useQueue<InvocationTraceEvent>(space?.properties.invocationTraceQueue?.dxn, {\n pollInterval: 500,\n });\n const [selected, setSelected] = useState<InvocationTraceEvent>();\n const workerDxn = `dxn:worker:${existingFunctionUrl?.split('/').at(-1)}`;\n\n if (!invocationTraceQueue) {\n return <div>{t('no invocations message')}</div>;\n }\n\n const handleOpenChange = useCallback((trace: InvocationTraceEvent, open: boolean) => {\n setSelected(open ? trace : undefined);\n }, []);\n\n return (\n <List classNames={mx('overflow-y-auto', classNames)}>\n {invocationTraceQueue.items\n .filter((trace) => decodeReference(trace.invocationTarget).dxn?.toString() === workerDxn)\n .map((trace) => (\n <InvocationTraceItem\n key={trace.id}\n trace={trace}\n open={selected?.id === trace.id}\n setOpen={handleOpenChange}\n />\n ))}\n </List>\n );\n};\n\nconst InvocationTraceItem = ({\n trace,\n open,\n setOpen,\n}: {\n trace: InvocationTraceEvent;\n open?: boolean;\n setOpen?: (trace: InvocationTraceEvent, open: boolean) => void;\n}) => {\n const eventQueue = useQueue<TraceEvent>(open ? decodeReference(trace.invocationTraceQueue).dxn : undefined);\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n setOpen?.(trace, open);\n },\n [trace, setOpen],\n );\n\n const logs = useMemo(() => eventQueue?.items.flatMap((event) => event.logs), [eventQueue?.items]);\n const heading =\n 'bodyText' in trace.input && typeof trace.input.bodyText === 'string'\n ? trace.input.bodyText\n : JSON.stringify(trace.input);\n\n return (\n <ListItem.Root key={trace.id} collapsible open={open} onOpenChange={handleOpenChange}>\n <div className='flex items-center gap-2'>\n <ListItem.OpenTrigger />\n <ListItem.Endcap classNames='flex items-center justify-center'>\n <Icon icon={trace.outcome === 'success' ? 'ph--check--regular' : 'ph--x--regular'} size={5} />\n </ListItem.Endcap>\n <ListItem.Heading classNames='flex-1 flex items-center gap-2 truncate'>\n <span>{new Date(trace.timestampMs).toLocaleString()}</span>\n <span>{heading}</span>\n </ListItem.Heading>\n </div>\n {logs && (\n <ListItem.CollapsibleContent>\n <div className='flex items-center gap-2'>\n <span>Duration:</span>\n <span>{trace.durationMs}ms</span>\n </div>\n <pre>\n <div>{JSON.stringify(trace.input, null, 2)}</div>\n {logs.map((log, index) => {\n return <div key={index}>{JSON.stringify(log, null, 2)}</div>;\n })}\n </pre>\n </ListItem.CollapsibleContent>\n )}\n </ListItem.Root>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAgD;AAEhD,uBAQO;AACP,qBAAwB;AACxB,iBAAoB;AACpB,0BAA0B;AAC1B,kBAAqE;AACrE,sBAA+B;AAC/B,2BAAiC;AChBjC,IAAAA,gBAAwB;AAExB,yBAAuB;ACFvB,sBAAuB;AACvB,oBAAiC;AACjC,wBAAqC;AACrC,IAAAA,gBAA4B;AAG5B,IAAAC,cAAoB;AACpB,IAAAC,wBAAiC;ACPjC,IAAAF,gBAA4B;AAE5B,mBAA2D;AAC3D,IAAAG,sBAAwB;AACxB,IAAAD,wBAAsD;ACJtD,IAAAA,wBAAiC;ACAjC,IAAAF,gBAA4B;AAE5B,2BAAkD;AAElD,IAAAC,cAAoB;AACpB,IAAAG,gBAA2C;AAC3C,IAAAC,eAAiC;ACNjC,IAAAL,gBAAsD;AAEtD,2BAAgC;AAEhC,IAAAK,eAAyB;AACzB,IAAAC,mBAA2E;AAC3E,4BAAmB;;ANwBZ,IAAMC,eAAe,CAACC,UAAAA;AAC3B,QAAMC,gBAAYC,uCAAiB,SAAS;IAC1CC,OAAOH,MAAMI,SAAS;MAAC;MAAkB;QAAEC,IAAIC;MAAc;;IAC7DC,MAAM;IACNC,QAAQ,CAACR,MAAMI;EACjB,CAAA;AAEA,QAAMK,mBAAeP,uCAAyC,UAAU;IACtEQ,MAAM;IACNP,OAAO;MAACH,MAAMW,YAAY,kBAAkB;MAAgB;QAAEN,IAAIC;MAAc;;IAChFC,MAAMP,MAAMW,YAAY,6BAA6B;IACrDC,UAAUZ,MAAMW;IAChBE,YAAYb,MAAMW,YAAY,yBAAyB;EACzD,CAAA;AAEA,QAAMG,iBAAaZ,uCAAyC,QAAQ;IAClEQ,MAAM;IACNP,OAAO;MAAC;MAAmB;QAAEE,IAAIC;MAAc;;IAC/CC,MAAM;IACNK,UAAU,CAACZ,MAAMe;EACnB,CAAA;AAEA,SAAO;IACLC,OAAO;MAACf;MAAWQ;MAAcK;;IACjCG,OAAO;MACL;QAAEC,QAAQ;QAAQC,QAAQ;MAAQ;MAClC;QAAED,QAAQ;QAAQC,QAAQ;MAAS;MACnC;QAAED,QAAQ;QAAQC,QAAQ;MAAO;;EAErC;AACF;AAEO,IAAMC,gBAAgB,CAAC,EAAEC,OAAM,MAA0B;AAC9D,QAAMC,YAAQC,sBAASF,MAAAA;AACvB,QAAM,CAACG,EAAAA,QAAMC,sBAASH,OAAOI,mBAAOC,OAAOC,+BAAc;IAAEV,QAAQG;EAAO,CAAA,CAAA;AAC1E,QAAMQ,aAASC,+BAAAA;AACf,QAAMC,0BAAsBC,sBAAQ,MAAMR,UAAMS,mDAA6BC,qBAAQV,EAAAA,CAAAA,GAAM;IAACA;GAAG;AAC/F,SAAO;IAAEF;IAAOE;IAAIK;IAAQE;EAAoB;AAClD;AAEO,IAAMI,iBAAiB,CAAC,EAAEnC,OAAOqB,OAAM,MAAuD;AACnG,QAAM,EAAEC,OAAOO,QAAQE,oBAAmB,IAAKX,cAAc;IAAEC;EAAO,CAAA;AACtEe,8BAAU,MAAA;AACR,QAAI,CAACL,qBAAqB;AACxB;IACF;AAEA/B,UAAMe,kBAAcsB,mCAAiBN,qBAAqBF,OAAOS,OAAOC,OAAOC,SAASC,UAAUC,MAAMC,OAAO,IAAI;MACjHC,SAAStB,OAAOuB;IAClB,CAAA;EACF,GAAG;IAACd;IAAqBT;GAAM;AAE/Bc,8BAAU,MAAA;AACRpC,UAAM8C,WAAWC,QAAQhB,mBAAAA,KAAwB,CAACV,OAAO2B;EAC3D,GAAG;IAAC3B,OAAO2B;IAASjB;GAAoB;AAC1C;AAEO,IAAMkB,mBAAmB,CAAC,EAAEjD,OAAOqB,OAAM,MAAuD;AACrG,QAAM,EAAEC,OAAOE,IAAIK,QAAQE,oBAAmB,IAAKX,cAAc;IAAEC;EAAO,CAAA;AAC1E,QAAM,EAAE6B,EAAC,QAAKC,gCAAe7C,mCAAAA;AAE7B,aAAO8C,0BAAY,YAAA;AACjB,QAAI,CAAC/B,OAAOH,UAAU,CAACI,OAAO;AAC5B;IACF;AAEAtB,UAAMI,QAAQiD;AACdrD,UAAMW,YAAY;AAElB,QAAI;AACF,YAAM2C,qBAAqBvB,qBAAqBwB,MAAM,GAAA,EAAKC,GAAG,EAAC;AAE/D,YAAMC,UAAU,IAAIC,uBAAQ;QAAEC,UAAU;QAAWC,kBAAkB,CAAA;QAAIC,eAAe,CAAC;MAAE,CAAA;AAC3F,YAAMC,cAAc,MAAML,QAAQM,OAAO;QAAE7C,QAAQG,OAAOH,OAAOC,OAAQ6C;MAAQ,CAAA;AACjF,UAAIF,YAAY1D,SAAS,CAAC0D,YAAYC,QAAQ;AAC5C,cAAMD,YAAY1D;MACpB;AAEA,YAAM,EAAE6D,YAAYC,SAASC,KAAI,IAAK,UAAMC,uCAAqB;QAC/DvC;QACAe,SAAStB,MAAMuB;QACfqB,SAAS1C,SAAK6C,uCAAqB7C,GAAG0C,OAAO,IAAI;QACjDD,YAAYX;QACZpC,QAAQ4C,YAAYC;MACtB,CAAA;AACA,UAAIE,eAAeZ,UAAaa,YAAYb,QAAW;AACrD,cAAM,IAAIiB,MAAM,kDAAkDL,UAAAA,aAAuBC,OAAAA,EAAS;MACpG;AAEAK,qBAAIC,KAAK,qBAAqB;QAAEP;QAAYC;MAAQ,GAAA;;;;;;AACpD,UAAI1C,IAAI;AACNA,WAAG0C,UAAUA;MACf;AAEA,YAAMO,mBACJjD,MAAMF,MAAMoD,GAAGC,QAAIC,oBAAOhD,+BAAc;QAAEiD,MAAMZ;QAAYC;QAAShD,YAAQ4D,qBAAQzD,MAAAA;MAAQ,CAAA,CAAA;AAE/FA,aAAO2B,UAAU;AACjB,UAAI3B,OAAO0D,gBAAgB1B,UAAahC,OAAO0D,YAAYC,KAAI,MAAO,IAAI;AACxEP,yBAAiBM,cAAc1D,OAAO0D;MACxC,WAAWZ,KAAKY,aAAa;AAC3BN,yBAAiBM,cAAcZ,KAAKY;MACtC,OAAO;AACLR,uBAAIU,QAAQ,uCAAuC;UAAEhB;QAAW,GAAA;;;;;;MAClE;AAEA,UAAIE,KAAKe,aAAa;AACpBT,yBAAiBS,cAAcf,KAAKe;MACtC,OAAO;AACLX,uBAAIU,QAAQ,wCAAwC;UAAEhB;QAAW,GAAA;;;;;;MACnE;AAEA,UAAIE,KAAKgB,cAAc;AACrBV,yBAAiBU,eAAehB,KAAKgB;MACvC,OAAO;AACLZ,uBAAIU,QAAQ,yCAAyC;UAAEhB;QAAW,GAAA;;;;;;MACpE;AAEAmB,6DAA6BlD,qBAAQuC,gBAAAA,GAAmB,IAAInD,MAAMuB,EAAE,IAAIoB,UAAAA,EAAY;IACtF,SAASoB,KAAU;AACjBd,qBAAIe,MAAMD,KAAAA,QAAAA;;;;;;AACVrF,YAAMI,QAAQ8C,EAAE,qBAAA;IAClB;AACAlD,UAAMW,YAAY;EACpB,GAAG;IAACa;IAAIK;IAAQqB;IAAGnB;IAAqBV;IAAQA,OAAOwD;IAAMxD,OAAOH;IAAQI,OAAOuB,MAAM;GAAK;AAChG;AAEO,IAAM0C,iBAAiB,CAAC,EAAEvF,MAAK,UACpCoD,0BAAY,YAAA;AACV,MAAI,CAACpD,MAAMe,aAAa;AACtB;EACF;AACA,QAAMyE,UAAUC,UAAUC,UAAU1F,MAAMe,WAAW;AACvD,GAAG;EAACf,MAAMe;CAAY;AC1JjB,IAAM4E,kBAAkB,CAACC,eAAmC,CAAC,MAAC;AACnE,aAAO5D,cAAAA,SAAQ,UAAM4C,mBAAAA,QAA2BgB,YAAAA,GAAe,CAAA,CAAE;AACnE;;ACEO,IAAMC,eAAe,MAAA;AAC1B,QAAMC,mBAAe5F,sBAAAA,kBAAiB,UAAU;IAC9CC,OAAO;MAAC;MAAgB;QAAEE,IAAIC;MAAc;;IAC5CC,MAAM;EACR,CAAA;AAEA,SAAO;IACLS,OAAO;MAAC8E;;IACR7E,OAAO;MAAC;QAAEC,QAAQ;QAAQC,QAAQ;MAAS;;EAC7C;AACF;AAEO,IAAM4E,mBAAmB,CAAC,EAAE1E,OAAM,UACvC+B,cAAAA,aAAY,YAAA;AACV,MAAI,CAAC/B,OAAOH,QAAQ;AAClB;EACF;AAEA,MAAI;AACFG,WAAOH,OAAOC,OAAQ6C,UAAU,UAAMgC,wBAAO3E,OAAOH,OAAOC,OAAQ6C,SAAS;MAC1EiC,QAAQ;MACRC,SAAS;QAACC,cAAAA;QAAsBC,kBAAAA;;MAChCC,MAAM;MACNC,aAAa;IACf,CAAA;EACF,SAASjB,KAAU;AAEjBd,gBAAAA,IAAIe,MAAMD,KAAAA,QAAAA;;;;;;EACZ;AACF,GAAG;EAAChE,OAAOH;CAAO;AC/BpB,IAAMqF,4BAA4B,MAAA;AAChC,aAAOC,2CAAoB,mBAAmB;IAC5CrG,OAAO;MAAC;MAA+B;QAAEE,IAAIC;MAAc;;IAC3DmG,SAAS;EACX,CAAA;AACF;AAEA,IAAMC,8BAA8B,MAAA;AAClC,SAAOC,gCAAUC,IAAI,CAACC,aAAAA;AACpB,eAAO3G,sBAAAA,kBAA2C,aAAa2G,SAAShE,EAAE,IAAI;MAC5E1C,OAAO0G,SAAShC;MAChBiC,OAAOD,SAAShE;MAChBnC,MAAM;IACR,CAAA;EACF,CAAA;AACF;AAEO,IAAMqG,uBAAuB,MAAA;AAClC,QAAMC,sBAAsBT,0BAAAA;AAC5B,QAAMU,wBAAwBP,4BAAAA;AAC9B,SAAO;IACL1F,OAAO;MAACgG;SAAwBC;;IAChChG,OAAO;MACL;QAAEC,QAAQ;QAAQC,QAAQ;MAAkB;SACzC8F,sBAAsBL,IAAI,CAACM,YAAY;QAAEhG,QAAQ;QAAmBC,QAAQ+F,OAAOrE;MAAG,EAAA;;EAE7F;AACF;AAEO,IAAMsE,2BAA2B,CAAC,EAAE9F,OAAM,MAA0B;AACzE,aAAO+B,cAAAA,aACL,CAACgE,eAAAA;AACC,UAAMP,WAAWF,gCAAUU,KAAK,CAACR,cAAaA,UAAShE,OAAOuE,UAAAA;AAC9D,QAAIP,UAAU;AACZxF,aAAOwD,OAAOgC,SAAShC;AACvBxD,aAAOH,OAAQC,OAAQ6C,UAAU6C,SAAS3F;AAC1C,YAAMoG,eAAWpF,oBAAAA,SAAQb,MAAAA,EAAQkG;AACjC,YAAMC,iBAAiBF,SAASG,UAAU,CAACC,QAAQA,IAAIxG,WAAWyG,sCAAAA;AAClE,UAAIH,kBAAkB,GAAG;AACvBF,iBAASM,OAAOJ,gBAAgB,CAAA;MAClC;AACA,UAAIX,SAASgB,UAAU;AACrBP,iBAASQ,KAAK;UAAE5G,QAAQyG;UAA2B9E,IAAIgE,SAASgB;QAAS,CAAA;MAC3E;IACF;EACF,GACA;IAACxG;GAAO;AAEZ;ACjDA,IAAM0G,QAAkC;;;EAGtCC,MAAM;AACR;AAEA,IAAMC,oBAAoB,CAACjI,UAAAA;AACzB,SAAOkI,OAAOC,QAAQJ,KAAAA,EAAOnB,IAAI,CAAC,CAACwB,UAAU7H,IAAAA,MAAK;AAChD,eAAOL,sBAAAA,kBAAuC,SAASkI,QAAAA,IAAY;MACjE1H,MAAM;MACNoG,OAAOsB;MACPjI,OAAO;QAAC,QAAQiI,QAAAA;QAAkB;UAAE/H,IAAIC;QAAc;;MACtDC;IACF,CAAA;EACF,CAAA;AACF;AAEO,IAAM8H,aAAa,CAACrI,UAAAA;AACzB,QAAMsI,cAAcL,kBAAkBjI,KAAAA;AACtC,SAAO;IACLgB,OAAOsH;IACPrH,OAAOqH,YAAY1B,IAAI,CAACM,YAAY;MAAEhG,QAAQ;MAAQC,QAAQ+F,OAAOrE;IAAG,EAAA;EAC1E;AACF;;ACVO,IAAM0F,mBAAmB,CAACC,UAAAA;AAC/B,QAAMC,uBAAuBtB,yBAAyBqB,KAAAA;AACtD,QAAME,eAAe3C,iBAAiByC,KAAAA;AACtC,QAAMG,eAAe1F,iBAAiBuF,KAAAA;AACtC,QAAMI,aAAarD,eAAeiD,KAAAA;AAClC,QAAM,EAAEK,iBAAiBC,SAAQ,QAAKC,0CAAAA;AACtC,aAAO3F,cAAAA,aACJ,CAAC8D,WAAAA;AACA,YAAQA,OAAO8B,WAAWtI,MAAI;MAC5B,KAAK;AACH,aAAKoI,aACHG,mCAAaC,yBAAWC,iBAAiB;UACvCC,aAASC,+BAAiBb,MAAMnH,MAAM;UACtCiI,eAAWC,8BAAe,MAAA;QAC5B,CAAA,CAAA;AAEF;MACF,KAAK;AACHd,6BAAqBvB,OAAO8B,WAAWlC,KAAK;AAC5C;MACF,KAAK;AACH,aAAK4B,aAAAA;AACL;MACF,KAAK;AACH,aAAKC,aAAAA;AACL;MACF,KAAK;AACH,aAAKC,WAAAA;AACL;MACF;AACErE,oBAAAA,IAAInE,MAAM,uBAAuB8G,QAAAA;;;;;;IACrC;EACF,GACA;IAACuB;IAAsBC;IAAcC;IAAcC;GAAW;AAElE;AC3CO,IAAMY,YAAY,CAAC,EAAEnI,QAAQR,WAAU,MAAkB;AAC9D,QAAM,EAAEqC,EAAC,QAAKC,iBAAAA,gBAAe7C,mCAAAA;AAE7B,QAAM,EAAEgB,OAAOS,oBAAmB,IAAKX,cAAc;IAAEC;EAAO,CAAA;AAC9D,QAAMoI,2BAAuBC,uBAA+BpI,OAAO0H,WAAWS,sBAAsBE,KAAK;IACvGC,cAAc;EAChB,CAAA;AACA,QAAM,CAACC,UAAUC,WAAAA,QAAeC,wBAAAA;AAChC,QAAMC,YAAY,cAAcjI,qBAAqBwB,MAAM,GAAA,EAAKC,GAAG,EAAC,CAAA;AAEpE,MAAI,CAACiG,sBAAsB;AACzB,WAAO,8BAAAQ,QAAA,cAACC,OAAAA,MAAKhH,EAAE,wBAAA,CAAA;EACjB;AAEA,QAAMiH,uBAAmB/G,cAAAA,aAAY,CAACgH,OAA6BC,SAAAA;AACjEP,gBAAYO,OAAOD,QAAQ/G,MAAAA;EAC7B,GAAG,CAAA,CAAE;AAEL,SACE,8BAAA4G,QAAA,cAACK,uBAAAA;IAAKzJ,gBAAY0J,0BAAG,mBAAmB1J,UAAAA;KACrC4I,qBAAqBe,MACnBC,OAAO,CAACL,cAAUM,sCAAgBN,MAAMO,gBAAgB,EAAEhB,KAAKiB,SAAAA,MAAeZ,SAAAA,EAC9EpD,IAAI,CAACwD,UACJ,8BAAAH,QAAA,cAACY,qBAAAA;IACCnD,KAAK0C,MAAMvH;IACXuH;IACAC,MAAMR,UAAUhH,OAAOuH,MAAMvH;IAC7BiI,SAASX;;AAKrB;AAEA,IAAMU,sBAAsB,CAAC,EAC3BT,OACAC,MACAS,QAAO,MAKR;AACC,QAAMC,iBAAarB,uBAAqBW,WAAOK,sCAAgBN,MAAMX,oBAAoB,EAAEE,MAAMtG,MAAAA;AAEjG,QAAM8G,uBAAmB/G,cAAAA,aACvB,CAACiH,UAAAA;AACCS,cAAUV,OAAOC,KAAAA;EACnB,GACA;IAACD;IAAOU;GAAQ;AAGlB,QAAM9C,WAAOhG,cAAAA,SAAQ,MAAM+I,YAAYP,MAAMQ,QAAQ,CAACC,UAAUA,MAAMjD,IAAI,GAAG;IAAC+C,YAAYP;GAAM;AAChG,QAAMU,UACJ,cAAcd,MAAMe,SAAS,OAAOf,MAAMe,MAAMC,aAAa,WACzDhB,MAAMe,MAAMC,WACZC,KAAKC,UAAUlB,MAAMe,KAAK;AAEhC,SACE,8BAAAlB,QAAA,cAACsB,0BAASC,MAAI;IAAC9D,KAAK0C,MAAMvH;IAAI4I,aAAAA;IAAYpB;IAAYqB,cAAcvB;KAClE,8BAAAF,QAAA,cAACC,OAAAA;IAAIyB,WAAU;KACb,8BAAA1B,QAAA,cAACsB,0BAASK,aAAW,IAAA,GACrB,8BAAA3B,QAAA,cAACsB,0BAASM,QAAM;IAAChL,YAAW;KAC1B,8BAAAoJ,QAAA,cAAC6B,uBAAAA;IAAKvL,MAAM6J,MAAM2B,YAAY,YAAY,uBAAuB;IAAkBC,MAAM;OAE3F,8BAAA/B,QAAA,cAACsB,0BAASU,SAAO;IAACpL,YAAW;KAC3B,8BAAAoJ,QAAA,cAACiC,QAAAA,MAAM,IAAIC,KAAK/B,MAAMgC,WAAW,EAAEC,eAAc,CAAA,GACjD,8BAAApC,QAAA,cAACiC,QAAAA,MAAMhB,OAAAA,CAAAA,CAAAA,GAGVlD,QACC,8BAAAiC,QAAA,cAACsB,0BAASe,oBAAkB,MAC1B,8BAAArC,QAAA,cAACC,OAAAA;IAAIyB,WAAU;KACb,8BAAA1B,QAAA,cAACiC,QAAAA,MAAK,WAAA,GACN,8BAAAjC,QAAA,cAACiC,QAAAA,MAAM9B,MAAMmC,YAAW,IAAA,CAAA,GAE1B,8BAAAtC,QAAA,cAACuC,OAAAA,MACC,8BAAAvC,QAAA,cAACC,OAAAA,MAAKmB,KAAKC,UAAUlB,MAAMe,OAAO,MAAM,CAAA,CAAA,GACvCnD,KAAKpB,IAAI,CAACrC,MAAKkI,UAAAA;AACd,WAAO,8BAAAxC,QAAA,cAACC,OAAAA;MAAIxC,KAAK+E;OAAQpB,KAAKC,UAAU/G,MAAK,MAAM,CAAA,CAAA;EACrD,CAAA,CAAA,CAAA,CAAA;AAMZ;",
|
|
6
|
+
"names": ["import_react", "import_log", "import_react_ui_menu", "import_live_object", "import_types", "import_echo", "import_react_ui", "createDeploy", "state", "errorItem", "createMenuAction", "label", "error", "ns", "SCRIPT_PLUGIN", "icon", "hidden", "deployAction", "type", "deploying", "disabled", "classNames", "copyAction", "functionUrl", "nodes", "edges", "source", "target", "useDeployDeps", "script", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "client", "useClient", "existingFunctionUrl", "useMemo", "getUserFunctionUrlInMetadata", "getMeta", "useDeployState", "useEffect", "getInvocationUrl", "config", "values", "runtime", "services", "edge", "url", "spaceId", "id", "deployed", "Boolean", "changed", "useDeployHandler", "t", "useTranslation", "useCallback", "undefined", "existingFunctionId", "split", "at", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "content", "functionId", "version", "meta", "uploadWorkerFunction", "incrementSemverPatch", "Error", "log", "info", "deployedFunction", "db", "add", "create", "name", "makeRef", "description", "trim", "verbose", "inputSchema", "outputSchema", "setUserFunctionUrlInMetadata", "err", "catch", "useCopyHandler", "navigator", "clipboard", "writeText", "useToolbarState", "initialState", "createFormat", "formatAction", "useFormatHandler", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "createTemplateSelectGroup", "createMenuItemGroup", "variant", "createTemplateSelectActions", "templates", "map", "template", "value", "createTemplateSelect", "templateSelectGroup", "templateSelectActions", "action", "useTemplateSelectHandler", "templateId", "find", "metaKeys", "keys", "oldPresetIndex", "findIndex", "key", "FUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "views", "logs", "createViewActions", "Object", "entries", "viewType", "createView", "viewActions", "useToolbarAction", "props", "handleTemplateSelect", "handleFormat", "handleDeploy", "handleCopy", "dispatchPromise", "dispatch", "useIntentDispatcher", "properties", "createIntent", "DeckAction", "ChangeCompanion", "primary", "fullyQualifiedId", "companion", "surfaceVariant", "LogsPanel", "invocationTraceQueue", "useQueue", "dxn", "pollInterval", "selected", "setSelected", "useState", "workerDxn", "React", "div", "handleOpenChange", "trace", "open", "List", "mx", "items", "filter", "decodeReference", "invocationTarget", "toString", "InvocationTraceItem", "setOpen", "eventQueue", "flatMap", "event", "heading", "input", "bodyText", "JSON", "stringify", "ListItem", "Root", "collapsible", "onOpenChange", "className", "OpenTrigger", "Endcap", "Icon", "outcome", "size", "Heading", "span", "Date", "timestampMs", "toLocaleString", "CollapsibleContent", "durationMs", "pre", "index"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,493 @@
|
|
|
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 chunk_W4U3OWKO_exports = {};
|
|
30
|
+
__export(chunk_W4U3OWKO_exports, {
|
|
31
|
+
DebugPanel: () => DebugPanel,
|
|
32
|
+
ScriptContainer: () => ScriptContainer,
|
|
33
|
+
ScriptSettings: () => ScriptSettings,
|
|
34
|
+
ScriptSettingsPanel: () => ScriptSettingsPanel
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(chunk_W4U3OWKO_exports);
|
|
37
|
+
var import_chunk_2XX4L67K = require("./chunk-2XX4L67K.cjs");
|
|
38
|
+
var import_react = __toESM(require("react"));
|
|
39
|
+
var import_log = require("@dxos/log");
|
|
40
|
+
var import_react_ui = require("@dxos/react-ui");
|
|
41
|
+
var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
|
|
42
|
+
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
43
|
+
var import_react2 = __toESM(require("react"));
|
|
44
|
+
var import_react_client = require("@dxos/react-client");
|
|
45
|
+
var import_react_ui2 = require("@dxos/react-ui");
|
|
46
|
+
var import_react_ui_editor = require("@dxos/react-ui-editor");
|
|
47
|
+
var import_react_ui_form = require("@dxos/react-ui-form");
|
|
48
|
+
var import_core = require("@octokit/core");
|
|
49
|
+
var import_react3 = __toESM(require("react"));
|
|
50
|
+
var import_app_framework = require("@dxos/app-framework");
|
|
51
|
+
var import_types = require("@dxos/functions/types");
|
|
52
|
+
var import_log2 = require("@dxos/log");
|
|
53
|
+
var import_react_client2 = require("@dxos/react-client");
|
|
54
|
+
var import_echo = require("@dxos/react-client/echo");
|
|
55
|
+
var import_react_ui3 = require("@dxos/react-ui");
|
|
56
|
+
var import_schema = require("@dxos/schema");
|
|
57
|
+
var import_react4 = require("react");
|
|
58
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx";
|
|
59
|
+
var DebugPanel = ({ classNames, functionUrl }) => {
|
|
60
|
+
const { t } = (0, import_react_ui.useTranslation)(import_chunk_2XX4L67K.SCRIPT_PLUGIN);
|
|
61
|
+
const inputRef = (0, import_react.useRef)(null);
|
|
62
|
+
const [input, setInput] = (0, import_react.useState)("");
|
|
63
|
+
const [result, setResult] = (0, import_react.useState)("");
|
|
64
|
+
const [state, setState] = (0, import_react.useState)(null);
|
|
65
|
+
const [history, setHistory] = (0, import_react.useState)([]);
|
|
66
|
+
const scrollerRef = (0, import_react.useRef)(null);
|
|
67
|
+
const handleScroll = () => {
|
|
68
|
+
if (scrollerRef.current) {
|
|
69
|
+
scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const controller = (0, import_react.useRef)();
|
|
73
|
+
(0, import_react.useEffect)(() => {
|
|
74
|
+
return () => {
|
|
75
|
+
handleStop();
|
|
76
|
+
};
|
|
77
|
+
}, []);
|
|
78
|
+
const handleStop = () => {
|
|
79
|
+
controller.current?.abort("stop");
|
|
80
|
+
controller.current = void 0;
|
|
81
|
+
};
|
|
82
|
+
const handleClear = () => {
|
|
83
|
+
handleStop();
|
|
84
|
+
setInput("");
|
|
85
|
+
setResult("");
|
|
86
|
+
setHistory([]);
|
|
87
|
+
inputRef.current?.focus();
|
|
88
|
+
};
|
|
89
|
+
const handleResponse = ({ text, data, error } = {}) => {
|
|
90
|
+
controller.current = void 0;
|
|
91
|
+
setHistory((history2) => [
|
|
92
|
+
...history2,
|
|
93
|
+
{
|
|
94
|
+
type: "response",
|
|
95
|
+
text,
|
|
96
|
+
data,
|
|
97
|
+
error
|
|
98
|
+
}
|
|
99
|
+
]);
|
|
100
|
+
setResult("");
|
|
101
|
+
setState(null);
|
|
102
|
+
handleScroll();
|
|
103
|
+
};
|
|
104
|
+
const handleRequest = async (input2) => {
|
|
105
|
+
try {
|
|
106
|
+
setState("pending");
|
|
107
|
+
let data = null;
|
|
108
|
+
if (input2.charAt(0) === "{") {
|
|
109
|
+
try {
|
|
110
|
+
const validJsonString = input2.replace(/'/g, '"').replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3');
|
|
111
|
+
data = JSON.parse(validJsonString);
|
|
112
|
+
input2 = JSON.stringify(data, null, 2);
|
|
113
|
+
} catch (err) {
|
|
114
|
+
inputRef.current?.focus();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
setInput("");
|
|
119
|
+
setResult("");
|
|
120
|
+
setHistory((history2) => [
|
|
121
|
+
...history2,
|
|
122
|
+
{
|
|
123
|
+
type: "request",
|
|
124
|
+
text: input2
|
|
125
|
+
}
|
|
126
|
+
]);
|
|
127
|
+
setTimeout(() => {
|
|
128
|
+
handleScroll();
|
|
129
|
+
});
|
|
130
|
+
controller.current = new AbortController();
|
|
131
|
+
const response = await fetch(functionUrl, {
|
|
132
|
+
signal: controller.current.signal,
|
|
133
|
+
method: "POST",
|
|
134
|
+
body: input2,
|
|
135
|
+
headers: {
|
|
136
|
+
"Content-Type": data ? "application/json" : "text/plain"
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
if (!response.ok) {
|
|
140
|
+
const text2 = await response.text();
|
|
141
|
+
handleResponse({
|
|
142
|
+
error: new Error(text2 || response.statusText || String(response.status))
|
|
143
|
+
});
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const contentType = response.headers.get("content-type");
|
|
147
|
+
if (contentType === "application/json") {
|
|
148
|
+
const data2 = await response.json();
|
|
149
|
+
handleResponse({
|
|
150
|
+
data: data2
|
|
151
|
+
});
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
setState("responding");
|
|
155
|
+
let text = "";
|
|
156
|
+
const reader = response.body.getReader();
|
|
157
|
+
const pump = async ({ done, value }) => {
|
|
158
|
+
text = text + new TextDecoder().decode(value);
|
|
159
|
+
if (!controller.current || done) {
|
|
160
|
+
handleResponse({
|
|
161
|
+
text
|
|
162
|
+
});
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
setResult(text);
|
|
166
|
+
setTimeout(() => {
|
|
167
|
+
handleScroll();
|
|
168
|
+
});
|
|
169
|
+
return reader.read().then(pump);
|
|
170
|
+
};
|
|
171
|
+
void reader.read().then(pump).catch((err) => {
|
|
172
|
+
if (err.name !== "AbortError") {
|
|
173
|
+
import_log.log.catch(err, void 0, {
|
|
174
|
+
F: __dxlog_file,
|
|
175
|
+
L: 146,
|
|
176
|
+
S: void 0,
|
|
177
|
+
C: (f, a) => f(...a)
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
} catch (err) {
|
|
182
|
+
if (err !== "stop") {
|
|
183
|
+
const error = err instanceof Error ? err : new Error(err);
|
|
184
|
+
handleResponse({
|
|
185
|
+
error
|
|
186
|
+
});
|
|
187
|
+
import_log.log.catch(err, void 0, {
|
|
188
|
+
F: __dxlog_file,
|
|
189
|
+
L: 153,
|
|
190
|
+
S: void 0,
|
|
191
|
+
C: (f, a) => f(...a)
|
|
192
|
+
});
|
|
193
|
+
} else {
|
|
194
|
+
handleResponse();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
return /* @__PURE__ */ import_react.default.createElement("div", {
|
|
199
|
+
className: (0, import_react_ui_theme.mx)("flex flex-col h-full overflow-hidden", classNames)
|
|
200
|
+
}, /* @__PURE__ */ import_react.default.createElement(MessageThread, {
|
|
201
|
+
ref: scrollerRef,
|
|
202
|
+
state,
|
|
203
|
+
result,
|
|
204
|
+
history
|
|
205
|
+
}), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Root, {
|
|
206
|
+
classNames: "p-1"
|
|
207
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
|
|
208
|
+
ref: inputRef,
|
|
209
|
+
autoFocus: true,
|
|
210
|
+
placeholder: t("function request placeholder"),
|
|
211
|
+
value: input,
|
|
212
|
+
onChange: (ev) => setInput(ev.target.value),
|
|
213
|
+
onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
|
|
214
|
+
})), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
|
|
215
|
+
onClick: () => handleRequest(input)
|
|
216
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
|
|
217
|
+
icon: "ph--play--regular",
|
|
218
|
+
size: 4
|
|
219
|
+
})), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
|
|
220
|
+
onClick: () => state ? handleStop() : handleClear()
|
|
221
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
|
|
222
|
+
icon: state ? "ph--stop--regular" : "ph--trash--regular",
|
|
223
|
+
size: 4
|
|
224
|
+
}))));
|
|
225
|
+
};
|
|
226
|
+
var MessageThread = /* @__PURE__ */ (0, import_react.forwardRef)(({ state, history, result }, forwardedRef) => {
|
|
227
|
+
if (!history.length && !result.length) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
return /* @__PURE__ */ import_react.default.createElement("div", {
|
|
231
|
+
ref: forwardedRef,
|
|
232
|
+
className: "flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto"
|
|
233
|
+
}, history.map((message, i) => /* @__PURE__ */ import_react.default.createElement("div", {
|
|
234
|
+
key: i,
|
|
235
|
+
className: "grid grid-cols-[2rem_1fr_2rem]"
|
|
236
|
+
}, /* @__PURE__ */ import_react.default.createElement("div", {
|
|
237
|
+
className: "p-1"
|
|
238
|
+
}, message.type === "response" && /* @__PURE__ */ import_react.default.createElement(RobotAvatar, null)), /* @__PURE__ */ import_react.default.createElement("div", {
|
|
239
|
+
className: "overflow-auto"
|
|
240
|
+
}, /* @__PURE__ */ import_react.default.createElement(MessageItem, {
|
|
241
|
+
message
|
|
242
|
+
})))), result?.length > 0 && /* @__PURE__ */ import_react.default.createElement("div", {
|
|
243
|
+
className: "grid grid-cols-[2rem_1fr_2rem]"
|
|
244
|
+
}, /* @__PURE__ */ import_react.default.createElement("div", {
|
|
245
|
+
className: "p-1"
|
|
246
|
+
}, state === "pending" && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
|
|
247
|
+
icon: "ph--spinner--regular",
|
|
248
|
+
size: 6,
|
|
249
|
+
classNames: "animate-spin"
|
|
250
|
+
}) || /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
|
|
251
|
+
icon: "ph--robot--regular",
|
|
252
|
+
size: 6,
|
|
253
|
+
classNames: "animate-[pulse_1s_ease-in-out_infinite]"
|
|
254
|
+
})), /* @__PURE__ */ import_react.default.createElement("div", {
|
|
255
|
+
className: "overflow-auto"
|
|
256
|
+
}, /* @__PURE__ */ import_react.default.createElement(MessageItem, {
|
|
257
|
+
message: {
|
|
258
|
+
type: "response",
|
|
259
|
+
text: result
|
|
260
|
+
}
|
|
261
|
+
}))));
|
|
262
|
+
});
|
|
263
|
+
var MessageItem = ({ classNames, message }) => {
|
|
264
|
+
const { type, text, data, error } = message;
|
|
265
|
+
const wrapper = "p-1 px-2 rounded-lg bg-hoverSurface overflow-auto";
|
|
266
|
+
return /* @__PURE__ */ import_react.default.createElement("div", {
|
|
267
|
+
className: (0, import_react_ui_theme.mx)("flex", type === "request" ? "ml-[1rem] justify-end" : "mr-[1rem]", classNames)
|
|
268
|
+
}, error && /* @__PURE__ */ import_react.default.createElement("div", {
|
|
269
|
+
className: (0, import_react_ui_theme.mx)(wrapper, "whitespace-pre", import_react_ui_theme.errorText)
|
|
270
|
+
}, String(error)), text !== void 0 && /* @__PURE__ */ import_react.default.createElement("div", {
|
|
271
|
+
className: (0, import_react_ui_theme.mx)(wrapper, type === "request" && "bg-primary-400 dark:bg-primary-600")
|
|
272
|
+
}, text || "\xD8"), data && /* @__PURE__ */ import_react.default.createElement(import_react_ui_syntax_highlighter.SyntaxHighlighter, {
|
|
273
|
+
language: "json",
|
|
274
|
+
className: (0, import_react_ui_theme.mx)(wrapper, "px-8 py-2 text-xs")
|
|
275
|
+
}, JSON.stringify(data, null, 2)));
|
|
276
|
+
};
|
|
277
|
+
var RobotAvatar = () => /* @__PURE__ */ import_react.default.createElement(import_react_ui.Avatar.Root, {
|
|
278
|
+
size: 6,
|
|
279
|
+
variant: "circle"
|
|
280
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Avatar.Frame, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Avatar.Icon, {
|
|
281
|
+
icon: "ph--robot--regular"
|
|
282
|
+
})));
|
|
283
|
+
var ScriptSettings = ({ settings }) => {
|
|
284
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_2XX4L67K.SCRIPT_PLUGIN);
|
|
285
|
+
const client = (0, import_react_client.useClient)();
|
|
286
|
+
const handleAuthenticate = async () => {
|
|
287
|
+
const { identityKey } = client.halo.identity.get();
|
|
288
|
+
await client.halo.writeCredentials([
|
|
289
|
+
{
|
|
290
|
+
issuer: identityKey,
|
|
291
|
+
issuanceDate: /* @__PURE__ */ new Date(),
|
|
292
|
+
subject: {
|
|
293
|
+
id: identityKey,
|
|
294
|
+
assertion: {
|
|
295
|
+
"@type": "dxos.halo.credentials.ServiceAccess",
|
|
296
|
+
serverName: "hub.dxos.network",
|
|
297
|
+
serverKey: identityKey,
|
|
298
|
+
identityKey,
|
|
299
|
+
capabilities: [
|
|
300
|
+
"composer:beta"
|
|
301
|
+
]
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
]);
|
|
306
|
+
};
|
|
307
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.DeprecatedFormContainer, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.DeprecatedFormInput, {
|
|
308
|
+
label: t("authenticate action label")
|
|
309
|
+
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Button, {
|
|
310
|
+
onClick: handleAuthenticate
|
|
311
|
+
}, t("authenticate button label"))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.DeprecatedFormInput, {
|
|
312
|
+
label: t("editor input mode label")
|
|
313
|
+
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Select.Root, {
|
|
314
|
+
value: settings.editorInputMode ?? "default",
|
|
315
|
+
onValueChange: (value) => {
|
|
316
|
+
settings.editorInputMode = value;
|
|
317
|
+
}
|
|
318
|
+
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Select.TriggerButton, {
|
|
319
|
+
placeholder: t("select editor input mode placeholder")
|
|
320
|
+
}), /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Select.Portal, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Select.Content, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Select.Viewport, null, import_react_ui_editor.EditorInputModes.map((mode) => /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Select.Option, {
|
|
321
|
+
key: mode,
|
|
322
|
+
value: mode
|
|
323
|
+
}, t(`settings editor input mode ${mode} label`)))))))));
|
|
324
|
+
};
|
|
325
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptSettingsPanel.tsx";
|
|
326
|
+
var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
|
|
327
|
+
var ScriptSettingsPanel = ({ script }) => {
|
|
328
|
+
const { t } = (0, import_react_ui3.useTranslation)(import_chunk_2XX4L67K.SCRIPT_PLUGIN);
|
|
329
|
+
const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
|
|
330
|
+
const client = (0, import_react_client2.useClient)();
|
|
331
|
+
const space = (0, import_echo.getSpace)(script);
|
|
332
|
+
const [fn] = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_types.FunctionType, {
|
|
333
|
+
source: script
|
|
334
|
+
}));
|
|
335
|
+
const [githubToken] = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_schema.AccessTokenType, {
|
|
336
|
+
source: "github.com"
|
|
337
|
+
}));
|
|
338
|
+
const gistKey = (0, import_echo.getMeta)(script).keys.find(({ source }) => source === "github.com");
|
|
339
|
+
const [gistUrl, setGistUrl] = (0, import_react3.useState)();
|
|
340
|
+
(0, import_react3.useEffect)(() => {
|
|
341
|
+
const token = githubToken?.token;
|
|
342
|
+
const gistId = gistKey?.id;
|
|
343
|
+
if (!token || !gistId) {
|
|
344
|
+
setGistUrl(void 0);
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
const timeout = setTimeout(async () => {
|
|
348
|
+
try {
|
|
349
|
+
const octokit = new import_core.Octokit({
|
|
350
|
+
auth: githubToken.token
|
|
351
|
+
});
|
|
352
|
+
const response = await octokit.request("GET /gists/{gist_id}", {
|
|
353
|
+
gist_id: gistId
|
|
354
|
+
});
|
|
355
|
+
setGistUrl(response.data.html_url);
|
|
356
|
+
} catch (err) {
|
|
357
|
+
import_log2.log.catch(err, void 0, {
|
|
358
|
+
F: __dxlog_file2,
|
|
359
|
+
L: 52,
|
|
360
|
+
S: void 0,
|
|
361
|
+
C: (f, a) => f(...a)
|
|
362
|
+
});
|
|
363
|
+
setGistUrl(void 0);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
return () => clearTimeout(timeout);
|
|
367
|
+
}, [
|
|
368
|
+
githubToken,
|
|
369
|
+
gistKey
|
|
370
|
+
]);
|
|
371
|
+
const [binding, setBinding] = (0, import_react_ui3.useControlledState)(fn?.binding ?? "");
|
|
372
|
+
const handleBindingChange = (0, import_react3.useCallback)((event) => {
|
|
373
|
+
setBinding(event.target.value);
|
|
374
|
+
}, [
|
|
375
|
+
setBinding
|
|
376
|
+
]);
|
|
377
|
+
const handleBindingBlur = (0, import_react3.useCallback)(() => {
|
|
378
|
+
fn.binding = binding;
|
|
379
|
+
}, [
|
|
380
|
+
fn,
|
|
381
|
+
binding
|
|
382
|
+
]);
|
|
383
|
+
const functionPath = fn && (0, import_types.getUserFunctionUrlInMetadata)((0, import_echo.getMeta)(fn));
|
|
384
|
+
const functionUrl = functionPath && (0, import_types.getInvocationUrl)(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
|
|
385
|
+
spaceId: space?.id
|
|
386
|
+
});
|
|
387
|
+
const handleOpenTokenManager = (0, import_react3.useCallback)(() => dispatch((0, import_app_framework.createIntent)(import_app_framework.SettingsAction.Open, {
|
|
388
|
+
plugin: "dxos.org/plugin/token-manager"
|
|
389
|
+
})), []);
|
|
390
|
+
const [publishing, setPublishing] = (0, import_react3.useState)(false);
|
|
391
|
+
const handlePublish = (0, import_react3.useCallback)(async () => {
|
|
392
|
+
setPublishing(true);
|
|
393
|
+
const octokit = new import_core.Octokit({
|
|
394
|
+
auth: githubToken.token
|
|
395
|
+
});
|
|
396
|
+
const source = await script.source.load();
|
|
397
|
+
const filename = script.name ? kebabize(script.name) : "composer-script";
|
|
398
|
+
const files = {
|
|
399
|
+
[`${filename}.ts`]: {
|
|
400
|
+
content: source.content
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
try {
|
|
404
|
+
const meta = (0, import_echo.getMeta)(script);
|
|
405
|
+
const githubKey = meta.keys.find(({ source: source2 }) => source2 === "github.com");
|
|
406
|
+
const gistId = githubKey?.id;
|
|
407
|
+
if (gistId) {
|
|
408
|
+
await octokit.request("PATCH /gists/{gist_id}", {
|
|
409
|
+
gist_id: gistId,
|
|
410
|
+
files
|
|
411
|
+
});
|
|
412
|
+
} else {
|
|
413
|
+
const response = await octokit.request("POST /gists", {
|
|
414
|
+
public: true,
|
|
415
|
+
files
|
|
416
|
+
});
|
|
417
|
+
if (response.data.id) {
|
|
418
|
+
meta.keys.push({
|
|
419
|
+
source: "github.com",
|
|
420
|
+
id: response.data.id
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
} finally {
|
|
425
|
+
setPublishing(false);
|
|
426
|
+
}
|
|
427
|
+
}, [
|
|
428
|
+
script,
|
|
429
|
+
githubToken
|
|
430
|
+
]);
|
|
431
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
432
|
+
role: "form",
|
|
433
|
+
className: "flex flex-col w-full p-2 gap-4"
|
|
434
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Root, null, /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
435
|
+
role: "none",
|
|
436
|
+
className: "flex flex-col gap-1"
|
|
437
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Label, null, t("description label")), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.TextInput, {
|
|
438
|
+
placeholder: t("description placeholder"),
|
|
439
|
+
value: script.description ?? "",
|
|
440
|
+
onChange: (event) => {
|
|
441
|
+
script.description = event.target.value;
|
|
442
|
+
}
|
|
443
|
+
})))), fn && functionUrl && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Separator, null), /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
444
|
+
role: "form",
|
|
445
|
+
className: "flex flex-col w-full p-2 gap-4"
|
|
446
|
+
}, /* @__PURE__ */ import_react3.default.createElement("h2", null, t("remote function settings heading")), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Root, null, /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
447
|
+
role: "none",
|
|
448
|
+
className: "flex flex-col gap-1"
|
|
449
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Label, null, t("function url label")), /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
450
|
+
role: "none",
|
|
451
|
+
className: "flex gap-1"
|
|
452
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.TextInput, {
|
|
453
|
+
disabled: true,
|
|
454
|
+
value: functionUrl,
|
|
455
|
+
onChange: (event) => {
|
|
456
|
+
fn.name = event.target.value;
|
|
457
|
+
}
|
|
458
|
+
}), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Clipboard.IconButton, {
|
|
459
|
+
value: functionUrl
|
|
460
|
+
})))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Root, null, /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
461
|
+
role: "none",
|
|
462
|
+
className: "flex flex-col gap-1"
|
|
463
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Label, null, t("function binding label")), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.TextInput, {
|
|
464
|
+
placeholder: t("function binding placeholder"),
|
|
465
|
+
value: binding,
|
|
466
|
+
onChange: handleBindingChange,
|
|
467
|
+
onBlur: handleBindingBlur
|
|
468
|
+
}))))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Separator, null), /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
469
|
+
className: "flex flex-col w-full p-2 gap-4"
|
|
470
|
+
}, /* @__PURE__ */ import_react3.default.createElement("div", null, /* @__PURE__ */ import_react3.default.createElement("h2", null, t("script publish settings label")), /* @__PURE__ */ import_react3.default.createElement("p", {
|
|
471
|
+
className: "text-description text-sm"
|
|
472
|
+
}, t("script publish settings description"))), !githubToken && /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
473
|
+
className: "flex flex-col items-center justify-center gap-2"
|
|
474
|
+
}, /* @__PURE__ */ import_react3.default.createElement("span", null, t("no github token label")), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Button, {
|
|
475
|
+
onClick: handleOpenTokenManager
|
|
476
|
+
}, t("open token manager label"))), githubToken && /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
477
|
+
className: "flex justify-end gap-2"
|
|
478
|
+
}, gistUrl && /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Clipboard.IconButton, {
|
|
479
|
+
value: gistUrl
|
|
480
|
+
}), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Button, {
|
|
481
|
+
disabled: publishing,
|
|
482
|
+
onClick: handlePublish
|
|
483
|
+
}, t(publishing ? "publishing label" : "publish label")))));
|
|
484
|
+
};
|
|
485
|
+
var ScriptContainer = (0, import_react4.lazy)(() => import("./ScriptContainer-VHHYWC3A.cjs"));
|
|
486
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
487
|
+
0 && (module.exports = {
|
|
488
|
+
DebugPanel,
|
|
489
|
+
ScriptContainer,
|
|
490
|
+
ScriptSettings,
|
|
491
|
+
ScriptSettingsPanel
|
|
492
|
+
});
|
|
493
|
+
//# sourceMappingURL=chunk-W4U3OWKO.cjs.map
|