@dxos/plugin-script 0.6.10-staging.df1ee5d → 0.6.11-staging.32b42e4
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/{ScriptEditor-WNCGR5OU.mjs → ScriptEditor-5Y3EROG3.mjs} +126 -65
- package/dist/lib/browser/ScriptEditor-5Y3EROG3.mjs.map +7 -0
- package/dist/lib/browser/{TypescriptEditor-XTGRVCMY.mjs → TypescriptEditor-GPE72Y6I.mjs} +2 -2
- package/dist/lib/browser/{chunk-DX5CSOBP.mjs → chunk-MRGOT5RF.mjs} +25 -26
- package/dist/lib/browser/chunk-MRGOT5RF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZGCETT2W.mjs → chunk-O4LWBX6A.mjs} +7 -2
- package/dist/lib/browser/chunk-O4LWBX6A.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +6 -6
- package/dist/lib/browser/index.mjs.map +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node/{ScriptEditor-RR7AVOQL.cjs → ScriptEditor-YCUQFWQM.cjs} +142 -81
- package/dist/lib/node/ScriptEditor-YCUQFWQM.cjs.map +7 -0
- package/dist/lib/node/{TypescriptEditor-CRONCQSI.cjs → TypescriptEditor-M3WWFIP2.cjs} +7 -7
- package/dist/lib/node/{TypescriptEditor-CRONCQSI.cjs.map → TypescriptEditor-M3WWFIP2.cjs.map} +2 -2
- package/dist/lib/node/{chunk-VW2POILW.cjs → chunk-5RBVXKXT.cjs} +9 -4
- package/dist/lib/node/chunk-5RBVXKXT.cjs.map +7 -0
- package/dist/lib/node/{chunk-RXI576K3.cjs → chunk-IMLDKD5Y.cjs} +28 -29
- package/dist/lib/node/chunk-IMLDKD5Y.cjs.map +7 -0
- package/dist/lib/node/index.cjs +18 -18
- package/dist/lib/node/index.cjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types/index.cjs +4 -4
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
- package/dist/types/src/components/DebugPanel.d.ts +9 -0
- package/dist/types/src/components/DebugPanel.d.ts.map +1 -0
- package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts +1 -4
- package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +1 -3
- package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor.d.ts +3 -4
- package/dist/types/src/components/TypescriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor.stories.d.ts +1 -4
- package/dist/types/src/components/TypescriptEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/types/script.d.ts +12 -0
- package/dist/types/src/types/script.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/package.json +36 -33
- package/src/ScriptPlugin.tsx +7 -4
- package/src/components/{DetailsPanel.tsx → DebugPanel.tsx} +87 -36
- package/src/components/ScriptBlock/ScriptBlock.stories.tsx +27 -20
- package/src/components/ScriptEditor.tsx +20 -5
- package/src/components/Toolbar.stories.tsx +2 -4
- package/src/components/Toolbar.tsx +15 -29
- package/src/components/TypescriptEditor.stories.tsx +9 -12
- package/src/components/TypescriptEditor.tsx +15 -17
- package/src/types/script.ts +13 -0
- package/dist/lib/browser/ScriptEditor-WNCGR5OU.mjs.map +0 -7
- package/dist/lib/browser/chunk-DX5CSOBP.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZGCETT2W.mjs.map +0 -7
- package/dist/lib/node/ScriptEditor-RR7AVOQL.cjs.map +0 -7
- package/dist/lib/node/chunk-RXI576K3.cjs.map +0 -7
- package/dist/lib/node/chunk-VW2POILW.cjs.map +0 -7
- package/dist/types/src/components/DetailsPanel.d.ts +0 -9
- package/dist/types/src/components/DetailsPanel.d.ts.map +0 -1
- package/dist/types/src/data/templates.md.d.ts +0 -3
- package/dist/types/src/data/templates.md.d.ts.map +0 -1
- package/src/data/templates.md.ts +0 -44
- /package/dist/lib/browser/{TypescriptEditor-XTGRVCMY.mjs.map → TypescriptEditor-GPE72Y6I.mjs.map} +0 -0
- /package/src/types/{types.tsx → types.ts} +0 -0
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Checks, CircleNotch, Link, MagicWand, UploadSimple, WarningCircle } from '@phosphor-icons/react';
|
|
6
5
|
import React, { useState } from 'react';
|
|
7
6
|
|
|
8
7
|
import {
|
|
@@ -14,7 +13,6 @@ import {
|
|
|
14
13
|
Tooltip,
|
|
15
14
|
useTranslation,
|
|
16
15
|
} from '@dxos/react-ui';
|
|
17
|
-
import { getSize, mx } from '@dxos/react-ui-theme';
|
|
18
16
|
|
|
19
17
|
import { SCRIPT_PLUGIN } from '../meta';
|
|
20
18
|
|
|
@@ -55,6 +53,7 @@ export const Toolbar = ({
|
|
|
55
53
|
setPending(false);
|
|
56
54
|
};
|
|
57
55
|
|
|
56
|
+
// TODO(burdon): Simplify tooltips.
|
|
58
57
|
// TODO(burdon): Factor out common toolbar components with sheet/editor?
|
|
59
58
|
return (
|
|
60
59
|
<DensityProvider density='fine'>
|
|
@@ -64,7 +63,7 @@ export const Toolbar = ({
|
|
|
64
63
|
<Tooltip.Root>
|
|
65
64
|
<Tooltip.Trigger asChild>
|
|
66
65
|
<NaturalToolbar.Button variant='ghost' onClick={onFormat}>
|
|
67
|
-
<
|
|
66
|
+
<Icon icon='ph--magic-wand--regular' size={4} />
|
|
68
67
|
</NaturalToolbar.Button>
|
|
69
68
|
</Tooltip.Trigger>
|
|
70
69
|
<Tooltip.Portal>
|
|
@@ -78,27 +77,10 @@ export const Toolbar = ({
|
|
|
78
77
|
|
|
79
78
|
<div role='separator' className='grow' />
|
|
80
79
|
|
|
81
|
-
{functionUrl && (
|
|
82
|
-
<Tooltip.Root>
|
|
83
|
-
<Tooltip.Trigger asChild>
|
|
84
|
-
<NaturalToolbar.Button variant='ghost' onClick={handleCopyLink}>
|
|
85
|
-
<Link className={getSize(4)} />
|
|
86
|
-
</NaturalToolbar.Button>
|
|
87
|
-
</Tooltip.Trigger>
|
|
88
|
-
<Tooltip.Portal>
|
|
89
|
-
<Tooltip.Content>
|
|
90
|
-
<Tooltip.Arrow />
|
|
91
|
-
{t('copy link label')}
|
|
92
|
-
</Tooltip.Content>
|
|
93
|
-
</Tooltip.Portal>
|
|
94
|
-
</Tooltip.Root>
|
|
95
|
-
)}
|
|
96
|
-
|
|
97
|
-
{/* TODO(wittjosiah): Better treatment for status indicators in toolbar? */}
|
|
98
80
|
{error ? (
|
|
99
81
|
<Tooltip.Root>
|
|
100
82
|
<Tooltip.Trigger>
|
|
101
|
-
<
|
|
83
|
+
<Icon icon='ph--warning-circle--regular' size={4} />
|
|
102
84
|
</Tooltip.Trigger>
|
|
103
85
|
<Tooltip.Portal>
|
|
104
86
|
<Tooltip.Content>
|
|
@@ -107,27 +89,31 @@ export const Toolbar = ({
|
|
|
107
89
|
</Tooltip.Content>
|
|
108
90
|
</Tooltip.Portal>
|
|
109
91
|
</Tooltip.Root>
|
|
110
|
-
) :
|
|
92
|
+
) : null}
|
|
93
|
+
|
|
94
|
+
{functionUrl && deployed && (
|
|
111
95
|
<Tooltip.Root>
|
|
112
|
-
<Tooltip.Trigger>
|
|
113
|
-
<
|
|
96
|
+
<Tooltip.Trigger asChild>
|
|
97
|
+
<NaturalToolbar.Button variant='ghost' onClick={handleCopyLink}>
|
|
98
|
+
<Icon icon='ph--link--regular' size={4} />
|
|
99
|
+
</NaturalToolbar.Button>
|
|
114
100
|
</Tooltip.Trigger>
|
|
115
101
|
<Tooltip.Portal>
|
|
116
102
|
<Tooltip.Content>
|
|
117
103
|
<Tooltip.Arrow />
|
|
118
|
-
{t('
|
|
104
|
+
{t('copy link label')}
|
|
119
105
|
</Tooltip.Content>
|
|
120
106
|
</Tooltip.Portal>
|
|
121
107
|
</Tooltip.Root>
|
|
122
|
-
)
|
|
108
|
+
)}
|
|
123
109
|
|
|
124
110
|
<Tooltip.Root>
|
|
125
111
|
<Tooltip.Trigger asChild>
|
|
126
112
|
<NaturalToolbar.Button variant='ghost' onClick={handleDeploy} disabled={pending}>
|
|
127
113
|
{pending ? (
|
|
128
|
-
<
|
|
114
|
+
<Icon icon='ph--spinner--regular' size={4} classNames='animate-spin-slow' />
|
|
129
115
|
) : (
|
|
130
|
-
<
|
|
116
|
+
<Icon icon='ph--cloud-arrow-up--regular' size={4} />
|
|
131
117
|
)}
|
|
132
118
|
</NaturalToolbar.Button>
|
|
133
119
|
</Tooltip.Trigger>
|
|
@@ -143,7 +129,7 @@ export const Toolbar = ({
|
|
|
143
129
|
<Tooltip.Root>
|
|
144
130
|
<Tooltip.Trigger asChild>
|
|
145
131
|
<NaturalToolbar.Button variant='ghost' onClick={onTogglePanel}>
|
|
146
|
-
<Icon icon={showPanel ? 'ph--caret-
|
|
132
|
+
<Icon icon={showPanel ? 'ph--caret-down--regular' : 'ph--caret-up--regular'} size={4} />
|
|
147
133
|
</NaturalToolbar.Button>
|
|
148
134
|
</Tooltip.Trigger>
|
|
149
135
|
<Tooltip.Portal>
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import '@dxos-theme';
|
|
6
|
+
|
|
7
|
+
import React, { useMemo } from 'react';
|
|
8
|
+
|
|
9
|
+
import { createDocAccessor, createEchoObject } from '@dxos/react-client/echo';
|
|
10
|
+
import { createDataExtensions } from '@dxos/react-ui-editor';
|
|
11
|
+
|
|
12
|
+
import { TypescriptEditor } from './TypescriptEditor';
|
|
13
|
+
|
|
5
14
|
// TODO(burdon): Typescript.
|
|
6
15
|
// TODO(burdon): Effect schema.
|
|
7
16
|
// TODO(burdon): JSX.
|
|
@@ -13,15 +22,6 @@
|
|
|
13
22
|
// - virtual document image rendering
|
|
14
23
|
// - mobile rendering error
|
|
15
24
|
|
|
16
|
-
import '@dxos-theme';
|
|
17
|
-
|
|
18
|
-
import React, { useMemo } from 'react';
|
|
19
|
-
|
|
20
|
-
import { createDocAccessor, createEchoObject } from '@dxos/react-client/echo';
|
|
21
|
-
import { createDataExtensions } from '@dxos/react-ui-editor';
|
|
22
|
-
|
|
23
|
-
import { TypescriptEditor } from './TypescriptEditor';
|
|
24
|
-
|
|
25
25
|
const examples: string[] = [
|
|
26
26
|
[
|
|
27
27
|
'// Example function.',
|
|
@@ -55,9 +55,6 @@ export default {
|
|
|
55
55
|
title: 'plugin-script/TypescriptEditor',
|
|
56
56
|
component: TypescriptEditor,
|
|
57
57
|
render: Story,
|
|
58
|
-
parameters: {
|
|
59
|
-
layout: 'fullscreen',
|
|
60
|
-
},
|
|
61
58
|
};
|
|
62
59
|
|
|
63
60
|
export const Default = {};
|
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { javascript } from '@codemirror/lang-javascript';
|
|
6
|
-
import { defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';
|
|
7
|
-
import { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';
|
|
8
6
|
import { type VirtualTypeScriptEnvironment } from '@typescript/vfs';
|
|
9
7
|
import { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from '@valtown/codemirror-ts';
|
|
10
8
|
import React from 'react';
|
|
@@ -25,20 +23,19 @@ import { nonNullable } from '@dxos/util';
|
|
|
25
23
|
|
|
26
24
|
export type TypescriptEditorProps = {
|
|
27
25
|
id: string;
|
|
28
|
-
env?: VirtualTypeScriptEnvironment;
|
|
29
|
-
className?: string;
|
|
30
26
|
scrollPastEnd?: boolean;
|
|
31
|
-
|
|
27
|
+
env?: VirtualTypeScriptEnvironment;
|
|
28
|
+
} & Pick<UseTextEditorProps, 'className' | 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;
|
|
32
29
|
|
|
33
30
|
export const TypescriptEditor = ({
|
|
34
31
|
id,
|
|
35
|
-
|
|
32
|
+
scrollPastEnd,
|
|
36
33
|
env,
|
|
34
|
+
className,
|
|
37
35
|
initialValue,
|
|
36
|
+
extensions,
|
|
38
37
|
scrollTo,
|
|
39
38
|
selection,
|
|
40
|
-
className,
|
|
41
|
-
scrollPastEnd,
|
|
42
39
|
}: TypescriptEditorProps) => {
|
|
43
40
|
const { themeMode } = useThemeContext();
|
|
44
41
|
const { parentRef, focusAttributes } = useTextEditor(
|
|
@@ -47,7 +44,6 @@ export const TypescriptEditor = ({
|
|
|
47
44
|
initialValue,
|
|
48
45
|
extensions: [
|
|
49
46
|
extensions,
|
|
50
|
-
// TODO(wittjosiah): Highlight active line doesn't work.
|
|
51
47
|
createBasicExtensions({
|
|
52
48
|
highlightActiveLine: true,
|
|
53
49
|
indentWithTab: true,
|
|
@@ -55,21 +51,23 @@ export const TypescriptEditor = ({
|
|
|
55
51
|
lineWrapping: false,
|
|
56
52
|
scrollPastEnd,
|
|
57
53
|
}),
|
|
58
|
-
// TODO(wittjosiah): Factor out syntax highlighting to theme extensions.
|
|
59
|
-
themeMode === 'dark' ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle),
|
|
60
54
|
createThemeExtensions({
|
|
61
55
|
themeMode,
|
|
56
|
+
syntaxHighlighting: true,
|
|
62
57
|
slots: {
|
|
63
58
|
content: { className: editorFullWidth },
|
|
64
59
|
},
|
|
65
60
|
}),
|
|
66
61
|
editorGutter,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
// TODO(burdon): Factor out.
|
|
63
|
+
[
|
|
64
|
+
editorMonospace,
|
|
65
|
+
javascript({ typescript: true }),
|
|
66
|
+
// https://github.com/val-town/codemirror-ts
|
|
67
|
+
autocomplete({ override: env ? [tsAutocomplete()] : [] }),
|
|
68
|
+
env ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],
|
|
69
|
+
InputModeExtensions.vscode,
|
|
70
|
+
],
|
|
73
71
|
].filter(nonNullable),
|
|
74
72
|
selection,
|
|
75
73
|
scrollTo,
|
package/src/types/script.ts
CHANGED
|
@@ -5,16 +5,29 @@
|
|
|
5
5
|
import { ref, S, TypedObject } from '@dxos/echo-schema';
|
|
6
6
|
import { TextType } from '@dxos/plugin-markdown/types';
|
|
7
7
|
|
|
8
|
+
// TODO(burdon): Which is the outer type? I.e., in the navbar?
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Source script.
|
|
12
|
+
*/
|
|
8
13
|
export class ScriptType extends TypedObject({ typename: 'dxos.org/type/Script', version: '0.1.0' })({
|
|
14
|
+
// TODO(burdon): Change to URI?
|
|
9
15
|
name: S.optional(S.String),
|
|
16
|
+
description: S.optional(S.String),
|
|
10
17
|
source: ref(TextType),
|
|
18
|
+
// TODO(burdon): Change to has of deployed content.
|
|
11
19
|
// Whether source has changed since last deploy.
|
|
12
20
|
changed: S.optional(S.Boolean),
|
|
13
21
|
}) {}
|
|
14
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Function deployment.
|
|
25
|
+
*/
|
|
15
26
|
export class FunctionType extends TypedObject({ typename: 'dxos.org/type/Function', version: '0.1.0' })({
|
|
27
|
+
name: S.optional(S.String),
|
|
16
28
|
version: S.Number,
|
|
17
29
|
// Local binding to a function name.
|
|
30
|
+
// TODO(burdon): Move binding to inner type.
|
|
18
31
|
binding: S.optional(S.String),
|
|
19
32
|
// Reference to a source script if it exists within ECHO.
|
|
20
33
|
source: S.optional(ref(ScriptType)),
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/ScriptEditor.tsx", "../../../src/components/DetailsPanel.tsx", "../../../src/components/Toolbar.tsx"],
|
|
4
|
-
"sourcesContent": ["//\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 } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DetailsPanel } from './DetailsPanel';\nimport { Toolbar } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = {\n script: ScriptType;\n role?: string;\n} & Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ env, script, role }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\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 [showPanel, setShowPanel] = useState(false);\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 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({\n platform: 'browser',\n sandboxedModules: [],\n remoteModules: {},\n });\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 log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n script.changed = false;\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 const baseUrl = new URL('functions/', client.config.values.runtime?.services?.edge?.url);\n\n // Leading slashes cause the URL to be treated as an absolute path.\n const relativeUrl = existingFunctionUrl.replace(/^\\//, '');\n const url = new URL(`./${relativeUrl}`, baseUrl.toString());\n space && url.searchParams.set('spaceId', space.id);\n url.protocol = 'https';\n return url.toString();\n }, [existingFunctionUrl, space]);\n\n return (\n <div\n role='none'\n className={mx(role === 'article' && 'row-span-2', 'flex flex-col is-full bs-full overflow-hidden')}\n >\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden border-b border-separator'\n />\n\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n showPanel={showPanel}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onTogglePanel={async () => setShowPanel((showDetails) => !showDetails)}\n />\n\n {showPanel && (\n <DetailsPanel functionUrl={functionUrl} binding={fn?.binding} onBindingChange={handleBindingChange} />\n )}\n </div>\n );\n};\n\nexport default ScriptEditor;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport {\n Avatar,\n DensityProvider,\n Icon,\n Input,\n type ThemedClassName,\n Toolbar,\n useControlledValue,\n useDynamicRef,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\ntype State = 'pending' | 'responding';\n\ntype Item = { type: 'request' | 'response'; text: string };\n\nexport type DetailsPanelProps = ThemedClassName<{\n functionUrl?: string;\n binding?: string;\n onBindingChange?: (binding: string) => void;\n}>;\n\nexport const DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }: DetailsPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n const bindingInputRef = useRef<HTMLInputElement>(null);\n const [binding, setBinding] = useControlledValue(_binding ?? '');\n const handleBlur = () => {\n onBindingChange?.(binding);\n };\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [input, setInput] = useState('');\n const [result, setResult] = useState('');\n const resultRef = useDynamicRef(result);\n const [state, setState] = useState<State | null>(null);\n\n // TODO(burdon): Persistent history (non-space ECHO data?)\n const [history, setHistory] = useState<Item[]>([]);\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 // TODO(burdon): Halt streaming request?\n const handleClear = () => {\n handleStop();\n setInput('');\n setResult('');\n setHistory([]);\n inputRef.current?.focus();\n };\n\n const handleDone = () => {\n controller.current = undefined;\n setHistory((history) => [...history, { type: 'response', text: resultRef.current }]);\n setResult('');\n setState(null);\n handleScroll();\n };\n\n const handleRun = async (input: string) => {\n if (input.trim().length === 0) {\n inputRef.current?.focus();\n return;\n }\n\n setHistory((history) => [...history, { type: 'request', text: input }]);\n setInput('');\n setResult('');\n\n // Returns a promise that resolves when a value has been received.\n try {\n setState('pending');\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 });\n\n // TODO(burdon): Error handling.\n if (!response.ok) {\n setState(null);\n return;\n }\n\n setState('responding');\n const reader = response.body!.getReader();\n const pump = async ({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> => {\n setResult((result) => result + new TextDecoder().decode(value));\n handleScroll();\n if (!controller.current || done) {\n handleDone();\n return;\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) {\n setState(null);\n if (err !== 'stop') {\n log.catch(err);\n }\n }\n };\n\n return (\n <DensityProvider density='fine'>\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-4 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' && handleRun(input)}\n />\n </Input.Root>\n <Input.Root>\n <Input.TextInput\n ref={bindingInputRef}\n classNames='!w-[10rem]'\n placeholder={t('binding placeholder')}\n value={binding}\n onChange={(ev) => setBinding(ev.target.value.toUpperCase())}\n onBlur={handleBlur}\n />\n </Input.Root>\n <Toolbar.Button onClick={() => handleRun(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 </DensityProvider>\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\n// TODO(burdon): Replace with thread.\n// TODO(burdon): Delete individual messages.\n// TODO(burdon): Re-run question.\nconst MessageThread = ({ state, result, history }: { state: State | null; result: string; history: Item[] }) => {\n return (\n <>\n {history.map(({ type, text }, i) => (\n <div key={i} className='grid grid-cols-[3rem_1fr]'>\n <div>{type === 'response' && <RobotAvatar />}</div>\n <div className={mx('flex', type === 'request' && 'justify-end')}>\n <span className={mx(type === 'request' && 'p-1 px-2 rounded-lg bg-hoverSurface')}>{text}</span>\n </div>\n </div>\n ))}\n <div className='grid grid-cols-[3rem_1fr]'>\n <div>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin-slow' />) ||\n (result.length > 0 && <RobotAvatar />)}\n </div>\n <div>\n <span>{result}</span>\n </div>\n </div>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Checks, CircleNotch, Link, MagicWand, UploadSimple, WarningCircle } from '@phosphor-icons/react';\nimport React, { useState } from 'react';\n\nimport {\n DensityProvider,\n ElevationProvider,\n Icon,\n type ThemedClassName,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type ToolbarProps = ThemedClassName<{\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n showPanel?: boolean;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n onTogglePanel?: () => Promise<void>;\n}>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n showPanel,\n onDeploy,\n onFormat,\n onTogglePanel,\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 setPending(true);\n await onDeploy?.();\n setPending(false);\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <DensityProvider density='fine'>\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {onFormat && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onFormat}>\n <MagicWand className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('format label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n\n <div role='separator' className='grow' />\n\n {functionUrl && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleCopyLink}>\n <Link className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('copy link label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n\n {/* TODO(wittjosiah): Better treatment for status indicators in toolbar? */}\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <WarningCircle className={getSize(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 ) : deployed ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Checks className={getSize(4)} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('deployed label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : null}\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleDeploy} disabled={pending}>\n {pending ? (\n <CircleNotch className={mx('spinner', getSize(4))} />\n ) : (\n <UploadSimple className={getSize(4)} />\n )}\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {pending ? t('pending label') : t('deploy label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {onTogglePanel && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onTogglePanel}>\n <Icon icon={showPanel ? 'ph--caret-up--regular' : 'ph--caret-down--regular'} size={4} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('toggle details label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </NaturalToolbar.Root>\n </ElevationProvider>\n </DensityProvider>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["format", "prettierPluginEstree", "prettierPluginTypescript", "React", "useCallback", "useMemo", "useState", "log", "useClient", "create", "createDocAccessor", "Filter", "getMeta", "getSpace", "useQuery", "useIdentity", "useTranslation", "createDataExtensions", "listener", "mx", "React", "useEffect", "useRef", "useState", "log", "Avatar", "DensityProvider", "Icon", "Input", "Toolbar", "useControlledValue", "useDynamicRef", "useTranslation", "mx", "DetailsPanel", "classNames", "functionUrl", "binding", "_binding", "onBindingChange", "t", "useTranslation", "SCRIPT_PLUGIN", "bindingInputRef", "useRef", "setBinding", "useControlledValue", "handleBlur", "inputRef", "input", "setInput", "useState", "result", "setResult", "resultRef", "useDynamicRef", "state", "setState", "history", "setHistory", "scrollerRef", "handleScroll", "current", "scrollTop", "scrollHeight", "controller", "useEffect", "handleStop", "abort", "undefined", "handleClear", "focus", "handleDone", "type", "text", "handleRun", "trim", "length", "AbortController", "response", "fetch", "signal", "method", "body", "ok", "reader", "getReader", "pump", "done", "value", "TextDecoder", "decode", "read", "then", "catch", "err", "name", "log", "DensityProvider", "density", "div", "className", "mx", "ref", "MessageThread", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "toUpperCase", "onBlur", "Button", "onClick", "Icon", "icon", "size", "RobotAvatar", "Avatar", "variant", "Frame", "map", "i", "span", "Checks", "CircleNotch", "Link", "MagicWand", "UploadSimple", "WarningCircle", "React", "useState", "DensityProvider", "ElevationProvider", "Icon", "Toolbar", "NaturalToolbar", "Tooltip", "useTranslation", "getSize", "mx", "Toolbar", "classNames", "deployed", "error", "functionUrl", "showPanel", "onDeploy", "onFormat", "onTogglePanel", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "React", "DensityProvider", "density", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "style", "contain", "Tooltip", "Trigger", "asChild", "Button", "variant", "onClick", "MagicWand", "className", "getSize", "Portal", "Content", "Arrow", "div", "role", "Link", "WarningCircle", "Checks", "disabled", "CircleNotch", "mx", "UploadSimple", "Icon", "icon", "size", "ScriptEditor", "env", "script", "role", "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", "showPanel", "setShowPanel", "useState", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "error", "setError", "handleBindingChange", "useCallback", "binding", "handleFormat", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "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", "name", "functionUrl", "baseUrl", "URL", "values", "runtime", "services", "edge", "url", "relativeUrl", "replace", "toString", "searchParams", "set", "protocol", "React", "div", "className", "mx", "TypescriptEditor", "Toolbar", "deployed", "Boolean", "onDeploy", "onFormat", "onTogglePanel", "showDetails", "DetailsPanel", "onBindingChange"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/TypescriptEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\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 className?: string;\n scrollPastEnd?: boolean;\n} & Pick<UseTextEditorProps, 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n extensions,\n env,\n initialValue,\n scrollTo,\n selection,\n className,\n scrollPastEnd,\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n // TODO(wittjosiah): Highlight active line doesn't work.\n createBasicExtensions({\n highlightActiveLine: true,\n indentWithTab: true,\n lineNumbers: true,\n lineWrapping: false,\n scrollPastEnd,\n }),\n // TODO(wittjosiah): Factor out syntax highlighting to theme extensions.\n themeMode === 'dark' ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: editorFullWidth },\n },\n }),\n editorGutter,\n editorMonospace,\n javascript({ typescript: true }),\n // https://github.com/val-town/codemirror-ts\n env ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],\n autocomplete({ override: env ? [tsAutocomplete()] : [] }),\n InputModeExtensions.vscode,\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": ";AAIA,SAASA,kBAAkB;AAC3B,SAASC,uBAAuBC,0BAA0B;AAC1D,SAASC,6BAA6B;AAEtC,SAASC,QAAQC,SAASC,UAAUC,gBAAgBC,eAAe;AACnE,OAAOC,WAAW;AAElB,SAASC,uBAAuB;AAChC,SACEC,cACAC,uBACAC,uBACAC,iBACAC,cACAC,iBACAC,qBACAC,qBAEK;AACP,SAASC,mBAAmB;AASrB,IAAMC,mBAAmB,CAAC,EAC/BC,IACAC,YACAC,KACAC,cACAC,UACAC,WACAC,WACAC,cAAa,MACS;AACtB,QAAM,EAAEC,UAAS,IAAKC,gBAAAA;AACtB,QAAM,EAAEC,WAAWC,gBAAe,IAAKC,cACrC,OAAO;IACLZ;IACAG;IACAF,YAAY;MACVA;;MAEAY,sBAAsB;QACpBC,qBAAqB;QACrBC,eAAe;QACfC,aAAa;QACbC,cAAc;QACdV;MACF,CAAA;;MAEAC,cAAc,SAASU,mBAAmBC,qBAAAA,IAAyBD,mBAAmBE,qBAAAA;MACtFC,sBAAsB;QACpBb;QACAc,OAAO;UACLC,SAAS;YAAEjB,WAAWkB;UAAgB;QACxC;MACF,CAAA;MACAC;MACAC;MACAC,WAAW;QAAEC,YAAY;MAAK,CAAA;;MAE9B1B,MAAM;QAAC2B,QAAQC,GAAG;UAAE5B;UAAK6B,MAAM,QAAQ/B,EAAAA;QAAQ,CAAA;QAAIgC,OAAAA;QAAUC,SAAAA;QAAYC,QAAAA;UAAa,CAAA;MACtFC,aAAa;QAAEC,UAAUlC,MAAM;UAACmC,eAAAA;YAAoB,CAAA;MAAG,CAAA;MACvDC,oBAAoBC;MACpBC,OAAOC,WAAAA;IACTpC;IACAD;EACF,IACA;IAACJ;IAAIG;IAAcF;IAAYO;IAAWH;IAAWD;GAAS;AAGhE,SAAO,sBAAA,cAACsC,OAAAA;IAAIC,KAAKjC;IAAWJ;IAAuB,GAAGK;;AACxD;AAEA,IAAA,2BAAeZ;",
|
|
6
|
-
"names": ["javascript", "defaultHighlightStyle", "syntaxHighlighting", "oneDarkHighlightStyle", "tsSync", "tsFacet", "tsLinter", "tsAutocomplete", "tsHover", "React", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "editorFullWidth", "editorGutter", "editorMonospace", "InputModeExtensions", "useTextEditor", "nonNullable", "TypescriptEditor", "id", "extensions", "env", "initialValue", "scrollTo", "selection", "className", "scrollPastEnd", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "syntaxHighlighting", "oneDarkHighlightStyle", "defaultHighlightStyle", "createThemeExtensions", "slots", "content", "editorFullWidth", "editorGutter", "editorMonospace", "javascript", "typescript", "tsFacet", "of", "path", "tsSync", "tsLinter", "tsHover", "autocomplete", "override", "tsAutocomplete", "InputModeExtensions", "vscode", "filter", "nonNullable", "div", "ref"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/script.ts", "../../../src/types/types.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { ref, S, TypedObject } from '@dxos/echo-schema';\nimport { TextType } from '@dxos/plugin-markdown/types';\n\nexport class ScriptType extends TypedObject({ typename: 'dxos.org/type/Script', version: '0.1.0' })({\n name: S.optional(S.String),\n source: ref(TextType),\n // Whether source has changed since last deploy.\n changed: S.optional(S.Boolean),\n}) {}\n\nexport class FunctionType extends TypedObject({ typename: 'dxos.org/type/Function', version: '0.1.0' })({\n version: S.Number,\n // Local binding to a function name.\n binding: S.optional(S.String),\n // Reference to a source script if it exists within ECHO.\n source: S.optional(ref(ScriptType)),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-client';\nimport { type StackProvides } from '@dxos/plugin-stack';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport enum ScriptAction {\n CREATE = `${SCRIPT_PLUGIN}/create`,\n}\n\nexport type ScriptPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides &\n StackProvides;\n"],
|
|
5
|
-
"mappings": ";;;;;AAIA,SAASA,KAAKC,GAAGC,mBAAmB;AACpC,SAASC,gBAAgB;AAElB,IAAMC,aAAN,cAAyBC,YAAY;EAAEC,UAAU;EAAwBC,SAAS;AAAQ,CAAA,EAAG;EAClGC,MAAMC,EAAEC,SAASD,EAAEE,MAAM;EACzBC,QAAQC,IAAIC,QAAAA;;EAEZC,SAASN,EAAEC,SAASD,EAAEO,OAAO;AAC/B,CAAA,EAAA;AAAI;AAEG,IAAMC,eAAN,cAA2BZ,YAAY;EAAEC,UAAU;EAA0BC,SAAS;AAAQ,CAAA,EAAG;EACtGA,SAASE,EAAES;;EAEXC,SAASV,EAAEC,SAASD,EAAEE,MAAM;;EAE5BC,QAAQH,EAAEC,SAASG,IAAIT,UAAAA,CAAAA;AACzB,CAAA,EAAA;AAAI;;;;UCJQgB,eAAAA;0CACD,GAAGC,aAAAA,SAAsB,IAAA;GADxBD,iBAAAA,eAAAA,CAAAA,EAAAA;",
|
|
6
|
-
"names": ["ref", "S", "TypedObject", "TextType", "ScriptType", "TypedObject", "typename", "version", "name", "S", "optional", "String", "source", "ref", "TextType", "changed", "Boolean", "FunctionType", "Number", "binding", "ScriptAction", "SCRIPT_PLUGIN"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/ScriptEditor.tsx", "../../../src/components/DetailsPanel.tsx", "../../../src/components/Toolbar.tsx"],
|
|
4
|
-
"sourcesContent": ["//\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 } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DetailsPanel } from './DetailsPanel';\nimport { Toolbar } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = {\n script: ScriptType;\n role?: string;\n} & Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ env, script, role }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\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 [showPanel, setShowPanel] = useState(false);\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 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({\n platform: 'browser',\n sandboxedModules: [],\n remoteModules: {},\n });\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 log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n script.changed = false;\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 const baseUrl = new URL('functions/', client.config.values.runtime?.services?.edge?.url);\n\n // Leading slashes cause the URL to be treated as an absolute path.\n const relativeUrl = existingFunctionUrl.replace(/^\\//, '');\n const url = new URL(`./${relativeUrl}`, baseUrl.toString());\n space && url.searchParams.set('spaceId', space.id);\n url.protocol = 'https';\n return url.toString();\n }, [existingFunctionUrl, space]);\n\n return (\n <div\n role='none'\n className={mx(role === 'article' && 'row-span-2', 'flex flex-col is-full bs-full overflow-hidden')}\n >\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden border-b border-separator'\n />\n\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n showPanel={showPanel}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onTogglePanel={async () => setShowPanel((showDetails) => !showDetails)}\n />\n\n {showPanel && (\n <DetailsPanel functionUrl={functionUrl} binding={fn?.binding} onBindingChange={handleBindingChange} />\n )}\n </div>\n );\n};\n\nexport default ScriptEditor;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport {\n Avatar,\n DensityProvider,\n Icon,\n Input,\n type ThemedClassName,\n Toolbar,\n useControlledValue,\n useDynamicRef,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\ntype State = 'pending' | 'responding';\n\ntype Item = { type: 'request' | 'response'; text: string };\n\nexport type DetailsPanelProps = ThemedClassName<{\n functionUrl?: string;\n binding?: string;\n onBindingChange?: (binding: string) => void;\n}>;\n\nexport const DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }: DetailsPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n const bindingInputRef = useRef<HTMLInputElement>(null);\n const [binding, setBinding] = useControlledValue(_binding ?? '');\n const handleBlur = () => {\n onBindingChange?.(binding);\n };\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [input, setInput] = useState('');\n const [result, setResult] = useState('');\n const resultRef = useDynamicRef(result);\n const [state, setState] = useState<State | null>(null);\n\n // TODO(burdon): Persistent history (non-space ECHO data?)\n const [history, setHistory] = useState<Item[]>([]);\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 // TODO(burdon): Halt streaming request?\n const handleClear = () => {\n handleStop();\n setInput('');\n setResult('');\n setHistory([]);\n inputRef.current?.focus();\n };\n\n const handleDone = () => {\n controller.current = undefined;\n setHistory((history) => [...history, { type: 'response', text: resultRef.current }]);\n setResult('');\n setState(null);\n handleScroll();\n };\n\n const handleRun = async (input: string) => {\n if (input.trim().length === 0) {\n inputRef.current?.focus();\n return;\n }\n\n setHistory((history) => [...history, { type: 'request', text: input }]);\n setInput('');\n setResult('');\n\n // Returns a promise that resolves when a value has been received.\n try {\n setState('pending');\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 });\n\n // TODO(burdon): Error handling.\n if (!response.ok) {\n setState(null);\n return;\n }\n\n setState('responding');\n const reader = response.body!.getReader();\n const pump = async ({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> => {\n setResult((result) => result + new TextDecoder().decode(value));\n handleScroll();\n if (!controller.current || done) {\n handleDone();\n return;\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) {\n setState(null);\n if (err !== 'stop') {\n log.catch(err);\n }\n }\n };\n\n return (\n <DensityProvider density='fine'>\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-4 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' && handleRun(input)}\n />\n </Input.Root>\n <Input.Root>\n <Input.TextInput\n ref={bindingInputRef}\n classNames='!w-[10rem]'\n placeholder={t('binding placeholder')}\n value={binding}\n onChange={(ev) => setBinding(ev.target.value.toUpperCase())}\n onBlur={handleBlur}\n />\n </Input.Root>\n <Toolbar.Button onClick={() => handleRun(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 </DensityProvider>\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\n// TODO(burdon): Replace with thread.\n// TODO(burdon): Delete individual messages.\n// TODO(burdon): Re-run question.\nconst MessageThread = ({ state, result, history }: { state: State | null; result: string; history: Item[] }) => {\n return (\n <>\n {history.map(({ type, text }, i) => (\n <div key={i} className='grid grid-cols-[3rem_1fr]'>\n <div>{type === 'response' && <RobotAvatar />}</div>\n <div className={mx('flex', type === 'request' && 'justify-end')}>\n <span className={mx(type === 'request' && 'p-1 px-2 rounded-lg bg-hoverSurface')}>{text}</span>\n </div>\n </div>\n ))}\n <div className='grid grid-cols-[3rem_1fr]'>\n <div>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin-slow' />) ||\n (result.length > 0 && <RobotAvatar />)}\n </div>\n <div>\n <span>{result}</span>\n </div>\n </div>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Checks, CircleNotch, Link, MagicWand, UploadSimple, WarningCircle } from '@phosphor-icons/react';\nimport React, { useState } from 'react';\n\nimport {\n DensityProvider,\n ElevationProvider,\n Icon,\n type ThemedClassName,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type ToolbarProps = ThemedClassName<{\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n showPanel?: boolean;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n onTogglePanel?: () => Promise<void>;\n}>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n showPanel,\n onDeploy,\n onFormat,\n onTogglePanel,\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 setPending(true);\n await onDeploy?.();\n setPending(false);\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <DensityProvider density='fine'>\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {onFormat && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onFormat}>\n <MagicWand className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('format label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n\n <div role='separator' className='grow' />\n\n {functionUrl && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleCopyLink}>\n <Link className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('copy link label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n\n {/* TODO(wittjosiah): Better treatment for status indicators in toolbar? */}\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <WarningCircle className={getSize(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 ) : deployed ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Checks className={getSize(4)} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('deployed label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : null}\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleDeploy} disabled={pending}>\n {pending ? (\n <CircleNotch className={mx('spinner', getSize(4))} />\n ) : (\n <UploadSimple className={getSize(4)} />\n )}\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {pending ? t('pending label') : t('deploy label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {onTogglePanel && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onTogglePanel}>\n <Icon icon={showPanel ? 'ph--caret-up--regular' : 'ph--caret-down--regular'} size={4} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('toggle details label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </NaturalToolbar.Root>\n </ElevationProvider>\n </DensityProvider>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react", "import_log", "import_react_ui", "import_react_ui_theme", "DetailsPanel", "classNames", "functionUrl", "binding", "_binding", "onBindingChange", "t", "useTranslation", "SCRIPT_PLUGIN", "bindingInputRef", "useRef", "setBinding", "useControlledValue", "handleBlur", "inputRef", "input", "setInput", "useState", "result", "setResult", "resultRef", "useDynamicRef", "state", "setState", "history", "setHistory", "scrollerRef", "handleScroll", "current", "scrollTop", "scrollHeight", "controller", "useEffect", "handleStop", "abort", "undefined", "handleClear", "focus", "handleDone", "type", "text", "handleRun", "trim", "length", "AbortController", "response", "fetch", "signal", "method", "body", "ok", "reader", "getReader", "pump", "done", "value", "TextDecoder", "decode", "read", "then", "catch", "err", "name", "log", "React", "DensityProvider", "density", "div", "className", "mx", "ref", "MessageThread", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "toUpperCase", "onBlur", "Button", "onClick", "Icon", "icon", "size", "RobotAvatar", "Avatar", "variant", "Frame", "map", "i", "span", "deployed", "error", "showPanel", "onDeploy", "onFormat", "onTogglePanel", "pending", "setPending", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "ElevationProvider", "elevation", "NaturalToolbar", "style", "contain", "Tooltip", "Trigger", "asChild", "MagicWand", "getSize", "Portal", "Content", "Arrow", "role", "Link", "WarningCircle", "Checks", "disabled", "CircleNotch", "UploadSimple", "ScriptEditor", "env", "script", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "extensions", "useMemo", "listener", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "setShowPanel", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "setError", "handleBindingChange", "useCallback", "handleFormat", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "baseUrl", "URL", "values", "runtime", "services", "edge", "url", "relativeUrl", "replace", "toString", "searchParams", "set", "protocol", "TypescriptEditor", "Boolean", "showDetails"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/TypescriptEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\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 className?: string;\n scrollPastEnd?: boolean;\n} & Pick<UseTextEditorProps, 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n extensions,\n env,\n initialValue,\n scrollTo,\n selection,\n className,\n scrollPastEnd,\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n // TODO(wittjosiah): Highlight active line doesn't work.\n createBasicExtensions({\n highlightActiveLine: true,\n indentWithTab: true,\n lineNumbers: true,\n lineWrapping: false,\n scrollPastEnd,\n }),\n // TODO(wittjosiah): Factor out syntax highlighting to theme extensions.\n themeMode === 'dark' ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: editorFullWidth },\n },\n }),\n editorGutter,\n editorMonospace,\n javascript({ typescript: true }),\n // https://github.com/val-town/codemirror-ts\n env ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],\n autocomplete({ override: env ? [tsAutocomplete()] : [] }),\n InputModeExtensions.vscode,\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,6BAA2B;AAC3B,sBAA0D;AAC1D,4BAAsC;AAEtC,2BAAmE;AACnE,mBAAkB;AAElB,sBAAgC;AAChC,6BAUO;AACP,kBAA4B;AASrB,IAAMA,mBAAmB,CAAC,EAC/BC,IACAC,YACAC,KACAC,cACAC,UACAC,WACAC,WACAC,cAAa,MACS;AACtB,QAAM,EAAEC,UAAS,QAAKC,iCAAAA;AACtB,QAAM,EAAEC,WAAWC,gBAAe,QAAKC,sCACrC,OAAO;IACLZ;IACAG;IACAF,YAAY;MACVA;;UAEAY,8CAAsB;QACpBC,qBAAqB;QACrBC,eAAe;QACfC,aAAa;QACbC,cAAc;QACdV;MACF,CAAA;;MAEAC,cAAc,aAASU,oCAAmBC,2CAAAA,QAAyBD,oCAAmBE,qCAAAA;UACtFC,8CAAsB;QACpBb;QACAc,OAAO;UACLC,SAAS;YAAEjB,WAAWkB;UAAgB;QACxC;MACF,CAAA;MACAC;MACAC;UACAC,mCAAW;QAAEC,YAAY;MAAK,CAAA;;MAE9B1B,MAAM;QAAC2B,6BAAQC,GAAG;UAAE5B;UAAK6B,MAAM,QAAQ/B,EAAAA;QAAQ,CAAA;YAAIgC,6BAAAA;YAAUC,+BAAAA;YAAYC,8BAAAA;UAAa,CAAA;UACtFC,qCAAa;QAAEC,UAAUlC,MAAM;cAACmC,qCAAAA;YAAoB,CAAA;MAAG,CAAA;MACvDC,2CAAoBC;MACpBC,OAAOC,uBAAAA;IACTpC;IACAD;EACF,IACA;IAACJ;IAAIG;IAAcF;IAAYO;IAAWH;IAAWD;GAAS;AAGhE,SAAO,6BAAAsC,QAAA,cAACC,OAAAA;IAAIC,KAAKlC;IAAWJ;IAAuB,GAAGK;;AACxD;AAEA,IAAA,2BAAeZ;",
|
|
6
|
-
"names": ["TypescriptEditor", "id", "extensions", "env", "initialValue", "scrollTo", "selection", "className", "scrollPastEnd", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "syntaxHighlighting", "oneDarkHighlightStyle", "defaultHighlightStyle", "createThemeExtensions", "slots", "content", "editorFullWidth", "editorGutter", "editorMonospace", "javascript", "typescript", "tsFacet", "of", "path", "tsSync", "tsLinter", "tsHover", "autocomplete", "override", "tsAutocomplete", "InputModeExtensions", "vscode", "filter", "nonNullable", "React", "div", "ref"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/script.ts", "../../../src/types/types.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { ref, S, TypedObject } from '@dxos/echo-schema';\nimport { TextType } from '@dxos/plugin-markdown/types';\n\nexport class ScriptType extends TypedObject({ typename: 'dxos.org/type/Script', version: '0.1.0' })({\n name: S.optional(S.String),\n source: ref(TextType),\n // Whether source has changed since last deploy.\n changed: S.optional(S.Boolean),\n}) {}\n\nexport class FunctionType extends TypedObject({ typename: 'dxos.org/type/Function', version: '0.1.0' })({\n version: S.Number,\n // Local binding to a function name.\n binding: S.optional(S.String),\n // Reference to a source script if it exists within ECHO.\n source: S.optional(ref(ScriptType)),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-client';\nimport { type StackProvides } from '@dxos/plugin-stack';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport enum ScriptAction {\n CREATE = `${SCRIPT_PLUGIN}/create`,\n}\n\nexport type ScriptPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides &\n StackProvides;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,yBAAoC;AACpC,mBAAyB;AAElB,IAAMA,aAAN,kBAAyBC,gCAAY;EAAEC,UAAU;EAAwBC,SAAS;AAAQ,CAAA,EAAG;EAClGC,MAAMC,qBAAEC,SAASD,qBAAEE,MAAM;EACzBC,YAAQC,wBAAIC,qBAAAA;;EAEZC,SAASN,qBAAEC,SAASD,qBAAEO,OAAO;AAC/B,CAAA,EAAA;AAAI;AAEG,IAAMC,eAAN,kBAA2BZ,gCAAY;EAAEC,UAAU;EAA0BC,SAAS;AAAQ,CAAA,EAAG;EACtGA,SAASE,qBAAES;;EAEXC,SAASV,qBAAEC,SAASD,qBAAEE,MAAM;;EAE5BC,QAAQH,qBAAEC,aAASG,wBAAIT,UAAAA,CAAAA;AACzB,CAAA,EAAA;AAAI;;UCJQgB,eAAAA;0CACD,GAAGC,mCAAAA,SAAsB,IAAA;GADxBD,iBAAAA,eAAAA,CAAAA,EAAAA;",
|
|
6
|
-
"names": ["ScriptType", "TypedObject", "typename", "version", "name", "S", "optional", "String", "source", "ref", "TextType", "changed", "Boolean", "FunctionType", "Number", "binding", "ScriptAction", "SCRIPT_PLUGIN"]
|
|
7
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { type ThemedClassName } from '@dxos/react-ui';
|
|
3
|
-
export type DetailsPanelProps = ThemedClassName<{
|
|
4
|
-
functionUrl?: string;
|
|
5
|
-
binding?: string;
|
|
6
|
-
onBindingChange?: (binding: string) => void;
|
|
7
|
-
}>;
|
|
8
|
-
export declare const DetailsPanel: ({ classNames, functionUrl, binding: _binding, onBindingChange }: DetailsPanelProps) => React.JSX.Element;
|
|
9
|
-
//# sourceMappingURL=DetailsPanel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/DetailsPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,EAKL,KAAK,eAAe,EAKrB,MAAM,gBAAgB,CAAC;AASxB,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,CAAC,CAAC;AAEH,eAAO,MAAM,YAAY,oEAAqE,iBAAiB,sBAsJ9G,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"templates.md.d.ts","sourceRoot":"","sources":["../../../../src/data/templates.md.ts"],"names":[],"mappings":"qFASG,GAAG;AALN,wBAuCE"}
|
package/src/data/templates.md.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
export default async ({
|
|
6
|
-
event: {
|
|
7
|
-
data: { request },
|
|
8
|
-
},
|
|
9
|
-
context: { space, ai },
|
|
10
|
-
}: any) => {
|
|
11
|
-
const { objects: docs } = await space.crud.query({ __typename: 'dxos.org/type/Document' }).run();
|
|
12
|
-
|
|
13
|
-
let context = '';
|
|
14
|
-
for (const doc of docs) {
|
|
15
|
-
const { content } = await space.crud.query({ id: doc.content }).first();
|
|
16
|
-
context += content + '\n\n';
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const answer = await ai.run('@cf/meta/llama-3.1-8b-instruct', {
|
|
20
|
-
prompt: `
|
|
21
|
-
Using the context data only to answer the user's question.
|
|
22
|
-
If you don't know the answer reply with "I don't know.".
|
|
23
|
-
|
|
24
|
-
CONTEXT:
|
|
25
|
-
${context}
|
|
26
|
-
|
|
27
|
-
QUESTION:
|
|
28
|
-
${await request.text()}
|
|
29
|
-
`,
|
|
30
|
-
stream: true,
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
// TODO(burdon): Create wrapper for stream response.
|
|
34
|
-
// Transform event stream into raw text.
|
|
35
|
-
const { readable, writable } = new TransformStream({
|
|
36
|
-
transform: (chunk, controller) => {
|
|
37
|
-
controller.enqueue(
|
|
38
|
-
new TextEncoder().encode(JSON.parse(new TextDecoder().decode(chunk).slice('data: '.length)).response),
|
|
39
|
-
);
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
answer.pipeTo(writable);
|
|
43
|
-
return new Response(readable);
|
|
44
|
-
};
|
/package/dist/lib/browser/{TypescriptEditor-XTGRVCMY.mjs.map → TypescriptEditor-GPE72Y6I.mjs.map}
RENAMED
|
File without changes
|
|
File without changes
|