@dxos/plugin-script 0.6.14-main.f49f251 → 0.6.14-staging.54a8bab
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/{AutomationPanel-MDPZ5WAC.mjs → AutomationPanel-XLL2ZXGS.mjs} +4 -4
- package/dist/lib/browser/{ScriptContainer-B3CPWXRE.mjs → ScriptContainer-YXH4MFEO.mjs} +8 -16
- package/dist/lib/browser/{ScriptContainer-B3CPWXRE.mjs.map → ScriptContainer-YXH4MFEO.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-SGQHRB4P.mjs → chunk-C7VBULMK.mjs} +4 -3
- package/dist/lib/browser/{chunk-SGQHRB4P.mjs.map → chunk-C7VBULMK.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-G66MXS4T.mjs → chunk-NCZUJKJE.mjs} +6 -18
- package/dist/lib/browser/chunk-NCZUJKJE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-KXVQPS4Y.mjs → chunk-USXWNH3S.mjs} +2 -2
- package/dist/lib/browser/index.mjs +105 -12
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +1 -1
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node/{AutomationPanel-SANUE5X4.cjs → AutomationPanel-OSPAFWZU.cjs} +12 -12
- package/dist/lib/node/{ScriptContainer-BV7HMUY5.cjs → ScriptContainer-FWHFEIHK.cjs} +16 -24
- package/dist/lib/node/{ScriptContainer-BV7HMUY5.cjs.map → ScriptContainer-FWHFEIHK.cjs.map} +3 -3
- package/dist/lib/node/{chunk-EJC55SDD.cjs → chunk-6LYX73ZT.cjs} +7 -6
- package/dist/lib/node/chunk-6LYX73ZT.cjs.map +7 -0
- package/dist/lib/node/{chunk-JWKMTYYH.cjs → chunk-BJ4WIWCP.cjs} +9 -21
- package/dist/lib/node/chunk-BJ4WIWCP.cjs.map +7 -0
- package/dist/lib/node/{chunk-25PQE7FL.cjs → chunk-CPNHUAFN.cjs} +6 -6
- package/dist/lib/node/index.cjs +117 -28
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.cjs +3 -3
- package/dist/lib/node/meta.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types/index.cjs +5 -5
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/{AutomationPanel-H2IKE53E.mjs → AutomationPanel-KJNL6ARP.mjs} +4 -4
- package/dist/lib/node-esm/{ScriptContainer-HSIOGVP3.mjs → ScriptContainer-6U5WJFRB.mjs} +8 -16
- package/dist/lib/node-esm/{ScriptContainer-HSIOGVP3.mjs.map → ScriptContainer-6U5WJFRB.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-7EDYDVQH.mjs → chunk-2NPZGQGA.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-3QHVR4VV.mjs → chunk-DXWSRDEN.mjs} +6 -18
- package/dist/lib/node-esm/chunk-DXWSRDEN.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-GO7HYFM5.mjs → chunk-SLTZMY34.mjs} +4 -3
- package/dist/lib/node-esm/{chunk-GO7HYFM5.mjs.map → chunk-SLTZMY34.mjs.map} +3 -3
- package/dist/lib/node-esm/index.mjs +105 -12
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/meta.mjs +1 -1
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
- package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +1 -4
- package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
- package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/ScriptSettingsPanel.d.ts +7 -0
- package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +5 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/package.json +36 -36
- package/src/ScriptPlugin.tsx +10 -2
- package/src/components/DebugPanel/DebugPanel.tsx +2 -29
- package/src/components/ScriptEditor.tsx +1 -15
- package/src/components/ScriptSettings/ScriptSettings.tsx +3 -3
- package/src/components/ScriptSettingsPanel.tsx +105 -0
- package/src/components/index.ts +1 -0
- package/src/meta.ts +2 -1
- package/src/translations.ts +5 -0
- package/dist/lib/browser/chunk-G66MXS4T.mjs.map +0 -7
- package/dist/lib/node/chunk-EJC55SDD.cjs.map +0 -7
- package/dist/lib/node/chunk-JWKMTYYH.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-3QHVR4VV.mjs.map +0 -7
- /package/dist/lib/browser/{AutomationPanel-MDPZ5WAC.mjs.map → AutomationPanel-XLL2ZXGS.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-KXVQPS4Y.mjs.map → chunk-USXWNH3S.mjs.map} +0 -0
- /package/dist/lib/node/{AutomationPanel-SANUE5X4.cjs.map → AutomationPanel-OSPAFWZU.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-25PQE7FL.cjs.map → chunk-CPNHUAFN.cjs.map} +0 -0
- /package/dist/lib/node-esm/{AutomationPanel-H2IKE53E.mjs.map → AutomationPanel-KJNL6ARP.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-7EDYDVQH.mjs.map → chunk-2NPZGQGA.mjs.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/ScriptContainer.tsx", "../../../src/components/ScriptEditor.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/TypescriptEditor/TypescriptEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ScriptEditor, type ScriptEditorProps } from './ScriptEditor';\n\nconst ScriptContainer = ({ script, ...props }: ScriptEditorProps) => {\n const attendableAttrs = useAttendableAttributes(fullyQualifiedId(script));\n return (\n <div role='none' className={mx('flex row-span-2 w-full overflow-hidden attention-surface')} {...attendableAttrs}>\n <ScriptEditor {...props} script={script} />\n </div>\n );\n};\n\nexport default ScriptContainer;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DebugPanel } from './DebugPanel';\nimport { type TemplateSelectProps, Toolbar, type ViewType } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n USERFUNCTIONS_PRESET_META_KEY,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { templates } from '../templates';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = ThemedClassName<{\n script: ScriptType;\n}> &\n Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ classNames, script, env }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n // TODO(dmaretskyi): Parametric query.\n const [fn] = useQuery(\n space,\n Filter.schema(FunctionType, (fn) => fn.source === script),\n );\n\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source && script.source?.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source && createDocAccessor(script.source, ['content']),\n space,\n identity,\n }),\n ],\n [script, script.source, space, identity],\n );\n\n const [view, setView] = useState<ViewType>('editor');\n const initialValue = useMemo(() => script.source?.content, [script.source]);\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n const [error, setError] = useState<string>();\n\n const handleBindingChange = useCallback(\n (binding: string) => {\n fn.binding = binding;\n },\n [fn],\n );\n\n const handleFormat = useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.content = await format(script.source.content, {\n parser: 'typescript',\n plugins: [prettierPluginEstree, prettierPluginTypescript],\n semi: true,\n singleQuote: true,\n });\n } catch (err: any) {\n // TODO(wittjosiah): Show error in UI.\n log.catch(err);\n }\n }, [script.source]);\n\n const handleTemplateChange: TemplateSelectProps['onTemplateSelect'] = (id) => {\n const template = templates.find((template) => template.id === id);\n if (template) {\n script.name = template.name;\n script.source!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === USERFUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: USERFUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n };\n\n const handleDeploy = useCallback(async () => {\n if (!script.source || !identity || !space) {\n return;\n }\n\n setError(undefined);\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n const ownerDid = (existingFunctionUrl?.split('/').at(-2) as DID) ?? publicKeyToDid(identity.identityKey);\n\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle(script.source.content);\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { result, functionId, functionVersionNumber, errorMessage } = await uploadWorkerFunction({\n clientConfig: client.config,\n halo: client.halo,\n ownerDid,\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (result !== 'success' || functionId === undefined || functionVersionNumber === undefined) {\n throw new Error(errorMessage);\n }\n\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n script.changed = false;\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n setView('split');\n } catch (err: any) {\n log.catch(err);\n setError(t('upload failed label'));\n }\n }, [fn, existingFunctionUrl, script, script.name, script.source]);\n\n const functionUrl = useMemo(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n return getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n return (\n <div role='none' className={mx('flex flex-col w-full overflow-hidden divide-y divide-separator', classNames)}>\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n view={view}\n templates={templates}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onViewChange={setView}\n onTemplateSelect={handleTemplateChange}\n />\n\n {view !== 'preview' && (\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden ch-focus-ring-inset-over-all'\n />\n )}\n\n {view !== 'editor' && (\n <DebugPanel\n functionUrl={functionUrl}\n showBindingConfig\n binding={fn?.binding}\n onBindingChange={handleBindingChange}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport {\n ElevationProvider,\n Icon,\n Select,\n type ThemedClassName,\n ToggleGroup,\n ToggleGroupItem,\n type ToolbarButtonProps,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type Template } from '../../templates';\n\nexport type ToolbarProps = ThemedClassName<\n {\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n } & TemplateSelectProps &\n ViewSelectorProps\n>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n view,\n templates,\n onDeploy,\n onFormat,\n onViewChange,\n onTemplateSelect,\n}: ToolbarProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const [pending, setPending] = useState(false);\n\n const handleCopyLink = async () => {\n if (!functionUrl) {\n return;\n }\n\n await navigator.clipboard.writeText(functionUrl);\n };\n\n const handleDeploy = async () => {\n if (!pending) {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n }\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {templates && <TemplateSelect templates={templates} onTemplateSelect={onTemplateSelect} />}\n {onFormat && <ToolbarIconButton icon='ph--magic-wand--regular' text={t('format label')} onClick={onFormat} />}\n\n <div role='separator' className='grow' />\n\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Icon icon='ph--warning-circle--regular' size={4} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {error}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : null}\n\n {functionUrl && deployed && (\n <ToolbarIconButton icon='ph--link--regular' text={t('copy link label')} onClick={handleCopyLink} />\n )}\n\n {onDeploy && (\n <ToolbarIconButton\n icon={pending ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular'}\n classNames={[pending && 'animate-spin']}\n text={pending ? t('pending label') : t('deploy label')}\n onClick={handleDeploy}\n />\n )}\n\n <ViewSelector view={view} onViewChange={onViewChange} />\n </NaturalToolbar.Root>\n </ElevationProvider>\n );\n};\n\nconst ToolbarIconButton = ({\n icon,\n text,\n classNames,\n disabled,\n onClick,\n}: { icon: string; text: string } & Pick<ToolbarButtonProps, 'classNames' | 'disabled' | 'onClick'>) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' disabled={disabled} onClick={onClick}>\n <Icon icon={icon} size={4} classNames={classNames} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {text}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport type ViewType = 'editor' | 'split' | 'preview';\n\nexport type TemplateSelectProps = {\n templates?: Template[];\n onTemplateSelect?: (id: string) => void;\n};\n\nexport const TemplateSelect = ({ templates = [], onTemplateSelect }: TemplateSelectProps) => {\n return (\n <Select.Root value={''} onValueChange={onTemplateSelect}>\n <Select.TriggerButton />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value={''}>Template</Select.Option>\n {templates.map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n};\n\nexport type ViewSelectorProps = {\n view?: ViewType;\n onViewChange?: (view: ViewType) => void;\n};\n\nexport const ViewSelector = ({ view, onViewChange }: ViewSelectorProps) => {\n return (\n <ToggleGroup type='single' value={view} onValueChange={(value) => onViewChange?.(value as ViewType)}>\n <ToggleGroupItem value='editor' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--code--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='split' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--square-split-vertical--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='preview' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--eye--regular' size={4} />\n </ToggleGroupItem>\n </ToggleGroup>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n editorGutter,\n editorMonospace,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { nonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n env?: VirtualTypeScriptEnvironment;\n} & Pick<UseTextEditorProps, 'className' | 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n env,\n className,\n initialValue,\n extensions,\n scrollTo,\n selection,\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n createBasicExtensions({\n highlightActiveLine: true,\n indentWithTab: true,\n lineNumbers: true,\n lineWrapping: false,\n scrollPastEnd: true,\n }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n slots: {\n content: { className: editorFullWidth },\n },\n }),\n editorGutter,\n // TODO(burdon): Factor out.\n [\n editorMonospace,\n javascript({ typescript: true }),\n // https://github.com/val-town/codemirror-ts\n autocomplete({ override: env ? [tsAutocomplete()] : [] }),\n env ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],\n InputModeExtensions.vscode,\n ],\n ].filter(nonNullable),\n selection,\n scrollTo,\n }),\n [id, initialValue, extensions, themeMode, selection, scrollTo],\n );\n\n return <div ref={parentRef} className={className} {...focusAttributes} />;\n};\n\nexport default TypescriptEditor;\n"],
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["import_react", "import_echo", "import_react_ui_theme", "import_react_ui", "import_react_ui_editor", "Toolbar", "classNames", "deployed", "error", "functionUrl", "view", "templates", "onDeploy", "onFormat", "onViewChange", "onTemplateSelect", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "React", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "style", "contain", "TemplateSelect", "ToolbarIconButton", "icon", "text", "onClick", "div", "role", "className", "Tooltip", "Trigger", "Icon", "size", "Portal", "Content", "Arrow", "ViewSelector", "disabled", "asChild", "Button", "variant", "Select", "value", "onValueChange", "TriggerButton", "Viewport", "Option", "map", "id", "name", "key", "ToggleGroup", "type", "ToggleGroupItem", "TypescriptEditor", "env", "initialValue", "extensions", "scrollTo", "selection", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "editorFullWidth", "editorGutter", "editorMonospace", "javascript", "typescript", "autocomplete", "override", "tsAutocomplete", "tsFacet", "of", "path", "tsSync", "tsLinter", "tsHover", "InputModeExtensions", "vscode", "filter", "nonNullable", "ref", "ScriptEditor", "script", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "useMemo", "listener", "onChange", "changed", "createDataExtensions", "createDocAccessor", "setView", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "setError", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ScriptEditor, type ScriptEditorProps } from './ScriptEditor';\n\nconst ScriptContainer = ({ script, ...props }: ScriptEditorProps) => {\n const attendableAttrs = useAttendableAttributes(fullyQualifiedId(script));\n return (\n <div role='none' className={mx('flex row-span-2 w-full overflow-hidden attention-surface')} {...attendableAttrs}>\n <ScriptEditor {...props} script={script} />\n </div>\n );\n};\n\nexport default ScriptContainer;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DebugPanel } from './DebugPanel';\nimport { type TemplateSelectProps, Toolbar, type ViewType } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n USERFUNCTIONS_PRESET_META_KEY,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { templates } from '../templates';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = ThemedClassName<{\n script: ScriptType;\n}> &\n Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ classNames, script, env }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n // TODO(dmaretskyi): Parametric query.\n const [fn] = useQuery(\n space,\n Filter.schema(FunctionType, (fn) => fn.source === script),\n );\n\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source && script.source?.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source && createDocAccessor(script.source, ['content']),\n space,\n identity,\n }),\n ],\n [script, script.source, space, identity],\n );\n\n const [view, setView] = useState<ViewType>('editor');\n const initialValue = useMemo(() => script.source?.content, [script.source]);\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n const [error, setError] = useState<string>();\n\n const handleFormat = useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.content = await format(script.source.content, {\n parser: 'typescript',\n plugins: [prettierPluginEstree, prettierPluginTypescript],\n semi: true,\n singleQuote: true,\n });\n } catch (err: any) {\n // TODO(wittjosiah): Show error in UI.\n log.catch(err);\n }\n }, [script.source]);\n\n const handleTemplateChange: TemplateSelectProps['onTemplateSelect'] = (id) => {\n const template = templates.find((template) => template.id === id);\n if (template) {\n script.name = template.name;\n script.source!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === USERFUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: USERFUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n };\n\n const handleDeploy = useCallback(async () => {\n if (!script.source || !identity || !space) {\n return;\n }\n\n setError(undefined);\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n const ownerDid = (existingFunctionUrl?.split('/').at(-2) as DID) ?? publicKeyToDid(identity.identityKey);\n\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle(script.source.content);\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { result, functionId, functionVersionNumber, errorMessage } = await uploadWorkerFunction({\n clientConfig: client.config,\n halo: client.halo,\n ownerDid,\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (result !== 'success' || functionId === undefined || functionVersionNumber === undefined) {\n throw new Error(errorMessage);\n }\n\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n script.changed = false;\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n setView('split');\n } catch (err: any) {\n log.catch(err);\n setError(t('upload failed label'));\n }\n }, [fn, existingFunctionUrl, script, script.name, script.source]);\n\n const functionUrl = useMemo(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n return getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n return (\n <div role='none' className={mx('flex flex-col w-full overflow-hidden divide-y divide-separator', classNames)}>\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n view={view}\n templates={templates}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onViewChange={setView}\n onTemplateSelect={handleTemplateChange}\n />\n\n {view !== 'preview' && (\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden ch-focus-ring-inset-over-all'\n />\n )}\n\n {view !== 'editor' && <DebugPanel functionUrl={functionUrl} />}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport {\n ElevationProvider,\n Icon,\n Select,\n type ThemedClassName,\n ToggleGroup,\n ToggleGroupItem,\n type ToolbarButtonProps,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type Template } from '../../templates';\n\nexport type ToolbarProps = ThemedClassName<\n {\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n } & TemplateSelectProps &\n ViewSelectorProps\n>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n view,\n templates,\n onDeploy,\n onFormat,\n onViewChange,\n onTemplateSelect,\n}: ToolbarProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const [pending, setPending] = useState(false);\n\n const handleCopyLink = async () => {\n if (!functionUrl) {\n return;\n }\n\n await navigator.clipboard.writeText(functionUrl);\n };\n\n const handleDeploy = async () => {\n if (!pending) {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n }\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {templates && <TemplateSelect templates={templates} onTemplateSelect={onTemplateSelect} />}\n {onFormat && <ToolbarIconButton icon='ph--magic-wand--regular' text={t('format label')} onClick={onFormat} />}\n\n <div role='separator' className='grow' />\n\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Icon icon='ph--warning-circle--regular' size={4} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {error}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : null}\n\n {functionUrl && deployed && (\n <ToolbarIconButton icon='ph--link--regular' text={t('copy link label')} onClick={handleCopyLink} />\n )}\n\n {onDeploy && (\n <ToolbarIconButton\n icon={pending ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular'}\n classNames={[pending && 'animate-spin']}\n text={pending ? t('pending label') : t('deploy label')}\n onClick={handleDeploy}\n />\n )}\n\n <ViewSelector view={view} onViewChange={onViewChange} />\n </NaturalToolbar.Root>\n </ElevationProvider>\n );\n};\n\nconst ToolbarIconButton = ({\n icon,\n text,\n classNames,\n disabled,\n onClick,\n}: { icon: string; text: string } & Pick<ToolbarButtonProps, 'classNames' | 'disabled' | 'onClick'>) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' disabled={disabled} onClick={onClick}>\n <Icon icon={icon} size={4} classNames={classNames} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {text}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport type ViewType = 'editor' | 'split' | 'preview';\n\nexport type TemplateSelectProps = {\n templates?: Template[];\n onTemplateSelect?: (id: string) => void;\n};\n\nexport const TemplateSelect = ({ templates = [], onTemplateSelect }: TemplateSelectProps) => {\n return (\n <Select.Root value={''} onValueChange={onTemplateSelect}>\n <Select.TriggerButton />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value={''}>Template</Select.Option>\n {templates.map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n};\n\nexport type ViewSelectorProps = {\n view?: ViewType;\n onViewChange?: (view: ViewType) => void;\n};\n\nexport const ViewSelector = ({ view, onViewChange }: ViewSelectorProps) => {\n return (\n <ToggleGroup type='single' value={view} onValueChange={(value) => onViewChange?.(value as ViewType)}>\n <ToggleGroupItem value='editor' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--code--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='split' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--square-split-vertical--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='preview' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--eye--regular' size={4} />\n </ToggleGroupItem>\n </ToggleGroup>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n editorGutter,\n editorMonospace,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { nonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n env?: VirtualTypeScriptEnvironment;\n} & Pick<UseTextEditorProps, 'className' | 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n env,\n className,\n initialValue,\n extensions,\n scrollTo,\n selection,\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n createBasicExtensions({\n highlightActiveLine: true,\n indentWithTab: true,\n lineNumbers: true,\n lineWrapping: false,\n scrollPastEnd: true,\n }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n slots: {\n content: { className: editorFullWidth },\n },\n }),\n editorGutter,\n // TODO(burdon): Factor out.\n [\n editorMonospace,\n javascript({ typescript: true }),\n // https://github.com/val-town/codemirror-ts\n autocomplete({ override: env ? [tsAutocomplete()] : [] }),\n env ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],\n InputModeExtensions.vscode,\n ],\n ].filter(nonNullable),\n selection,\n scrollTo,\n }),\n [id, initialValue, extensions, themeMode, selection, scrollTo],\n );\n\n return <div ref={parentRef} className={className} {...focusAttributes} />;\n};\n\nexport default TypescriptEditor;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_echo", "import_react_ui_theme", "import_react_ui", "import_react_ui_editor", "Toolbar", "classNames", "deployed", "error", "functionUrl", "view", "templates", "onDeploy", "onFormat", "onViewChange", "onTemplateSelect", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "React", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "style", "contain", "TemplateSelect", "ToolbarIconButton", "icon", "text", "onClick", "div", "role", "className", "Tooltip", "Trigger", "Icon", "size", "Portal", "Content", "Arrow", "ViewSelector", "disabled", "asChild", "Button", "variant", "Select", "value", "onValueChange", "TriggerButton", "Viewport", "Option", "map", "id", "name", "key", "ToggleGroup", "type", "ToggleGroupItem", "TypescriptEditor", "env", "initialValue", "extensions", "scrollTo", "selection", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "editorFullWidth", "editorGutter", "editorMonospace", "javascript", "typescript", "autocomplete", "override", "tsAutocomplete", "tsFacet", "of", "path", "tsSync", "tsLinter", "tsHover", "InputModeExtensions", "vscode", "filter", "nonNullable", "ref", "ScriptEditor", "script", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "useMemo", "listener", "onChange", "changed", "createDataExtensions", "createDocAccessor", "setView", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "setError", "handleFormat", "useCallback", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "handleTemplateChange", "template", "find", "metaKeys", "keys", "oldPresetIndex", "findIndex", "USERFUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "undefined", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "result", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "getInvocationUrl", "values", "runtime", "services", "edge", "url", "spaceId", "mx", "Boolean", "DebugPanel", "ScriptContainer", "props", "attendableAttrs", "useAttendableAttributes", "fullyQualifiedId"]
|
|
7
7
|
}
|
|
@@ -16,25 +16,26 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var chunk_6LYX73ZT_exports = {};
|
|
20
|
+
__export(chunk_6LYX73ZT_exports, {
|
|
21
21
|
SCRIPT_PLUGIN: () => SCRIPT_PLUGIN,
|
|
22
22
|
meta_default: () => meta_default
|
|
23
23
|
});
|
|
24
|
-
module.exports = __toCommonJS(
|
|
24
|
+
module.exports = __toCommonJS(chunk_6LYX73ZT_exports);
|
|
25
25
|
var SCRIPT_PLUGIN = "dxos.org/plugin/script";
|
|
26
26
|
var meta_default = {
|
|
27
27
|
id: SCRIPT_PLUGIN,
|
|
28
28
|
name: "Scripts",
|
|
29
29
|
description: "Distributed functions.",
|
|
30
|
+
icon: "ph--code--regular",
|
|
31
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
|
|
30
32
|
tags: [
|
|
31
33
|
"experimental"
|
|
32
|
-
]
|
|
33
|
-
icon: "ph--code--regular"
|
|
34
|
+
]
|
|
34
35
|
};
|
|
35
36
|
// Annotate the CommonJS export names for ESM import in node:
|
|
36
37
|
0 && (module.exports = {
|
|
37
38
|
SCRIPT_PLUGIN,
|
|
38
39
|
meta_default
|
|
39
40
|
});
|
|
40
|
-
//# sourceMappingURL=chunk-
|
|
41
|
+
//# sourceMappingURL=chunk-6LYX73ZT.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport default {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description: 'Distributed functions.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer',\n tags: ['experimental'],\n} satisfies PluginMeta;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,gBAAgB;AAE7B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;AACT;",
|
|
6
|
+
"names": ["SCRIPT_PLUGIN", "id", "name", "description", "icon", "source", "tags"]
|
|
7
|
+
}
|
|
@@ -26,25 +26,20 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var chunk_BJ4WIWCP_exports = {};
|
|
30
|
+
__export(chunk_BJ4WIWCP_exports, {
|
|
31
31
|
DebugPanel: () => DebugPanel
|
|
32
32
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
34
|
-
var
|
|
33
|
+
module.exports = __toCommonJS(chunk_BJ4WIWCP_exports);
|
|
34
|
+
var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
|
|
35
35
|
var import_react = __toESM(require("react"));
|
|
36
36
|
var import_log = require("@dxos/log");
|
|
37
37
|
var import_react_ui = require("@dxos/react-ui");
|
|
38
38
|
var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
|
|
39
39
|
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
40
40
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx";
|
|
41
|
-
var DebugPanel = ({ classNames, functionUrl
|
|
42
|
-
const { t } = (0, import_react_ui.useTranslation)(
|
|
43
|
-
const bindingInputRef = (0, import_react.useRef)(null);
|
|
44
|
-
const [binding, setBinding] = (0, import_react_ui.useControlledValue)(_binding ?? "");
|
|
45
|
-
const handleBlur = () => {
|
|
46
|
-
onBindingChange?.(binding);
|
|
47
|
-
};
|
|
41
|
+
var DebugPanel = ({ classNames, functionUrl }) => {
|
|
42
|
+
const { t } = (0, import_react_ui.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
|
|
48
43
|
const inputRef = (0, import_react.useRef)(null);
|
|
49
44
|
const [input, setInput] = (0, import_react.useState)("");
|
|
50
45
|
const [result, setResult] = (0, import_react.useState)("");
|
|
@@ -159,7 +154,7 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
|
|
|
159
154
|
if (err.name !== "AbortError") {
|
|
160
155
|
import_log.log.catch(err, void 0, {
|
|
161
156
|
F: __dxlog_file,
|
|
162
|
-
L:
|
|
157
|
+
L: 146,
|
|
163
158
|
S: void 0,
|
|
164
159
|
C: (f, a) => f(...a)
|
|
165
160
|
});
|
|
@@ -173,7 +168,7 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
|
|
|
173
168
|
});
|
|
174
169
|
import_log.log.catch(err, void 0, {
|
|
175
170
|
F: __dxlog_file,
|
|
176
|
-
L:
|
|
171
|
+
L: 153,
|
|
177
172
|
S: void 0,
|
|
178
173
|
C: (f, a) => f(...a)
|
|
179
174
|
});
|
|
@@ -200,13 +195,6 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
|
|
|
200
195
|
value: input,
|
|
201
196
|
onChange: (ev) => setInput(ev.target.value),
|
|
202
197
|
onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
|
|
203
|
-
})), showBindingConfig && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
|
|
204
|
-
ref: bindingInputRef,
|
|
205
|
-
classNames: "!w-[10rem]",
|
|
206
|
-
placeholder: t("binding placeholder"),
|
|
207
|
-
value: binding,
|
|
208
|
-
onChange: (ev) => setBinding(ev.target.value.toUpperCase()),
|
|
209
|
-
onBlur: handleBlur
|
|
210
198
|
})), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
|
|
211
199
|
onClick: () => handleRequest(input)
|
|
212
200
|
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
|
|
@@ -274,4 +262,4 @@ var RobotAvatar = () => /* @__PURE__ */ import_react.default.createElement(impor
|
|
|
274
262
|
0 && (module.exports = {
|
|
275
263
|
DebugPanel
|
|
276
264
|
});
|
|
277
|
-
//# sourceMappingURL=chunk-
|
|
265
|
+
//# sourceMappingURL=chunk-BJ4WIWCP.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/DebugPanel/DebugPanel.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { Avatar, Icon, Input, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\ntype State = 'pending' | 'responding';\n\n/**\n * Request or response.\n */\ntype Message = { type: 'request' | 'response'; text?: string; data?: any; error?: Error };\n\nexport type DebugPanelProps = ThemedClassName<{\n functionUrl?: string;\n}>;\n\nexport const DebugPanel = ({ classNames, functionUrl }: DebugPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [input, setInput] = useState('');\n const [result, setResult] = useState('');\n const [state, setState] = useState<State | null>(null);\n\n // TODO(burdon): Persistent history -- at least for session (non-space ECHO data?)\n const [history, setHistory] = useState<Message[]>([]);\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n const handleScroll = () => {\n if (scrollerRef.current) {\n scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;\n }\n };\n\n const controller = useRef<AbortController>();\n useEffect(() => {\n return () => {\n handleStop();\n };\n }, []);\n\n const handleStop = () => {\n controller.current?.abort('stop');\n controller.current = undefined;\n };\n\n const handleClear = () => {\n handleStop();\n setInput('');\n setResult('');\n setHistory([]);\n inputRef.current?.focus();\n };\n\n const handleResponse = ({ text, data, error }: { text?: string; data?: any; error?: Error } = {}) => {\n controller.current = undefined;\n setHistory((history) => [...history, { type: 'response', text, data, error } satisfies Message]);\n setResult('');\n setState(null);\n handleScroll();\n };\n\n const handleRequest = async (input: string) => {\n // Returns a promise that resolves when a value has been received.\n try {\n setState('pending');\n\n let data = null;\n // Detect JSON input.\n if (input.charAt(0) === '{') {\n try {\n const validJsonString = input.replace(/'/g, '\"').replace(/([{,]\\s*)([a-zA-Z0-9_]+)(\\s*:)/g, '$1\"$2\"$3');\n data = JSON.parse(validJsonString);\n input = JSON.stringify(data, null, 2);\n } catch (err) {\n inputRef.current?.focus();\n return;\n }\n }\n\n setInput('');\n setResult('');\n setHistory((history) => [...history, { type: 'request', text: input }]);\n setTimeout(() => {\n handleScroll();\n });\n\n // Throws DOMException when aborted.\n controller.current = new AbortController();\n const response = await fetch(functionUrl!, {\n signal: controller.current.signal,\n method: 'POST',\n body: input,\n headers: {\n 'Content-Type': data ? 'application/json' : 'text/plain',\n },\n });\n\n // Check for error.\n if (!response.ok) {\n const text = await response.text();\n handleResponse({ error: new Error(text || response.statusText || String(response.status)) });\n return;\n }\n\n // Check for JSON.\n const contentType = response.headers.get('content-type');\n if (contentType === 'application/json') {\n const data = await response.json();\n handleResponse({ data });\n return;\n }\n\n // Text (including streaming).\n setState('responding');\n let text = '';\n const reader = response.body!.getReader();\n const pump = async ({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> => {\n text = text + new TextDecoder().decode(value);\n if (!controller.current || done) {\n handleResponse({ text });\n return;\n }\n\n setResult(text);\n setTimeout(() => {\n handleScroll();\n });\n\n return reader.read().then(pump);\n };\n\n void reader\n .read()\n .then(pump)\n .catch((err) => {\n if (err.name !== 'AbortError') {\n log.catch(err);\n }\n });\n } catch (err: any) {\n if (err !== 'stop') {\n const error = err instanceof Error ? err : new Error(err);\n handleResponse({ error });\n log.catch(err);\n } else {\n handleResponse();\n }\n }\n };\n\n return (\n <div className={mx('flex flex-col h-full overflow-hidden', classNames)}>\n {/* TODO(burdon): Replace with Thread? */}\n <div ref={scrollerRef} className='flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto'>\n <MessageThread state={state} result={result} history={history} />\n </div>\n\n <Toolbar.Root classNames='p-2'>\n <Input.Root>\n <Input.TextInput\n ref={inputRef}\n autoFocus\n placeholder={t('function request placeholder')}\n value={input}\n onChange={(ev) => setInput(ev.target.value)}\n onKeyDown={(ev) => ev.key === 'Enter' && handleRequest(input)}\n />\n </Input.Root>\n <Toolbar.Button onClick={() => handleRequest(input)}>\n <Icon icon='ph--play--regular' size={4} />\n </Toolbar.Button>\n <Toolbar.Button onClick={() => (state ? handleStop() : handleClear())}>\n <Icon icon={state ? 'ph--stop--regular' : 'ph--trash--regular'} size={4} />\n </Toolbar.Button>\n </Toolbar.Root>\n </div>\n );\n};\n\n// TODO(burdon): Replace with thread?\n// TODO(burdon): Button to delete individual messages.\n// TODO(burdon): Button to edit/re-run question.\nconst MessageThread = ({ state, result, history }: { state: State | null; result: string; history: Message[] }) => {\n return (\n <>\n {history.map((message, i) => (\n <div key={i} className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>{message.type === 'response' && <RobotAvatar />}</div>\n <div className='overflow-auto'>\n <MessageItem message={message} />\n </div>\n </div>\n ))}\n {result?.length > 0 && (\n <div className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin' />) || (\n <Icon icon='ph--robot--regular' size={6} classNames='animate-[pulse_1s_ease-in-out_infinite]' />\n )}\n </div>\n <div className='overflow-auto'>\n <MessageItem message={{ type: 'response', text: result }} />\n </div>\n </div>\n )}\n </>\n );\n};\n\nconst MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message }>) => {\n const { type, text, data, error } = message;\n const wrapper = 'p-1 px-2 rounded-lg bg-hoverSurface overflow-auto';\n return (\n <div className={mx('flex', type === 'request' ? 'ml-[1rem] justify-end' : 'mr-[1rem]', classNames)}>\n {error && <div className={mx(wrapper, 'whitespace-pre text-error')}>{String(error)}</div>}\n\n {text !== undefined && (\n <div className={mx(wrapper, type === 'request' && 'bg-primary-400 dark:bg-primary-600')}>\n {text || '\\u00D8'}\n </div>\n )}\n\n {data && (\n <SyntaxHighlighter language='json' className={mx(wrapper, 'px-8 py-2 text-xs')}>\n {JSON.stringify(data, null, 2)}\n </SyntaxHighlighter>\n )}\n </div>\n );\n};\n\nconst RobotAvatar = () => (\n <Avatar.Root size={6} variant='circle'>\n <Avatar.Frame>\n <Avatar.Icon icon='ph--robot--regular' />\n </Avatar.Frame>\n </Avatar.Root>\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["DebugPanel", "classNames", "functionUrl", "t", "useTranslation", "SCRIPT_PLUGIN", "inputRef", "useRef", "input", "setInput", "useState", "result", "setResult", "state", "setState", "history", "setHistory", "scrollerRef", "handleScroll", "current", "scrollTop", "scrollHeight", "controller", "useEffect", "handleStop", "abort", "undefined", "handleClear", "focus", "handleResponse", "text", "data", "error", "type", "handleRequest", "charAt", "validJsonString", "replace", "JSON", "parse", "stringify", "err", "setTimeout", "AbortController", "response", "fetch", "signal", "method", "body", "headers", "ok", "Error", "statusText", "String", "status", "contentType", "get", "json", "reader", "getReader", "pump", "done", "value", "TextDecoder", "decode", "read", "then", "catch", "name", "log", "React", "div", "className", "mx", "ref", "MessageThread", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "Button", "onClick", "Icon", "icon", "size", "map", "message", "i", "RobotAvatar", "MessageItem", "length", "wrapper", "SyntaxHighlighter", "language", "Avatar", "variant", "Frame"]
|
|
7
|
+
}
|
|
@@ -16,14 +16,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var chunk_CPNHUAFN_exports = {};
|
|
20
|
+
__export(chunk_CPNHUAFN_exports, {
|
|
21
21
|
FunctionType: () => FunctionType,
|
|
22
22
|
ScriptAction: () => ScriptAction,
|
|
23
23
|
ScriptType: () => ScriptType
|
|
24
24
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
26
|
-
var
|
|
25
|
+
module.exports = __toCommonJS(chunk_CPNHUAFN_exports);
|
|
26
|
+
var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
|
|
27
27
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
28
28
|
var import_types = require("@dxos/plugin-markdown/types");
|
|
29
29
|
var ScriptType = class extends (0, import_echo_schema.TypedObject)({
|
|
@@ -54,7 +54,7 @@ var FunctionType = class extends (0, import_echo_schema.TypedObject)({
|
|
|
54
54
|
};
|
|
55
55
|
var ScriptAction;
|
|
56
56
|
(function(ScriptAction2) {
|
|
57
|
-
ScriptAction2[ScriptAction2["CREATE"] = `${
|
|
57
|
+
ScriptAction2[ScriptAction2["CREATE"] = `${import_chunk_6LYX73ZT.SCRIPT_PLUGIN}/create`] = "CREATE";
|
|
58
58
|
})(ScriptAction || (ScriptAction = {}));
|
|
59
59
|
// Annotate the CommonJS export names for ESM import in node:
|
|
60
60
|
0 && (module.exports = {
|
|
@@ -62,4 +62,4 @@ var ScriptAction;
|
|
|
62
62
|
ScriptAction,
|
|
63
63
|
ScriptType
|
|
64
64
|
});
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
//# sourceMappingURL=chunk-CPNHUAFN.cjs.map
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -31,19 +31,21 @@ __export(node_exports, {
|
|
|
31
31
|
AutomationPanel: () => AutomationPanel,
|
|
32
32
|
Bundler: () => import_chunk_ACLCRWDB.Bundler,
|
|
33
33
|
Compiler: () => Compiler,
|
|
34
|
-
FunctionType: () =>
|
|
35
|
-
ScriptAction: () =>
|
|
34
|
+
FunctionType: () => import_chunk_CPNHUAFN.FunctionType,
|
|
35
|
+
ScriptAction: () => import_chunk_CPNHUAFN.ScriptAction,
|
|
36
36
|
ScriptContainer: () => ScriptContainer,
|
|
37
37
|
ScriptPlugin: () => ScriptPlugin,
|
|
38
38
|
ScriptSettings: () => ScriptSettings,
|
|
39
|
-
|
|
39
|
+
ScriptSettingsPanel: () => ScriptSettingsPanel,
|
|
40
|
+
ScriptType: () => import_chunk_CPNHUAFN.ScriptType,
|
|
40
41
|
default: () => src_default,
|
|
41
42
|
initializeBundler: () => import_chunk_ACLCRWDB.initializeBundler
|
|
42
43
|
});
|
|
43
44
|
module.exports = __toCommonJS(node_exports);
|
|
44
45
|
var import_chunk_ACLCRWDB = require("./chunk-ACLCRWDB.cjs");
|
|
45
|
-
var
|
|
46
|
-
var
|
|
46
|
+
var import_chunk_FY5KKL5N = require("./chunk-FY5KKL5N.cjs");
|
|
47
|
+
var import_chunk_CPNHUAFN = require("./chunk-CPNHUAFN.cjs");
|
|
48
|
+
var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
|
|
47
49
|
var import_esbuild = __toESM(require("esbuild-wasm/esbuild.wasm?url"));
|
|
48
50
|
var import_react = __toESM(require("react"));
|
|
49
51
|
var import_app_framework = require("@dxos/app-framework");
|
|
@@ -61,6 +63,10 @@ var import_react3 = __toESM(require("react"));
|
|
|
61
63
|
var import_react_client = require("@dxos/react-client");
|
|
62
64
|
var import_react_ui = require("@dxos/react-ui");
|
|
63
65
|
var import_react_ui_data = require("@dxos/react-ui-data");
|
|
66
|
+
var import_react4 = __toESM(require("react"));
|
|
67
|
+
var import_react_client2 = require("@dxos/react-client");
|
|
68
|
+
var import_echo2 = require("@dxos/react-client/echo");
|
|
69
|
+
var import_react_ui2 = require("@dxos/react-ui");
|
|
64
70
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/compiler/compiler.ts";
|
|
65
71
|
var defaultOptions = {
|
|
66
72
|
lib: [
|
|
@@ -110,7 +116,7 @@ var Compiler = class {
|
|
|
110
116
|
}
|
|
111
117
|
};
|
|
112
118
|
var ScriptSettings = ({ settings }) => {
|
|
113
|
-
const { t } = (0, import_react_ui.useTranslation)(
|
|
119
|
+
const { t } = (0, import_react_ui.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
|
|
114
120
|
const client = (0, import_react_client.useClient)();
|
|
115
121
|
const handleAuthenticate = async () => {
|
|
116
122
|
const { identityKey } = client.halo.identity.get();
|
|
@@ -133,18 +139,86 @@ var ScriptSettings = ({ settings }) => {
|
|
|
133
139
|
}
|
|
134
140
|
]);
|
|
135
141
|
};
|
|
136
|
-
return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_data.
|
|
142
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_data.DeprecatedFormInput, {
|
|
137
143
|
label: t("authenticate action label")
|
|
138
144
|
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Button, {
|
|
139
145
|
onClick: handleAuthenticate
|
|
140
146
|
}, t("authenticate button label"))));
|
|
141
147
|
};
|
|
142
|
-
var
|
|
143
|
-
|
|
148
|
+
var ScriptSettingsPanel = ({ script }) => {
|
|
149
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
|
|
150
|
+
const client = (0, import_react_client2.useClient)();
|
|
151
|
+
const space = (0, import_echo2.getSpace)(script);
|
|
152
|
+
const [fn] = (0, import_echo2.useQuery)(space, import_echo2.Filter.schema(import_chunk_CPNHUAFN.FunctionType, (fn2) => fn2.source === script));
|
|
153
|
+
const handleNameChange = (0, import_react4.useCallback)((event) => {
|
|
154
|
+
script.name = event.target.value;
|
|
155
|
+
}, [
|
|
156
|
+
script
|
|
157
|
+
]);
|
|
158
|
+
const [binding, setBinding] = (0, import_react_ui2.useControlledValue)(fn?.binding ?? "");
|
|
159
|
+
const handleBindingChange = (0, import_react4.useCallback)((event) => {
|
|
160
|
+
setBinding(event.target.value);
|
|
161
|
+
}, [
|
|
162
|
+
setBinding
|
|
163
|
+
]);
|
|
164
|
+
const handleBindingBlur = (0, import_react4.useCallback)(() => {
|
|
165
|
+
fn.binding = binding;
|
|
166
|
+
}, [
|
|
167
|
+
fn,
|
|
168
|
+
binding
|
|
169
|
+
]);
|
|
170
|
+
const functionPath = fn && (0, import_chunk_FY5KKL5N.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
|
|
171
|
+
const functionUrl = functionPath && (0, import_chunk_FY5KKL5N.getInvocationUrl)(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
|
|
172
|
+
spaceId: space?.id
|
|
173
|
+
});
|
|
174
|
+
const handleCopy = (0, import_react4.useCallback)(() => functionUrl && navigator.clipboard.writeText(functionUrl), [
|
|
175
|
+
functionUrl
|
|
176
|
+
]);
|
|
177
|
+
return /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
178
|
+
role: "form",
|
|
179
|
+
className: "flex flex-col w-full p-2 gap-4"
|
|
180
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
181
|
+
role: "none",
|
|
182
|
+
className: "flex flex-col gap-1"
|
|
183
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, t("name label")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextInput, {
|
|
184
|
+
placeholder: t("object title placeholder"),
|
|
185
|
+
value: script.name ?? "",
|
|
186
|
+
onChange: handleNameChange
|
|
187
|
+
}))), fn && /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement("hr", {
|
|
188
|
+
className: "border-separator"
|
|
189
|
+
}), /* @__PURE__ */ import_react4.default.createElement("h2", null, t("remote function settings heading")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
190
|
+
role: "none",
|
|
191
|
+
className: "flex flex-col gap-1"
|
|
192
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, t("function url label")), /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
193
|
+
role: "none",
|
|
194
|
+
className: "flex gap-1"
|
|
195
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextInput, {
|
|
196
|
+
disabled: true,
|
|
197
|
+
value: functionUrl,
|
|
198
|
+
onChange: (event) => {
|
|
199
|
+
fn.name = event.target.value;
|
|
200
|
+
}
|
|
201
|
+
}), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Button, {
|
|
202
|
+
onClick: handleCopy
|
|
203
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Icon, {
|
|
204
|
+
icon: "ph--copy--regular",
|
|
205
|
+
size: 4
|
|
206
|
+
}))))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
207
|
+
role: "none",
|
|
208
|
+
className: "flex flex-col gap-1"
|
|
209
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, t("function binding label")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextInput, {
|
|
210
|
+
placeholder: t("function binding placeholder"),
|
|
211
|
+
value: binding,
|
|
212
|
+
onChange: handleBindingChange,
|
|
213
|
+
onBlur: handleBindingBlur
|
|
214
|
+
})))));
|
|
215
|
+
};
|
|
216
|
+
var AutomationPanel = (0, import_react2.lazy)(() => import("./AutomationPanel-OSPAFWZU.cjs"));
|
|
217
|
+
var ScriptContainer = (0, import_react2.lazy)(() => import("./ScriptContainer-FWHFEIHK.cjs"));
|
|
144
218
|
var translations_default = [
|
|
145
219
|
{
|
|
146
220
|
"en-US": {
|
|
147
|
-
[
|
|
221
|
+
[import_chunk_6LYX73ZT.SCRIPT_PLUGIN]: {
|
|
148
222
|
"plugin name": "Scripts",
|
|
149
223
|
"object title placeholder": "New script",
|
|
150
224
|
"create object label": "Create script",
|
|
@@ -158,7 +232,12 @@ var translations_default = [
|
|
|
158
232
|
"format label": "Format",
|
|
159
233
|
"toggle details label": "Toggle details panel",
|
|
160
234
|
"authenticate action label": "Authenticate functions service",
|
|
161
|
-
"authenticate button label": "Authenticate"
|
|
235
|
+
"authenticate button label": "Authenticate",
|
|
236
|
+
"name label": "Name",
|
|
237
|
+
"remote function settings heading": "Remote Function",
|
|
238
|
+
"function url label": "Invocation URL",
|
|
239
|
+
"function binding label": "Function binding",
|
|
240
|
+
"function binding placeholder": "BINDING"
|
|
162
241
|
}
|
|
163
242
|
}
|
|
164
243
|
}
|
|
@@ -166,7 +245,7 @@ var translations_default = [
|
|
|
166
245
|
var ScriptPlugin = () => {
|
|
167
246
|
const compiler = new Compiler();
|
|
168
247
|
return {
|
|
169
|
-
meta:
|
|
248
|
+
meta: import_chunk_6LYX73ZT.meta_default,
|
|
170
249
|
initialize: async () => {
|
|
171
250
|
await compiler.initialize();
|
|
172
251
|
compiler.setFile("/src/typings.d.ts", "declare module 'https://*';");
|
|
@@ -183,11 +262,11 @@ var ScriptPlugin = () => {
|
|
|
183
262
|
settings: {},
|
|
184
263
|
metadata: {
|
|
185
264
|
records: {
|
|
186
|
-
[
|
|
265
|
+
[import_chunk_CPNHUAFN.ScriptType.typename]: {
|
|
187
266
|
placeholder: [
|
|
188
267
|
"object title placeholder",
|
|
189
268
|
{
|
|
190
|
-
ns:
|
|
269
|
+
ns: import_chunk_6LYX73ZT.SCRIPT_PLUGIN
|
|
191
270
|
}
|
|
192
271
|
],
|
|
193
272
|
icon: "ph--code--regular",
|
|
@@ -201,8 +280,8 @@ var ScriptPlugin = () => {
|
|
|
201
280
|
translations: translations_default,
|
|
202
281
|
echo: {
|
|
203
282
|
schema: [
|
|
204
|
-
|
|
205
|
-
|
|
283
|
+
import_chunk_CPNHUAFN.ScriptType,
|
|
284
|
+
import_chunk_CPNHUAFN.FunctionType
|
|
206
285
|
]
|
|
207
286
|
},
|
|
208
287
|
space: {
|
|
@@ -210,10 +289,10 @@ var ScriptPlugin = () => {
|
|
|
210
289
|
label: [
|
|
211
290
|
"create object label",
|
|
212
291
|
{
|
|
213
|
-
ns:
|
|
292
|
+
ns: import_chunk_6LYX73ZT.SCRIPT_PLUGIN
|
|
214
293
|
}
|
|
215
294
|
],
|
|
216
|
-
action:
|
|
295
|
+
action: import_chunk_CPNHUAFN.ScriptAction.CREATE
|
|
217
296
|
}
|
|
218
297
|
},
|
|
219
298
|
graph: {
|
|
@@ -224,7 +303,7 @@ var ScriptPlugin = () => {
|
|
|
224
303
|
return [];
|
|
225
304
|
}
|
|
226
305
|
return (0, import_plugin_graph.createExtension)({
|
|
227
|
-
id:
|
|
306
|
+
id: import_chunk_CPNHUAFN.ScriptAction.CREATE,
|
|
228
307
|
filter: (node) => (0, import_plugin_graph.isActionGroup)(node) && node.id.startsWith(import_plugin_space.SpaceAction.ADD_OBJECT),
|
|
229
308
|
actions: ({ node }) => {
|
|
230
309
|
const id = node.id.split("/").at(-1);
|
|
@@ -237,12 +316,12 @@ var ScriptPlugin = () => {
|
|
|
237
316
|
}
|
|
238
317
|
return [
|
|
239
318
|
{
|
|
240
|
-
id: `${
|
|
319
|
+
id: `${import_chunk_6LYX73ZT.SCRIPT_PLUGIN}/create/${node.id}`,
|
|
241
320
|
data: async () => {
|
|
242
321
|
await dispatch([
|
|
243
322
|
{
|
|
244
|
-
plugin:
|
|
245
|
-
action:
|
|
323
|
+
plugin: import_chunk_6LYX73ZT.SCRIPT_PLUGIN,
|
|
324
|
+
action: import_chunk_CPNHUAFN.ScriptAction.CREATE
|
|
246
325
|
},
|
|
247
326
|
{
|
|
248
327
|
action: import_plugin_space.SpaceAction.ADD_OBJECT,
|
|
@@ -259,7 +338,7 @@ var ScriptPlugin = () => {
|
|
|
259
338
|
label: [
|
|
260
339
|
"create object label",
|
|
261
340
|
{
|
|
262
|
-
ns:
|
|
341
|
+
ns: import_chunk_6LYX73ZT.SCRIPT_PLUGIN
|
|
263
342
|
}
|
|
264
343
|
],
|
|
265
344
|
icon: "ph--code--regular",
|
|
@@ -275,12 +354,12 @@ var ScriptPlugin = () => {
|
|
|
275
354
|
component: ({ data, role }) => {
|
|
276
355
|
switch (role) {
|
|
277
356
|
case "settings": {
|
|
278
|
-
return data.plugin ===
|
|
357
|
+
return data.plugin === import_chunk_6LYX73ZT.meta_default.id ? /* @__PURE__ */ import_react.default.createElement(ScriptSettings, {
|
|
279
358
|
settings: {}
|
|
280
359
|
}) : null;
|
|
281
360
|
}
|
|
282
361
|
case "article": {
|
|
283
|
-
if (data.object instanceof
|
|
362
|
+
if (data.object instanceof import_chunk_CPNHUAFN.ScriptType) {
|
|
284
363
|
return /* @__PURE__ */ import_react.default.createElement(ScriptContainer, {
|
|
285
364
|
script: data.object,
|
|
286
365
|
env: compiler.environment
|
|
@@ -289,7 +368,7 @@ var ScriptPlugin = () => {
|
|
|
289
368
|
break;
|
|
290
369
|
}
|
|
291
370
|
case "complementary--automation": {
|
|
292
|
-
if (data.
|
|
371
|
+
if (data.subject instanceof import_chunk_CPNHUAFN.ScriptType) {
|
|
293
372
|
return {
|
|
294
373
|
node: /* @__PURE__ */ import_react.default.createElement(AutomationPanel, {
|
|
295
374
|
subject: data.subject
|
|
@@ -297,6 +376,15 @@ var ScriptPlugin = () => {
|
|
|
297
376
|
disposition: "hoist"
|
|
298
377
|
};
|
|
299
378
|
}
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
case "complementary--settings": {
|
|
382
|
+
if (data.subject instanceof import_chunk_CPNHUAFN.ScriptType) {
|
|
383
|
+
return /* @__PURE__ */ import_react.default.createElement(ScriptSettingsPanel, {
|
|
384
|
+
script: data.subject
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
break;
|
|
300
388
|
}
|
|
301
389
|
}
|
|
302
390
|
return null;
|
|
@@ -305,9 +393,9 @@ var ScriptPlugin = () => {
|
|
|
305
393
|
intent: {
|
|
306
394
|
resolver: (intent) => {
|
|
307
395
|
switch (intent.action) {
|
|
308
|
-
case
|
|
396
|
+
case import_chunk_CPNHUAFN.ScriptAction.CREATE: {
|
|
309
397
|
return {
|
|
310
|
-
data: (0, import_echo_schema.create)(
|
|
398
|
+
data: (0, import_echo_schema.create)(import_chunk_CPNHUAFN.ScriptType, {
|
|
311
399
|
source: (0, import_echo_schema.create)(import_types.TextType, {
|
|
312
400
|
content: import_chunk_ACLCRWDB.templates[0].source
|
|
313
401
|
})
|
|
@@ -331,6 +419,7 @@ var src_default = ScriptPlugin;
|
|
|
331
419
|
ScriptContainer,
|
|
332
420
|
ScriptPlugin,
|
|
333
421
|
ScriptSettings,
|
|
422
|
+
ScriptSettingsPanel,
|
|
334
423
|
ScriptType,
|
|
335
424
|
initializeBundler
|
|
336
425
|
});
|