@dxos/plugin-script 0.6.14-main.8b352a0 → 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
package/dist/lib/node-esm/{ScriptContainer-HSIOGVP3.mjs.map → ScriptContainer-6U5WJFRB.mjs.map}
RENAMED
|
@@ -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": ["React", "fullyQualifiedId", "useAttendableAttributes", "mx", "format", "prettierPluginEstree", "prettierPluginTypescript", "React", "useCallback", "useMemo", "useState", "log", "useClient", "create", "createDocAccessor", "Filter", "getMeta", "getSpace", "useQuery", "useIdentity", "useTranslation", "createDataExtensions", "listener", "mx", "React", "useState", "ElevationProvider", "Icon", "Select", "ToggleGroup", "ToggleGroupItem", "Toolbar", "NaturalToolbar", "Tooltip", "useTranslation", "Toolbar", "classNames", "deployed", "error", "functionUrl", "view", "templates", "onDeploy", "onFormat", "onViewChange", "onTemplateSelect", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "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", "javascript", "tsSync", "tsFacet", "tsLinter", "tsAutocomplete", "tsHover", "React", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "editorFullWidth", "editorGutter", "editorMonospace", "InputModeExtensions", "useTextEditor", "nonNullable", "TypescriptEditor", "id", "env", "className", "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", "React", "div", "ref", "ScriptEditor", "classNames", "script", "env", "t", "useTranslation", "SCRIPT_PLUGIN", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "extensions", "useMemo", "listener", "onChange", "text", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "view", "setView", "useState", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "error", "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": ["React", "fullyQualifiedId", "useAttendableAttributes", "mx", "format", "prettierPluginEstree", "prettierPluginTypescript", "React", "useCallback", "useMemo", "useState", "log", "useClient", "create", "createDocAccessor", "Filter", "getMeta", "getSpace", "useQuery", "useIdentity", "useTranslation", "createDataExtensions", "listener", "mx", "React", "useState", "ElevationProvider", "Icon", "Select", "ToggleGroup", "ToggleGroupItem", "Toolbar", "NaturalToolbar", "Tooltip", "useTranslation", "Toolbar", "classNames", "deployed", "error", "functionUrl", "view", "templates", "onDeploy", "onFormat", "onViewChange", "onTemplateSelect", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "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", "javascript", "tsSync", "tsFacet", "tsLinter", "tsAutocomplete", "tsHover", "React", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "editorFullWidth", "editorGutter", "editorMonospace", "InputModeExtensions", "useTextEditor", "nonNullable", "TypescriptEditor", "id", "env", "className", "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", "React", "div", "ref", "ScriptEditor", "classNames", "script", "env", "t", "useTranslation", "SCRIPT_PLUGIN", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "extensions", "useMemo", "listener", "onChange", "text", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "view", "setView", "useState", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "error", "setError", "handleFormat", "useCallback", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "handleTemplateChange", "template", "templates", "find", "name", "metaKeys", "keys", "oldPresetIndex", "findIndex", "key", "USERFUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "handleDeploy", "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", "functionUrl", "getInvocationUrl", "values", "runtime", "services", "edge", "url", "spaceId", "React", "div", "role", "className", "mx", "Toolbar", "deployed", "Boolean", "onDeploy", "onFormat", "onViewChange", "onTemplateSelect", "TypescriptEditor", "DebugPanel", "ScriptContainer", "script", "props", "attendableAttrs", "useAttendableAttributes", "fullyQualifiedId", "React", "div", "role", "className", "mx", "ScriptEditor"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
SCRIPT_PLUGIN
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SLTZMY34.mjs";
|
|
5
5
|
|
|
6
6
|
// packages/plugins/experimental/plugin-script/src/types/script.ts
|
|
7
7
|
import { ref, S, TypedObject } from "@dxos/echo-schema";
|
|
@@ -44,4 +44,4 @@ export {
|
|
|
44
44
|
FunctionType,
|
|
45
45
|
ScriptAction
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=chunk-
|
|
47
|
+
//# sourceMappingURL=chunk-2NPZGQGA.mjs.map
|
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
SCRIPT_PLUGIN
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SLTZMY34.mjs";
|
|
5
5
|
|
|
6
6
|
// packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx
|
|
7
7
|
import React, { useEffect, useRef, useState } from "react";
|
|
8
8
|
import { log } from "@dxos/log";
|
|
9
|
-
import { Avatar, Icon, Input, Toolbar,
|
|
9
|
+
import { Avatar, Icon, Input, Toolbar, useTranslation } from "@dxos/react-ui";
|
|
10
10
|
import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
|
|
11
11
|
import { mx } from "@dxos/react-ui-theme";
|
|
12
12
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx";
|
|
13
|
-
var DebugPanel = ({ classNames, functionUrl
|
|
13
|
+
var DebugPanel = ({ classNames, functionUrl }) => {
|
|
14
14
|
const { t } = useTranslation(SCRIPT_PLUGIN);
|
|
15
|
-
const bindingInputRef = useRef(null);
|
|
16
|
-
const [binding, setBinding] = useControlledValue(_binding ?? "");
|
|
17
|
-
const handleBlur = () => {
|
|
18
|
-
onBindingChange?.(binding);
|
|
19
|
-
};
|
|
20
15
|
const inputRef = useRef(null);
|
|
21
16
|
const [input, setInput] = useState("");
|
|
22
17
|
const [result, setResult] = useState("");
|
|
@@ -131,7 +126,7 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
|
|
|
131
126
|
if (err.name !== "AbortError") {
|
|
132
127
|
log.catch(err, void 0, {
|
|
133
128
|
F: __dxlog_file,
|
|
134
|
-
L:
|
|
129
|
+
L: 146,
|
|
135
130
|
S: void 0,
|
|
136
131
|
C: (f, a) => f(...a)
|
|
137
132
|
});
|
|
@@ -145,7 +140,7 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
|
|
|
145
140
|
});
|
|
146
141
|
log.catch(err, void 0, {
|
|
147
142
|
F: __dxlog_file,
|
|
148
|
-
L:
|
|
143
|
+
L: 153,
|
|
149
144
|
S: void 0,
|
|
150
145
|
C: (f, a) => f(...a)
|
|
151
146
|
});
|
|
@@ -172,13 +167,6 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
|
|
|
172
167
|
value: input,
|
|
173
168
|
onChange: (ev) => setInput(ev.target.value),
|
|
174
169
|
onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
|
|
175
|
-
})), showBindingConfig && /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
|
|
176
|
-
ref: bindingInputRef,
|
|
177
|
-
classNames: "!w-[10rem]",
|
|
178
|
-
placeholder: t("binding placeholder"),
|
|
179
|
-
value: binding,
|
|
180
|
-
onChange: (ev) => setBinding(ev.target.value.toUpperCase()),
|
|
181
|
-
onBlur: handleBlur
|
|
182
170
|
})), /* @__PURE__ */ React.createElement(Toolbar.Button, {
|
|
183
171
|
onClick: () => handleRequest(input)
|
|
184
172
|
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
@@ -246,4 +234,4 @@ var RobotAvatar = () => /* @__PURE__ */ React.createElement(Avatar.Root, {
|
|
|
246
234
|
export {
|
|
247
235
|
DebugPanel
|
|
248
236
|
};
|
|
249
|
-
//# sourceMappingURL=chunk-
|
|
237
|
+
//# sourceMappingURL=chunk-DXWSRDEN.mjs.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": ["React", "useEffect", "useRef", "useState", "log", "Avatar", "Icon", "Input", "Toolbar", "useTranslation", "SyntaxHighlighter", "mx", "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", "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
|
+
}
|
|
@@ -6,14 +6,15 @@ var meta_default = {
|
|
|
6
6
|
id: SCRIPT_PLUGIN,
|
|
7
7
|
name: "Scripts",
|
|
8
8
|
description: "Distributed functions.",
|
|
9
|
+
icon: "ph--code--regular",
|
|
10
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
|
|
9
11
|
tags: [
|
|
10
12
|
"experimental"
|
|
11
|
-
]
|
|
12
|
-
icon: "ph--code--regular"
|
|
13
|
+
]
|
|
13
14
|
};
|
|
14
15
|
|
|
15
16
|
export {
|
|
16
17
|
SCRIPT_PLUGIN,
|
|
17
18
|
meta_default
|
|
18
19
|
};
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
20
|
+
//# sourceMappingURL=chunk-SLTZMY34.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport default {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description: 'Distributed functions.',\n
|
|
5
|
-
"mappings": ";;;AAMO,IAAMA,gBAAgB;AAE7B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;
|
|
6
|
-
"names": ["SCRIPT_PLUGIN", "id", "name", "description", "
|
|
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
7
|
}
|
|
@@ -4,19 +4,23 @@ import {
|
|
|
4
4
|
initializeBundler,
|
|
5
5
|
templates
|
|
6
6
|
} from "./chunk-LDLNTVAK.mjs";
|
|
7
|
+
import {
|
|
8
|
+
getInvocationUrl,
|
|
9
|
+
getUserFunctionUrlInMetadata
|
|
10
|
+
} from "./chunk-QMTTZYLF.mjs";
|
|
7
11
|
import {
|
|
8
12
|
FunctionType,
|
|
9
13
|
ScriptAction,
|
|
10
14
|
ScriptType
|
|
11
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2NPZGQGA.mjs";
|
|
12
16
|
import {
|
|
13
17
|
SCRIPT_PLUGIN,
|
|
14
18
|
meta_default
|
|
15
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-SLTZMY34.mjs";
|
|
16
20
|
|
|
17
21
|
// packages/plugins/experimental/plugin-script/src/ScriptPlugin.tsx
|
|
18
22
|
import wasmUrl from "esbuild-wasm/esbuild.wasm?url";
|
|
19
|
-
import
|
|
23
|
+
import React3 from "react";
|
|
20
24
|
import { NavigationAction, parseIntentPlugin, resolvePlugin } from "@dxos/app-framework";
|
|
21
25
|
import { create } from "@dxos/echo-schema";
|
|
22
26
|
import { parseClientPlugin } from "@dxos/plugin-client";
|
|
@@ -85,7 +89,7 @@ import { lazy } from "react";
|
|
|
85
89
|
import React from "react";
|
|
86
90
|
import { useClient } from "@dxos/react-client";
|
|
87
91
|
import { Button, useTranslation } from "@dxos/react-ui";
|
|
88
|
-
import {
|
|
92
|
+
import { DeprecatedFormInput } from "@dxos/react-ui-data";
|
|
89
93
|
var ScriptSettings = ({ settings }) => {
|
|
90
94
|
const { t } = useTranslation(SCRIPT_PLUGIN);
|
|
91
95
|
const client = useClient();
|
|
@@ -110,16 +114,90 @@ var ScriptSettings = ({ settings }) => {
|
|
|
110
114
|
}
|
|
111
115
|
]);
|
|
112
116
|
};
|
|
113
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
117
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DeprecatedFormInput, {
|
|
114
118
|
label: t("authenticate action label")
|
|
115
119
|
}, /* @__PURE__ */ React.createElement(Button, {
|
|
116
120
|
onClick: handleAuthenticate
|
|
117
121
|
}, t("authenticate button label"))));
|
|
118
122
|
};
|
|
119
123
|
|
|
124
|
+
// packages/plugins/experimental/plugin-script/src/components/ScriptSettingsPanel.tsx
|
|
125
|
+
import React2, { useCallback } from "react";
|
|
126
|
+
import { useClient as useClient2 } from "@dxos/react-client";
|
|
127
|
+
import { Filter, getMeta, getSpace, useQuery } from "@dxos/react-client/echo";
|
|
128
|
+
import { Button as Button2, Icon, Input, useControlledValue, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
129
|
+
var ScriptSettingsPanel = ({ script }) => {
|
|
130
|
+
const { t } = useTranslation2(SCRIPT_PLUGIN);
|
|
131
|
+
const client = useClient2();
|
|
132
|
+
const space = getSpace(script);
|
|
133
|
+
const [fn] = useQuery(space, Filter.schema(FunctionType, (fn2) => fn2.source === script));
|
|
134
|
+
const handleNameChange = useCallback((event) => {
|
|
135
|
+
script.name = event.target.value;
|
|
136
|
+
}, [
|
|
137
|
+
script
|
|
138
|
+
]);
|
|
139
|
+
const [binding, setBinding] = useControlledValue(fn?.binding ?? "");
|
|
140
|
+
const handleBindingChange = useCallback((event) => {
|
|
141
|
+
setBinding(event.target.value);
|
|
142
|
+
}, [
|
|
143
|
+
setBinding
|
|
144
|
+
]);
|
|
145
|
+
const handleBindingBlur = useCallback(() => {
|
|
146
|
+
fn.binding = binding;
|
|
147
|
+
}, [
|
|
148
|
+
fn,
|
|
149
|
+
binding
|
|
150
|
+
]);
|
|
151
|
+
const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));
|
|
152
|
+
const functionUrl = functionPath && getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
|
|
153
|
+
spaceId: space?.id
|
|
154
|
+
});
|
|
155
|
+
const handleCopy = useCallback(() => functionUrl && navigator.clipboard.writeText(functionUrl), [
|
|
156
|
+
functionUrl
|
|
157
|
+
]);
|
|
158
|
+
return /* @__PURE__ */ React2.createElement("div", {
|
|
159
|
+
role: "form",
|
|
160
|
+
className: "flex flex-col w-full p-2 gap-4"
|
|
161
|
+
}, /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement("div", {
|
|
162
|
+
role: "none",
|
|
163
|
+
className: "flex flex-col gap-1"
|
|
164
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, t("name label")), /* @__PURE__ */ React2.createElement(Input.TextInput, {
|
|
165
|
+
placeholder: t("object title placeholder"),
|
|
166
|
+
value: script.name ?? "",
|
|
167
|
+
onChange: handleNameChange
|
|
168
|
+
}))), fn && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("hr", {
|
|
169
|
+
className: "border-separator"
|
|
170
|
+
}), /* @__PURE__ */ React2.createElement("h2", null, t("remote function settings heading")), /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement("div", {
|
|
171
|
+
role: "none",
|
|
172
|
+
className: "flex flex-col gap-1"
|
|
173
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, t("function url label")), /* @__PURE__ */ React2.createElement("div", {
|
|
174
|
+
role: "none",
|
|
175
|
+
className: "flex gap-1"
|
|
176
|
+
}, /* @__PURE__ */ React2.createElement(Input.TextInput, {
|
|
177
|
+
disabled: true,
|
|
178
|
+
value: functionUrl,
|
|
179
|
+
onChange: (event) => {
|
|
180
|
+
fn.name = event.target.value;
|
|
181
|
+
}
|
|
182
|
+
}), /* @__PURE__ */ React2.createElement(Button2, {
|
|
183
|
+
onClick: handleCopy
|
|
184
|
+
}, /* @__PURE__ */ React2.createElement(Icon, {
|
|
185
|
+
icon: "ph--copy--regular",
|
|
186
|
+
size: 4
|
|
187
|
+
}))))), /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement("div", {
|
|
188
|
+
role: "none",
|
|
189
|
+
className: "flex flex-col gap-1"
|
|
190
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, t("function binding label")), /* @__PURE__ */ React2.createElement(Input.TextInput, {
|
|
191
|
+
placeholder: t("function binding placeholder"),
|
|
192
|
+
value: binding,
|
|
193
|
+
onChange: handleBindingChange,
|
|
194
|
+
onBlur: handleBindingBlur
|
|
195
|
+
})))));
|
|
196
|
+
};
|
|
197
|
+
|
|
120
198
|
// packages/plugins/experimental/plugin-script/src/components/index.ts
|
|
121
|
-
var AutomationPanel = lazy(() => import("./AutomationPanel-
|
|
122
|
-
var ScriptContainer = lazy(() => import("./ScriptContainer-
|
|
199
|
+
var AutomationPanel = lazy(() => import("./AutomationPanel-KJNL6ARP.mjs"));
|
|
200
|
+
var ScriptContainer = lazy(() => import("./ScriptContainer-6U5WJFRB.mjs"));
|
|
123
201
|
|
|
124
202
|
// packages/plugins/experimental/plugin-script/src/translations.ts
|
|
125
203
|
var translations_default = [
|
|
@@ -139,7 +217,12 @@ var translations_default = [
|
|
|
139
217
|
"format label": "Format",
|
|
140
218
|
"toggle details label": "Toggle details panel",
|
|
141
219
|
"authenticate action label": "Authenticate functions service",
|
|
142
|
-
"authenticate button label": "Authenticate"
|
|
220
|
+
"authenticate button label": "Authenticate",
|
|
221
|
+
"name label": "Name",
|
|
222
|
+
"remote function settings heading": "Remote Function",
|
|
223
|
+
"function url label": "Invocation URL",
|
|
224
|
+
"function binding label": "Function binding",
|
|
225
|
+
"function binding placeholder": "BINDING"
|
|
143
226
|
}
|
|
144
227
|
}
|
|
145
228
|
}
|
|
@@ -258,13 +341,13 @@ var ScriptPlugin = () => {
|
|
|
258
341
|
component: ({ data, role }) => {
|
|
259
342
|
switch (role) {
|
|
260
343
|
case "settings": {
|
|
261
|
-
return data.plugin === meta_default.id ? /* @__PURE__ */
|
|
344
|
+
return data.plugin === meta_default.id ? /* @__PURE__ */ React3.createElement(ScriptSettings, {
|
|
262
345
|
settings: {}
|
|
263
346
|
}) : null;
|
|
264
347
|
}
|
|
265
348
|
case "article": {
|
|
266
349
|
if (data.object instanceof ScriptType) {
|
|
267
|
-
return /* @__PURE__ */
|
|
350
|
+
return /* @__PURE__ */ React3.createElement(ScriptContainer, {
|
|
268
351
|
script: data.object,
|
|
269
352
|
env: compiler.environment
|
|
270
353
|
});
|
|
@@ -272,14 +355,23 @@ var ScriptPlugin = () => {
|
|
|
272
355
|
break;
|
|
273
356
|
}
|
|
274
357
|
case "complementary--automation": {
|
|
275
|
-
if (data.
|
|
358
|
+
if (data.subject instanceof ScriptType) {
|
|
276
359
|
return {
|
|
277
|
-
node: /* @__PURE__ */
|
|
360
|
+
node: /* @__PURE__ */ React3.createElement(AutomationPanel, {
|
|
278
361
|
subject: data.subject
|
|
279
362
|
}),
|
|
280
363
|
disposition: "hoist"
|
|
281
364
|
};
|
|
282
365
|
}
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
case "complementary--settings": {
|
|
369
|
+
if (data.subject instanceof ScriptType) {
|
|
370
|
+
return /* @__PURE__ */ React3.createElement(ScriptSettingsPanel, {
|
|
371
|
+
script: data.subject
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
break;
|
|
283
375
|
}
|
|
284
376
|
}
|
|
285
377
|
return null;
|
|
@@ -315,6 +407,7 @@ export {
|
|
|
315
407
|
ScriptContainer,
|
|
316
408
|
ScriptPlugin,
|
|
317
409
|
ScriptSettings,
|
|
410
|
+
ScriptSettingsPanel,
|
|
318
411
|
ScriptType,
|
|
319
412
|
src_default as default,
|
|
320
413
|
initializeBundler
|