@dxos/plugin-script 0.8.2-main.36232bc → 0.8.2-main.5ca3450
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{DeploymentDialog-QEKJ54ZB.mjs → DeploymentDialog-EMYG5BCD.mjs} +4 -4
- package/dist/lib/browser/{ScriptContainer-ATBYTIFH.mjs → ScriptContainer-TXVLNVQ4.mjs} +5 -5
- package/dist/lib/browser/ScriptContainer-TXVLNVQ4.mjs.map +7 -0
- package/dist/lib/browser/{artifact-definition-OEDM2SCN.mjs → artifact-definition-PD4UAAQZ.mjs} +41 -35
- package/dist/lib/browser/artifact-definition-PD4UAAQZ.mjs.map +7 -0
- package/dist/lib/browser/chunk-6MLJJI73.mjs +40 -0
- package/dist/lib/browser/chunk-6MLJJI73.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SXS6PUU5.mjs → chunk-AA3MEHWR.mjs} +5 -4
- package/dist/lib/browser/chunk-AA3MEHWR.mjs.map +7 -0
- package/dist/lib/browser/chunk-GTJJTVTQ.mjs +87 -0
- package/dist/lib/browser/chunk-GTJJTVTQ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EGDYE5MW.mjs → chunk-MGYLCUQA.mjs} +4 -4
- package/dist/lib/browser/{chunk-EGDYE5MW.mjs.map → chunk-MGYLCUQA.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-OZEMT3NO.mjs → chunk-RIKHDIEO.mjs} +2 -2
- package/dist/lib/browser/chunk-RIKHDIEO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-QNXJNXQZ.mjs → chunk-V26XPHYE.mjs} +6 -6
- package/dist/lib/browser/chunk-V26XPHYE.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +12 -12
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-C5D6TNPC.mjs → intent-resolver-PIDSNKRS.mjs} +11 -11
- package/dist/lib/browser/intent-resolver-PIDSNKRS.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-XJCN7XXF.mjs → react-surface-FFTOHZXK.mjs} +8 -8
- package/dist/lib/browser/react-surface-FFTOHZXK.mjs.map +7 -0
- package/dist/lib/browser/{settings-NK4XVS2E.mjs → settings-EOKSUGB6.mjs} +2 -2
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{DeploymentDialog-NUKZNILK.cjs → DeploymentDialog-VWKE3X2Y.cjs} +9 -9
- package/dist/lib/node/{DeploymentDialog-NUKZNILK.cjs.map → DeploymentDialog-VWKE3X2Y.cjs.map} +2 -2
- package/dist/lib/node/{ScriptContainer-OHHMLPUE.cjs → ScriptContainer-MNYXE47W.cjs} +14 -14
- package/dist/lib/node/ScriptContainer-MNYXE47W.cjs.map +7 -0
- package/dist/lib/node/{artifact-definition-SEGATFNH.cjs → artifact-definition-C644EAYM.cjs} +47 -41
- package/dist/lib/node/artifact-definition-C644EAYM.cjs.map +7 -0
- package/dist/lib/node/chunk-DGFQHBA7.cjs +91 -0
- package/dist/lib/node/chunk-DGFQHBA7.cjs.map +7 -0
- package/dist/lib/node/{chunk-UUGLBCMY.cjs → chunk-HLNSDICG.cjs} +14 -14
- package/dist/lib/node/chunk-HLNSDICG.cjs.map +7 -0
- package/dist/lib/node/{chunk-PMGWL64F.cjs → chunk-NBOJUJSM.cjs} +6 -6
- package/dist/lib/node/chunk-NBOJUJSM.cjs.map +7 -0
- package/dist/lib/node/{chunk-ZZ4HK5KM.cjs → chunk-SD6PUOJT.cjs} +11 -11
- package/dist/lib/node/chunk-SD6PUOJT.cjs.map +7 -0
- package/dist/lib/node/{chunk-PGEGRJP3.cjs → chunk-SXJGHLK6.cjs} +16 -17
- package/dist/lib/node/chunk-SXJGHLK6.cjs.map +7 -0
- package/dist/lib/node/{chunk-DSFCLQ5F.cjs → chunk-XT76CMHH.cjs} +10 -9
- package/dist/lib/node/chunk-XT76CMHH.cjs.map +7 -0
- package/dist/lib/node/index.cjs +24 -24
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-BQPBRVHM.cjs → intent-resolver-5VH5Z724.cjs} +20 -20
- package/dist/lib/node/intent-resolver-5VH5Z724.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-5XHS5WYW.cjs → react-surface-Y7IYF6UV.cjs} +26 -26
- package/dist/lib/node/react-surface-Y7IYF6UV.cjs.map +7 -0
- package/dist/lib/node/{settings-7PVJBWC4.cjs → settings-425QHVGC.cjs} +7 -7
- package/dist/lib/node/types.cjs +3 -3
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{DeploymentDialog-BIXZ5Q57.mjs → DeploymentDialog-FGFA6MG2.mjs} +4 -4
- package/dist/lib/node-esm/{ScriptContainer-4YWGWPY7.mjs → ScriptContainer-QFSYBSKM.mjs} +5 -5
- package/dist/lib/node-esm/ScriptContainer-QFSYBSKM.mjs.map +7 -0
- package/dist/lib/node-esm/{artifact-definition-5UHIXXHW.mjs → artifact-definition-J6UM6BQF.mjs} +41 -35
- package/dist/lib/node-esm/artifact-definition-J6UM6BQF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-5ES2REWL.mjs +89 -0
- package/dist/lib/node-esm/chunk-5ES2REWL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-GR4VTXVM.mjs → chunk-NERLX6GG.mjs} +2 -2
- package/dist/lib/node-esm/chunk-NERLX6GG.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-4ISQLIIH.mjs → chunk-TQ5VMPMV.mjs} +6 -6
- package/dist/lib/node-esm/chunk-TQ5VMPMV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-KGYTIL33.mjs → chunk-VMQPOPKV.mjs} +12 -13
- package/dist/lib/node-esm/chunk-VMQPOPKV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TN35DSTF.mjs → chunk-X27CHZ64.mjs} +5 -4
- package/dist/lib/node-esm/chunk-X27CHZ64.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NNQXJQBG.mjs → chunk-XFRKBSGA.mjs} +4 -4
- package/dist/lib/node-esm/{chunk-NNQXJQBG.mjs.map → chunk-XFRKBSGA.mjs.map} +1 -1
- package/dist/lib/node-esm/index.mjs +12 -12
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-PPJKPHUQ.mjs → intent-resolver-GZEGKYFO.mjs} +11 -11
- package/dist/lib/node-esm/intent-resolver-GZEGKYFO.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-7ELFL7IO.mjs → react-surface-NNATTNFP.mjs} +8 -8
- package/dist/lib/node-esm/react-surface-NNATTNFP.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SJYC4JLT.mjs → settings-BWSKKIVQ.mjs} +2 -2
- package/dist/lib/node-esm/types.mjs +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
- package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
- package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScriptContainer.d.ts +1 -1
- package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +1 -1
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
- package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +1 -1
- package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/hooks/deploy.d.ts +4 -3
- package/dist/types/src/hooks/deploy.d.ts.map +1 -1
- package/dist/types/src/hooks/format.d.ts +1 -1
- package/dist/types/src/hooks/format.d.ts.map +1 -1
- package/dist/types/src/hooks/template.d.ts +1 -1
- package/dist/types/src/hooks/template.d.ts.map +1 -1
- package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
- package/dist/types/src/hooks/useToolbarAction.d.ts +1 -1
- package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -1
- package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
- package/dist/types/src/templates/chat.d.ts.map +1 -1
- package/dist/types/src/templates/discord.d.ts.map +1 -1
- package/dist/types/src/templates/echo.d.ts.map +1 -1
- package/dist/types/src/templates/email.d.ts.map +1 -1
- package/dist/types/src/templates/gmail.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -110
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +27 -26
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util/deploy.d.ts.map +1 -1
- package/dist/types/src/util/functions.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +51 -49
- package/src/ScriptPlugin.tsx +3 -3
- package/src/capabilities/artifact-definition.ts +33 -30
- package/src/capabilities/intent-resolver.ts +5 -5
- package/src/capabilities/react-surface.tsx +3 -3
- package/src/components/DeploymentDialog/DeploymentDialog.tsx +2 -2
- package/src/components/ScriptContainer.tsx +1 -1
- package/src/components/ScriptToolbar/ScriptToolbar.tsx +1 -1
- package/src/components/Settings/ScriptObjectSettings.tsx +3 -3
- package/src/hooks/format.ts +1 -1
- package/src/hooks/template.ts +1 -1
- package/src/hooks/useToolbarAction.ts +1 -1
- package/src/templates/discord.ts +10 -3
- package/src/templates/forex-effect.ts +1 -1
- package/src/templates/gmail.ts +42 -28
- package/src/translations.ts +1 -1
- package/src/types.ts +13 -14
- package/src/util/deploy.ts +1 -2
- package/dist/lib/browser/ScriptContainer-ATBYTIFH.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-OEDM2SCN.mjs.map +0 -7
- package/dist/lib/browser/chunk-OZEMT3NO.mjs.map +0 -7
- package/dist/lib/browser/chunk-QNXJNXQZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-SXS6PUU5.mjs.map +0 -7
- package/dist/lib/browser/chunk-XEPVXV72.mjs +0 -87
- package/dist/lib/browser/chunk-XEPVXV72.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZFTDU4WS.mjs +0 -41
- package/dist/lib/browser/chunk-ZFTDU4WS.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-C5D6TNPC.mjs.map +0 -7
- package/dist/lib/browser/react-surface-XJCN7XXF.mjs.map +0 -7
- package/dist/lib/node/ScriptContainer-OHHMLPUE.cjs.map +0 -7
- package/dist/lib/node/artifact-definition-SEGATFNH.cjs.map +0 -7
- package/dist/lib/node/chunk-4K23KEYT.cjs +0 -91
- package/dist/lib/node/chunk-4K23KEYT.cjs.map +0 -7
- package/dist/lib/node/chunk-DSFCLQ5F.cjs.map +0 -7
- package/dist/lib/node/chunk-PGEGRJP3.cjs.map +0 -7
- package/dist/lib/node/chunk-PMGWL64F.cjs.map +0 -7
- package/dist/lib/node/chunk-UUGLBCMY.cjs.map +0 -7
- package/dist/lib/node/chunk-ZZ4HK5KM.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-BQPBRVHM.cjs.map +0 -7
- package/dist/lib/node/react-surface-5XHS5WYW.cjs.map +0 -7
- package/dist/lib/node-esm/ScriptContainer-4YWGWPY7.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-5UHIXXHW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4ISQLIIH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GR4VTXVM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-KGYTIL33.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TN35DSTF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-X64SI6XO.mjs +0 -89
- package/dist/lib/node-esm/chunk-X64SI6XO.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-PPJKPHUQ.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-7ELFL7IO.mjs.map +0 -7
- /package/dist/lib/browser/{DeploymentDialog-QEKJ54ZB.mjs.map → DeploymentDialog-EMYG5BCD.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-NK4XVS2E.mjs.map → settings-EOKSUGB6.mjs.map} +0 -0
- /package/dist/lib/node/{settings-7PVJBWC4.cjs.map → settings-425QHVGC.cjs.map} +0 -0
- /package/dist/lib/node-esm/{DeploymentDialog-BIXZ5Q57.mjs.map → DeploymentDialog-FGFA6MG2.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-SJYC4JLT.mjs.map → settings-BWSKKIVQ.mjs.map} +0 -0
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { Schema } from 'effect';
|
|
6
|
+
|
|
5
7
|
import { Capabilities, contributes, createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';
|
|
6
8
|
import { defineArtifact, defineTool, ToolResult } from '@dxos/artifact';
|
|
7
9
|
import { createArtifactElement } from '@dxos/assistant';
|
|
8
|
-
import {
|
|
9
|
-
import { ScriptType } from '@dxos/functions/types';
|
|
10
|
+
import { ScriptType } from '@dxos/functions';
|
|
10
11
|
import { invariant } from '@dxos/invariant';
|
|
11
12
|
import { SpaceAction } from '@dxos/plugin-space/types';
|
|
12
13
|
import { live, makeRef, type Space } from '@dxos/react-client/echo';
|
|
13
|
-
import {
|
|
14
|
+
import { DataType } from '@dxos/schema';
|
|
14
15
|
|
|
15
16
|
import { meta } from '../meta';
|
|
16
17
|
// TODO(burdon): Factor out.
|
|
@@ -71,28 +72,28 @@ export default () => {
|
|
|
71
72
|
<apis>
|
|
72
73
|
export function defineFunction(params: {
|
|
73
74
|
description: string,
|
|
74
|
-
inputSchema:
|
|
75
|
-
outputSchema:
|
|
75
|
+
inputSchema: Schema.Schema,
|
|
76
|
+
outputSchema: Schema.Schema,
|
|
76
77
|
handler: (params: { event: { data: TInput } }) => Promise<TOutput>
|
|
77
78
|
}): FunctionDefinition
|
|
78
79
|
/**
|
|
79
80
|
* Effect Schema
|
|
80
81
|
*/
|
|
81
|
-
export const
|
|
82
|
+
export const Schema;
|
|
82
83
|
|
|
83
84
|
// Examples:
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
from:
|
|
90
|
-
to:
|
|
86
|
+
Schema.String
|
|
87
|
+
Schema.Number
|
|
88
|
+
Schema.Boolean
|
|
89
|
+
Schema.Struct({
|
|
90
|
+
from: Schema.String.annotations({ description: 'The source currency' }),
|
|
91
|
+
to: Schema.String.annotations({ description: 'The target currency' }),
|
|
91
92
|
})
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
Schema.Array(Schema.String)
|
|
94
|
+
Schema.Union(Schema.String, Schema.Number)
|
|
95
|
+
Schema.optional(Schema.String)
|
|
96
|
+
Schema.String.annotations({ description: 'The source currency' })
|
|
96
97
|
</apis>
|
|
97
98
|
|
|
98
99
|
<handler_function>
|
|
@@ -113,13 +114,13 @@ export default () => {
|
|
|
113
114
|
export default defineFunction({
|
|
114
115
|
description: 'Returns the exchange rate between two currencies.',
|
|
115
116
|
|
|
116
|
-
inputSchema:
|
|
117
|
-
from:
|
|
118
|
-
to:
|
|
117
|
+
inputSchema: Schema.Struct({
|
|
118
|
+
from: Schema.String.annotations({ description: 'The source currency' }),
|
|
119
|
+
to: Schema.String.annotations({ description: 'The target currency' }),
|
|
119
120
|
}),
|
|
120
121
|
|
|
121
|
-
outputSchema:
|
|
122
|
-
rate:
|
|
122
|
+
outputSchema: Schema.Struct({
|
|
123
|
+
rate: Schema.String.annotations({ description: 'The exchange rate' }),
|
|
123
124
|
}),
|
|
124
125
|
|
|
125
126
|
handler: async ({
|
|
@@ -143,9 +144,9 @@ export default () => {
|
|
|
143
144
|
name: 'create',
|
|
144
145
|
description: 'Create a new script. Returns the artifact definition for the script',
|
|
145
146
|
caption: 'Creating script...',
|
|
146
|
-
schema:
|
|
147
|
-
name:
|
|
148
|
-
code:
|
|
147
|
+
schema: Schema.Struct({
|
|
148
|
+
name: Schema.String.annotations({ description: 'The name of the script' }),
|
|
149
|
+
code: Schema.String.annotations({
|
|
149
150
|
description: 'The full code of the script in JavaScript or TypeScript. Must be valid executable code.',
|
|
150
151
|
}),
|
|
151
152
|
}),
|
|
@@ -155,7 +156,7 @@ export default () => {
|
|
|
155
156
|
const script = live(ScriptType, {
|
|
156
157
|
name,
|
|
157
158
|
source: makeRef(
|
|
158
|
-
live(
|
|
159
|
+
live(DataType.Text, {
|
|
159
160
|
content: code,
|
|
160
161
|
}),
|
|
161
162
|
),
|
|
@@ -176,8 +177,9 @@ export default () => {
|
|
|
176
177
|
name: 'inspect',
|
|
177
178
|
description: 'Inspect a script. Returns the artifact definition for the script',
|
|
178
179
|
caption: 'Inspecting script...',
|
|
179
|
-
schema:
|
|
180
|
-
|
|
180
|
+
schema: Schema.Struct({
|
|
181
|
+
// TODO(wittjosiah): ObjectId schema should be used here but it's not working.
|
|
182
|
+
id: Schema.String.annotations({ description: 'The ID of the script' }),
|
|
181
183
|
}),
|
|
182
184
|
execute: async ({ id }, { extensions }) => {
|
|
183
185
|
invariant(extensions?.space, 'No space');
|
|
@@ -195,9 +197,10 @@ export default () => {
|
|
|
195
197
|
name: 'update',
|
|
196
198
|
description: 'Update a script. Returns the artifact definition for the script',
|
|
197
199
|
caption: 'Updating script...',
|
|
198
|
-
schema:
|
|
199
|
-
|
|
200
|
-
|
|
200
|
+
schema: Schema.Struct({
|
|
201
|
+
// TODO(wittjosiah): ObjectId schema should be used here but it's not working.
|
|
202
|
+
id: Schema.String.annotations({ description: 'The ID of the script to update' }),
|
|
203
|
+
code: Schema.String.annotations({
|
|
201
204
|
description: 'The full code of the script in JavaScript or TypeScript. Must be valid executable code.',
|
|
202
205
|
}),
|
|
203
206
|
}),
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { Octokit } from '@octokit/core';
|
|
6
|
-
import {
|
|
6
|
+
import { Predicate } from 'effect';
|
|
7
7
|
|
|
8
8
|
import { contributes, Capabilities, createResolver, createIntent, LayoutAction } from '@dxos/app-framework';
|
|
9
|
-
import { ScriptType } from '@dxos/functions
|
|
9
|
+
import { ScriptType } from '@dxos/functions';
|
|
10
10
|
import { live, makeRef } from '@dxos/live-object';
|
|
11
11
|
import { TokenManagerAction } from '@dxos/plugin-token-manager/types';
|
|
12
|
-
import {
|
|
12
|
+
import { DataType } from '@dxos/schema';
|
|
13
13
|
|
|
14
14
|
import { DEPLOYMENT_DIALOG } from '../components';
|
|
15
15
|
import { defaultScriptsForIntegration } from '../meta';
|
|
@@ -49,7 +49,7 @@ export default () =>
|
|
|
49
49
|
data: {
|
|
50
50
|
object: live(ScriptType, {
|
|
51
51
|
name,
|
|
52
|
-
source: makeRef(live(
|
|
52
|
+
source: makeRef(live(DataType.Text, { content })),
|
|
53
53
|
}),
|
|
54
54
|
},
|
|
55
55
|
};
|
|
@@ -60,7 +60,7 @@ export default () =>
|
|
|
60
60
|
resolve: async ({ accessToken }) => {
|
|
61
61
|
const scriptTemplates = (defaultScriptsForIntegration[accessToken.source] ?? [])
|
|
62
62
|
.map((id) => templates.find((t) => t.id === id))
|
|
63
|
-
.filter(isNotNullable);
|
|
63
|
+
.filter(Predicate.isNotNullable);
|
|
64
64
|
|
|
65
65
|
if (scriptTemplates.length > 0) {
|
|
66
66
|
return {
|
|
@@ -7,11 +7,11 @@ import React from 'react';
|
|
|
7
7
|
import { Capabilities, contributes, createSurface, useCapability } from '@dxos/app-framework';
|
|
8
8
|
import { InvocationTracePanel } from '@dxos/devtools';
|
|
9
9
|
import { isInstanceOf } from '@dxos/echo-schema';
|
|
10
|
-
import { ScriptType } from '@dxos/functions
|
|
10
|
+
import { ScriptType } from '@dxos/functions';
|
|
11
11
|
import { SettingsStore } from '@dxos/local-storage';
|
|
12
12
|
import { getSpace } from '@dxos/react-client/echo';
|
|
13
13
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
14
|
-
import { type
|
|
14
|
+
import { type DataType } from '@dxos/schema';
|
|
15
15
|
|
|
16
16
|
import { ScriptCapabilities } from './capabilities';
|
|
17
17
|
import {
|
|
@@ -92,7 +92,7 @@ export default () =>
|
|
|
92
92
|
createSurface({
|
|
93
93
|
id: DEPLOYMENT_DIALOG,
|
|
94
94
|
role: 'dialog',
|
|
95
|
-
filter: (data): data is { props: { accessToken:
|
|
95
|
+
filter: (data): data is { props: { accessToken: DataType.AccessToken; scriptTemplates: any } } =>
|
|
96
96
|
data.component === DEPLOYMENT_DIALOG,
|
|
97
97
|
component: ({ data }) => <DeploymentDialog {...data.props} />,
|
|
98
98
|
}),
|
|
@@ -7,7 +7,7 @@ import React, { useEffect, useMemo } from 'react';
|
|
|
7
7
|
import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
|
|
8
8
|
import { getSpace } from '@dxos/react-client/echo';
|
|
9
9
|
import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
|
|
10
|
-
import { type
|
|
10
|
+
import { type DataType } from '@dxos/schema';
|
|
11
11
|
|
|
12
12
|
import { useCreateAndDeployScriptTemplates } from '../../hooks/useCreateAndDeployScriptTemplates';
|
|
13
13
|
import { SCRIPT_PLUGIN } from '../../meta';
|
|
@@ -21,7 +21,7 @@ export const DEPLOYMENT_DIALOG = `${SCRIPT_PLUGIN}/deployment/dialog`;
|
|
|
21
21
|
// - Pending / onError states.
|
|
22
22
|
|
|
23
23
|
type DeploymentDialogProps = {
|
|
24
|
-
accessToken:
|
|
24
|
+
accessToken: DataType.AccessToken;
|
|
25
25
|
scriptTemplates: Template[];
|
|
26
26
|
};
|
|
27
27
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import { type ScriptType } from '@dxos/functions
|
|
7
|
+
import { type ScriptType } from '@dxos/functions';
|
|
8
8
|
import { createDocAccessor, getSpace } from '@dxos/react-client/echo';
|
|
9
9
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
10
10
|
import { type ThemedClassName } from '@dxos/react-ui';
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback } from 'react';
|
|
6
6
|
|
|
7
|
-
import { type ScriptType } from '@dxos/functions
|
|
7
|
+
import { type ScriptType } from '@dxos/functions';
|
|
8
8
|
import { fullyQualifiedId } from '@dxos/react-client/echo';
|
|
9
9
|
import { ElevationProvider, type ThemedClassName } from '@dxos/react-ui';
|
|
10
10
|
import { stackItemContentToolbarClassNames } from '@dxos/react-ui-editor';
|
|
@@ -6,12 +6,12 @@ import { Octokit } from '@octokit/core';
|
|
|
6
6
|
import React, { type ChangeEvent, useCallback, useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import { createIntent, SettingsAction, useIntentDispatcher } from '@dxos/app-framework';
|
|
9
|
-
import { FunctionType, type ScriptType, getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions
|
|
9
|
+
import { FunctionType, type ScriptType, getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';
|
|
10
10
|
import { log } from '@dxos/log';
|
|
11
11
|
import { useClient } from '@dxos/react-client';
|
|
12
12
|
import { Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';
|
|
13
13
|
import { Button, Clipboard, Input, useControlledState, useTranslation } from '@dxos/react-ui';
|
|
14
|
-
import {
|
|
14
|
+
import { DataType } from '@dxos/schema';
|
|
15
15
|
|
|
16
16
|
import { SCRIPT_PLUGIN } from '../../meta';
|
|
17
17
|
|
|
@@ -112,7 +112,7 @@ const Publishing = ({ object }: ScriptObjectSettingsProps) => {
|
|
|
112
112
|
const { t } = useTranslation(SCRIPT_PLUGIN);
|
|
113
113
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
114
114
|
const space = getSpace(object);
|
|
115
|
-
const [githubToken] = useQuery(space, Filter.schema(
|
|
115
|
+
const [githubToken] = useQuery(space, Filter.schema(DataType.AccessToken, { source: 'github.com' }));
|
|
116
116
|
const gistKey = getMeta(object).keys.find(({ source }) => source === 'github.com');
|
|
117
117
|
const [gistUrl, setGistUrl] = useState<string | undefined>();
|
|
118
118
|
|
package/src/hooks/format.ts
CHANGED
|
@@ -7,7 +7,7 @@ import prettierPluginEstree from 'prettier/plugins/estree';
|
|
|
7
7
|
import prettierPluginTypescript from 'prettier/plugins/typescript';
|
|
8
8
|
import { useCallback } from 'react';
|
|
9
9
|
|
|
10
|
-
import { type ScriptType } from '@dxos/functions
|
|
10
|
+
import { type ScriptType } from '@dxos/functions';
|
|
11
11
|
import { log } from '@dxos/log';
|
|
12
12
|
import { createMenuAction } from '@dxos/react-ui-menu';
|
|
13
13
|
|
package/src/hooks/template.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { useCallback } from 'react';
|
|
6
6
|
|
|
7
|
-
import { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions
|
|
7
|
+
import { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions';
|
|
8
8
|
import { getMeta } from '@dxos/live-object';
|
|
9
9
|
import { createMenuItemGroup, createMenuAction } from '@dxos/react-ui-menu';
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { useCallback } from 'react';
|
|
6
6
|
|
|
7
|
-
import { type ScriptType } from '@dxos/functions
|
|
7
|
+
import { type ScriptType } from '@dxos/functions';
|
|
8
8
|
import { log } from '@dxos/log';
|
|
9
9
|
import { type MenuAction, type MenuActionHandler } from '@dxos/react-ui-menu';
|
|
10
10
|
|
package/src/templates/discord.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
// @ts-ignore
|
|
6
|
-
import { create,
|
|
6
|
+
import { create, defineFunction, DXN, Filter, ObjectId, S } from 'dxos:functions';
|
|
7
7
|
import {
|
|
8
8
|
FetchHttpClient,
|
|
9
9
|
// @ts-ignore
|
|
@@ -13,13 +13,20 @@ import { DiscordConfig, DiscordREST, DiscordRESTMemoryLive } from 'https://esm.s
|
|
|
13
13
|
// @ts-ignore
|
|
14
14
|
import { Effect, Config, Redacted, Ref } from 'https://esm.sh/effect@3.13.3';
|
|
15
15
|
|
|
16
|
+
import { Type } from '@dxos/echo';
|
|
17
|
+
|
|
16
18
|
const MessageSchema = S.Struct({
|
|
17
|
-
id:
|
|
19
|
+
id: ObjectId,
|
|
18
20
|
foreignId: S.Any, // bigint?
|
|
19
21
|
from: S.String,
|
|
20
22
|
created: S.String,
|
|
21
23
|
content: S.String,
|
|
22
|
-
}).pipe(
|
|
24
|
+
}).pipe(
|
|
25
|
+
Type.def({
|
|
26
|
+
typename: 'example.com/type/Message',
|
|
27
|
+
version: '0.1.0',
|
|
28
|
+
}),
|
|
29
|
+
);
|
|
23
30
|
|
|
24
31
|
const DEFAULT_AFTER = 1704067200; // 2024-01-01
|
|
25
32
|
|
package/src/templates/gmail.ts
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
// @ts-ignore
|
|
6
|
-
import { create, defineFunction,
|
|
6
|
+
import { create, defineFunction, Filter, ObjectId, S } from 'dxos:functions';
|
|
7
|
+
// @ts-ignore
|
|
7
8
|
import {
|
|
8
9
|
HttpClient,
|
|
9
10
|
HttpClientRequest,
|
|
@@ -11,19 +12,22 @@ import {
|
|
|
11
12
|
// @ts-ignore
|
|
12
13
|
} from 'https://esm.sh/@effect/platform@0.77.2?deps=effect@3.13.3';
|
|
13
14
|
// @ts-ignore
|
|
15
|
+
import { format, subDays } from 'https://esm.sh/date-fns@3.3.1';
|
|
16
|
+
// @ts-ignore
|
|
14
17
|
import { pipe, Chunk, Effect, Ref, Schedule, Stream } from 'https://esm.sh/effect@3.13.3';
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
const DEFAULT_AFTER = '2025-01-01';
|
|
19
|
+
import { Type } from '@dxos/echo';
|
|
18
20
|
|
|
19
21
|
export default defineFunction({
|
|
20
22
|
inputSchema: S.Struct({
|
|
23
|
+
mailboxId: S.String,
|
|
24
|
+
userId: S.optional(S.String).pipe(S.withDecodingDefault(() => 'me')),
|
|
25
|
+
after: S.optional(S.Union(S.Number, S.String)).pipe(
|
|
26
|
+
S.withDecodingDefault(() => format(subDays(new Date(), 30), 'yyyy-MM-dd')),
|
|
27
|
+
),
|
|
28
|
+
pageSize: S.optional(S.Number).pipe(S.withDecodingDefault(() => 100)),
|
|
21
29
|
// TODO(wittjosiah): Remove. This is used to provide a terminal for a cron trigger.
|
|
22
30
|
tick: S.optional(S.String),
|
|
23
|
-
userId: S.optional(S.String),
|
|
24
|
-
after: S.optional(S.Union(S.Number, S.String)),
|
|
25
|
-
pageSize: S.optional(S.Number),
|
|
26
|
-
mailboxId: S.String,
|
|
27
31
|
}),
|
|
28
32
|
|
|
29
33
|
outputSchema: S.Struct({
|
|
@@ -31,10 +35,10 @@ export default defineFunction({
|
|
|
31
35
|
}),
|
|
32
36
|
|
|
33
37
|
handler: ({
|
|
38
|
+
context: { space },
|
|
34
39
|
event: {
|
|
35
|
-
data: { mailboxId, userId
|
|
40
|
+
data: { mailboxId, userId, after, pageSize },
|
|
36
41
|
},
|
|
37
|
-
context: { space },
|
|
38
42
|
}: any) =>
|
|
39
43
|
Effect.gen(function* () {
|
|
40
44
|
const { token } = yield* Effect.tryPromise({
|
|
@@ -42,9 +46,10 @@ export default defineFunction({
|
|
|
42
46
|
catch: (e: any) => e,
|
|
43
47
|
});
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
// NOTE: Google API bundles size is v. large and caused runtime issues.
|
|
50
|
+
const makeRequest = (url: string) =>
|
|
46
51
|
pipe(
|
|
47
|
-
|
|
52
|
+
url,
|
|
48
53
|
HttpClientRequest.get,
|
|
49
54
|
HttpClientRequest.setHeaders({ Authorization: `Bearer ${token}`, Accept: 'application/json' }),
|
|
50
55
|
HttpClient.execute,
|
|
@@ -54,13 +59,10 @@ export default defineFunction({
|
|
|
54
59
|
Effect.scoped,
|
|
55
60
|
);
|
|
56
61
|
|
|
57
|
-
const listMessages = (userId: string, q: string, pageSize: number, pageToken: string | null) =>
|
|
58
|
-
|
|
59
|
-
return makeRequest(pageToken ? `${url}&pageToken=${pageToken}` : url);
|
|
60
|
-
};
|
|
62
|
+
const listMessages = (userId: string, q: string, pageSize: number, pageToken: string | null) =>
|
|
63
|
+
makeRequest(getUrl(userId, undefined, { q, pageSize, pageToken }));
|
|
61
64
|
|
|
62
|
-
const getMessage = (userId: string,
|
|
63
|
-
makeRequest(`https://gmail.googleapis.com/gmail/v1/users/${userId}/messages/${id}`);
|
|
65
|
+
const getMessage = (userId: string, messageId: string) => makeRequest(getUrl(userId, messageId));
|
|
64
66
|
|
|
65
67
|
const mailbox = yield* Effect.tryPromise({
|
|
66
68
|
try: () => space.db.query({ id: mailboxId }).first(),
|
|
@@ -137,6 +139,14 @@ export default defineFunction({
|
|
|
137
139
|
}).pipe(Effect.provide(FetchHttpClient.layer)),
|
|
138
140
|
});
|
|
139
141
|
|
|
142
|
+
const getUrl = (userId: string, messageId?: string, params?: Record<string, any>) => {
|
|
143
|
+
const api = new URL(
|
|
144
|
+
[`https://gmail.googleapis.com/gmail/v1/users/${userId}/messages`, messageId].filter(Boolean).join('/'),
|
|
145
|
+
);
|
|
146
|
+
Object.entries(params ?? {}).forEach(([key, value]) => api.searchParams.set(key, value));
|
|
147
|
+
return api.toString();
|
|
148
|
+
};
|
|
149
|
+
|
|
140
150
|
/**
|
|
141
151
|
* Parses an email string in the format "Name <email@example.com>" into separate name and email components.
|
|
142
152
|
*/
|
|
@@ -153,15 +163,14 @@ const parseEmailString = (emailString: string): { name?: string; email: string }
|
|
|
153
163
|
return undefined;
|
|
154
164
|
};
|
|
155
165
|
|
|
156
|
-
// TODO(wittjosiah): These schemas should be imported from @dxos/schema.
|
|
157
|
-
|
|
158
166
|
//
|
|
159
167
|
// Schemas
|
|
168
|
+
// TODO(wittjosiah): These schemas should be imported from @dxos/S.
|
|
160
169
|
//
|
|
161
170
|
|
|
162
171
|
const ActorRoles = ['user', 'assistant'] as const;
|
|
163
172
|
const ActorRole = S.Literal(...ActorRoles);
|
|
164
|
-
type ActorRole = S.
|
|
173
|
+
type ActorRole = S.S.Type<typeof ActorRole>;
|
|
165
174
|
|
|
166
175
|
const ActorSchema = S.Struct({
|
|
167
176
|
identityKey: S.optional(S.String),
|
|
@@ -173,7 +182,7 @@ const ActorSchema = S.Struct({
|
|
|
173
182
|
const AbstractContentBlock = S.Struct({
|
|
174
183
|
pending: S.optional(S.Boolean),
|
|
175
184
|
});
|
|
176
|
-
type AbstractContentBlock = S.
|
|
185
|
+
type AbstractContentBlock = S.S.Type<typeof AbstractContentBlock>;
|
|
177
186
|
const TextContentBlock = S.extend(
|
|
178
187
|
AbstractContentBlock,
|
|
179
188
|
S.Struct({
|
|
@@ -182,7 +191,7 @@ const TextContentBlock = S.extend(
|
|
|
182
191
|
text: S.String,
|
|
183
192
|
}),
|
|
184
193
|
).pipe(S.mutable);
|
|
185
|
-
type TextContentBlock = S.
|
|
194
|
+
type TextContentBlock = S.S.Type<typeof TextContentBlock>;
|
|
186
195
|
const JsonContentBlock = S.extend(
|
|
187
196
|
AbstractContentBlock,
|
|
188
197
|
S.Struct({
|
|
@@ -191,7 +200,7 @@ const JsonContentBlock = S.extend(
|
|
|
191
200
|
data: S.String,
|
|
192
201
|
}),
|
|
193
202
|
).pipe(S.mutable);
|
|
194
|
-
type JsonContentBlock = S.
|
|
203
|
+
type JsonContentBlock = S.S.Type<typeof JsonContentBlock>;
|
|
195
204
|
const Base64ImageSource = S.Struct({
|
|
196
205
|
type: S.Literal('base64'),
|
|
197
206
|
mediaType: S.String,
|
|
@@ -202,7 +211,7 @@ const HttpImageSource = S.Struct({
|
|
|
202
211
|
url: S.String,
|
|
203
212
|
}).pipe(S.mutable);
|
|
204
213
|
const ImageSource = S.Union(Base64ImageSource, HttpImageSource);
|
|
205
|
-
type ImageSource = S.
|
|
214
|
+
type ImageSource = S.S.Type<typeof ImageSource>;
|
|
206
215
|
const ImageContentBlock = S.extend(
|
|
207
216
|
AbstractContentBlock,
|
|
208
217
|
S.Struct({
|
|
@@ -211,7 +220,7 @@ const ImageContentBlock = S.extend(
|
|
|
211
220
|
source: S.optional(ImageSource),
|
|
212
221
|
}),
|
|
213
222
|
).pipe(S.mutable);
|
|
214
|
-
type ImageContentBlock = S.
|
|
223
|
+
type ImageContentBlock = S.S.Type<typeof ImageContentBlock>;
|
|
215
224
|
const ReferenceContentBlock = S.extend(
|
|
216
225
|
AbstractContentBlock,
|
|
217
226
|
S.Struct({
|
|
@@ -219,7 +228,7 @@ const ReferenceContentBlock = S.extend(
|
|
|
219
228
|
reference: S.Any,
|
|
220
229
|
}),
|
|
221
230
|
).pipe(S.mutable);
|
|
222
|
-
type ReferenceContentBlock = S.
|
|
231
|
+
type ReferenceContentBlock = S.S.Type<typeof ReferenceContentBlock>;
|
|
223
232
|
const MessageContentBlock = S.Union(TextContentBlock, JsonContentBlock, ImageContentBlock, ReferenceContentBlock);
|
|
224
233
|
|
|
225
234
|
const MessageType = S.Struct({
|
|
@@ -240,5 +249,10 @@ const MessageType = S.Struct({
|
|
|
240
249
|
}),
|
|
241
250
|
),
|
|
242
251
|
),
|
|
243
|
-
}).pipe(
|
|
244
|
-
|
|
252
|
+
}).pipe(
|
|
253
|
+
Type.def({
|
|
254
|
+
typename: 'dxos.org/type/Message',
|
|
255
|
+
version: '0.1.0',
|
|
256
|
+
}),
|
|
257
|
+
);
|
|
258
|
+
type MessageType = S.S.Type<typeof MessageType>;
|
package/src/translations.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Schema, SchemaAST } from 'effect';
|
|
6
6
|
|
|
7
7
|
import { SpaceSchema } from '@dxos/client/echo';
|
|
8
|
-
import {
|
|
9
|
-
import { ScriptType } from '@dxos/functions/types';
|
|
8
|
+
import { ScriptType } from '@dxos/functions';
|
|
10
9
|
import { EditorInputMode } from '@dxos/react-ui-editor';
|
|
11
10
|
|
|
12
11
|
import { SCRIPT_PLUGIN } from './meta';
|
|
@@ -17,27 +16,27 @@ export { SCRIPT_PLUGIN };
|
|
|
17
16
|
export namespace ScriptAction {
|
|
18
17
|
const SCRIPT_ACTION = `${SCRIPT_PLUGIN}/action`;
|
|
19
18
|
|
|
20
|
-
export const CreateScriptSchema =
|
|
21
|
-
name:
|
|
19
|
+
export const CreateScriptSchema = Schema.Struct({
|
|
20
|
+
name: Schema.optional(Schema.String),
|
|
22
21
|
// TODO(wittjosiah): Placeholder annotation?
|
|
23
|
-
gistUrl:
|
|
24
|
-
initialTemplateId:
|
|
22
|
+
gistUrl: Schema.optional(Schema.String.annotations({ [SchemaAST.TitleAnnotationId]: 'Import from Gist (url)' })),
|
|
23
|
+
initialTemplateId: Schema.optional(Schema.String),
|
|
25
24
|
});
|
|
26
25
|
|
|
27
|
-
export type CreateScriptProps =
|
|
26
|
+
export type CreateScriptProps = Schema.Schema.Type<typeof CreateScriptSchema>;
|
|
28
27
|
|
|
29
|
-
export class Create extends
|
|
30
|
-
input:
|
|
31
|
-
output:
|
|
28
|
+
export class Create extends Schema.TaggedClass<Create>()(`${SCRIPT_ACTION}/create`, {
|
|
29
|
+
input: Schema.extend(CreateScriptSchema, Schema.Struct({ space: SpaceSchema })),
|
|
30
|
+
output: Schema.Struct({
|
|
32
31
|
object: ScriptType,
|
|
33
32
|
}),
|
|
34
33
|
}) {}
|
|
35
34
|
}
|
|
36
35
|
|
|
37
|
-
export const ScriptSettingsSchema =
|
|
38
|
-
|
|
36
|
+
export const ScriptSettingsSchema = Schema.mutable(
|
|
37
|
+
Schema.Struct({
|
|
39
38
|
editorInputMode: EditorInputMode,
|
|
40
39
|
}),
|
|
41
40
|
);
|
|
42
41
|
|
|
43
|
-
export type ScriptSettingsProps =
|
|
42
|
+
export type ScriptSettingsProps = Schema.Schema.Type<typeof ScriptSettingsSchema>;
|
package/src/util/deploy.ts
CHANGED
|
@@ -7,12 +7,11 @@ import {
|
|
|
7
7
|
FunctionType,
|
|
8
8
|
type ScriptType,
|
|
9
9
|
getUserFunctionUrlInMetadata,
|
|
10
|
-
incrementSemverPatch,
|
|
11
10
|
makeFunctionUrl,
|
|
12
11
|
setUserFunctionUrlInMetadata,
|
|
13
|
-
uploadWorkerFunction,
|
|
14
12
|
} from '@dxos/functions';
|
|
15
13
|
import { Bundler } from '@dxos/functions/bundler';
|
|
14
|
+
import { incrementSemverPatch, uploadWorkerFunction } from '@dxos/functions/edge';
|
|
16
15
|
import { log } from '@dxos/log';
|
|
17
16
|
import { live, getMeta, makeRef, type Space } from '@dxos/react-client/echo';
|
|
18
17
|
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/ScriptContainer.tsx", "../../../src/components/ScriptToolbar/ScriptToolbar.tsx", "../../../src/components/TypescriptEditor/TypescriptEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type ScriptType } from '@dxos/functions/types';\nimport { createDocAccessor, getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { createDataExtensions, listener, stackItemContentEditorClassNames } from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ScriptToolbar } from './ScriptToolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { useDeployState, useToolbarState } from '../hooks';\nimport { type ScriptSettingsProps } from '../types';\n\nexport type ScriptEditorProps = ThemedClassName<\n {\n role?: string;\n script: ScriptType;\n settings?: ScriptSettingsProps;\n } & Pick<TypescriptEditorProps, 'env'>\n>;\n\nexport const ScriptContainer = ({\n classNames,\n role,\n script,\n settings = { editorInputMode: 'vscode' },\n env,\n}: ScriptEditorProps) => {\n const identity = useIdentity();\n const space = getSpace(script);\n const state = useToolbarState();\n useDeployState({ state, script });\n\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source.target && script.source.target.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source.target && createDocAccessor(script.source.target, ['content']),\n space,\n identity,\n }),\n ],\n [identity, space, script, script.source.target],\n );\n\n return (\n <StackItem.Content toolbar classNames='divide-y divide-separator'>\n <ScriptToolbar state={state} role={role} script={script} />\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={script.source?.target?.content}\n extensions={extensions}\n className={mx(stackItemContentEditorClassNames(role))}\n inputMode={settings.editorInputMode}\n toolbar\n />\n </StackItem.Content>\n );\n};\n\nexport default ScriptContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { ElevationProvider, type ThemedClassName } from '@dxos/react-ui';\nimport { stackItemContentToolbarClassNames } from '@dxos/react-ui-editor';\nimport { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';\n\nimport {\n type ScriptToolbarState,\n createDeploy,\n createFormat,\n createTemplateSelect,\n useToolbarAction,\n} from '../../hooks';\n\nexport type ScriptToolbarProps = ThemedClassName<{\n role?: string;\n script: ScriptType;\n state: ScriptToolbarState;\n}>;\n\nconst createToolbar = (state: ScriptToolbarState) => {\n const templateSelect = createTemplateSelect();\n const format = createFormat();\n const gap = createGapSeparator();\n const deploy = createDeploy(state);\n return {\n nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes],\n edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges],\n };\n};\n\nexport const ScriptToolbar = ({ script, role, state, classNames }: ScriptToolbarProps) => {\n const handleAction = useToolbarAction({ state, script });\n const toolbarCreator = useCallback(() => createToolbar(state), [state]);\n const menu = useMenuActions(toolbarCreator);\n\n return (\n <div role='none' className={stackItemContentToolbarClassNames(role)}>\n <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>\n <MenuProvider {...menu} onAction={handleAction} attendableId={fullyQualifiedId(script)}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n </ElevationProvider>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { defaultHighlightStyle } from '@codemirror/language';\nimport { Prec } from '@codemirror/state';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport { keymap } from '@codemirror/view';\nimport { tags } from '@lezer/highlight';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { continueKeymap } from '@valtown/codemirror-continue';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover, type HoverInfo } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { type ThemeMode, useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n type EditorInputMode,\n editorMonospace,\n EditorView,\n folding,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { isNonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n inputMode?: EditorInputMode;\n env?: VirtualTypeScriptEnvironment;\n toolbar?: boolean;\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 toolbar,\n inputMode = 'vscode',\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 // NOTE: Not using default editor gutter because folding for code works best right beside text.\n EditorView.theme({\n '.cm-gutters': {\n // Match margin from content.\n marginTop: '16px',\n background: 'var(--dx-baseSurface)',\n },\n }),\n InputModeExtensions[inputMode],\n folding(),\n // Continues block comments when you hit Enter.\n Prec.high(keymap.of(continueKeymap)),\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\n ? [\n tsFacet.of({ env, path: `/src/${id}.ts` }),\n tsSync(),\n tsLinter(),\n tsHover({ renderTooltip: createTooltipRenderer(themeMode) }),\n ]\n : [],\n ],\n ].filter(isNonNullable),\n selection,\n scrollTo,\n }),\n [id, extensions, themeMode, inputMode, selection, scrollTo],\n );\n\n return (\n <div ref={parentRef} data-toolbar={toolbar ? 'enabled' : 'disabled'} className={className} {...focusAttributes} />\n );\n};\n\nconst createTooltipRenderer = (themeMode: ThemeMode) => {\n const theme = themeMode === 'dark' ? oneDarkHighlightStyle : defaultHighlightStyle;\n\n const classFromKind = (_kind: string) => {\n // E.g., localName, methodName, parameterName, etc.\n const kind = _kind.endsWith('Name') ? 'name' : _kind;\n const validTag = kind in tags;\n if (!validTag) {\n return '';\n }\n\n const tag = tags[kind as keyof typeof tags];\n if (typeof tag === 'function') {\n return '';\n }\n\n return theme.style([tag]) ?? '';\n };\n\n return (info: HoverInfo) => {\n const div = document.createElement('div');\n div.className = 'p-1 rounded border border-separator bg-baseSurface xs:max-w-80 max-w-lg';\n\n if (info.quickInfo?.displayParts) {\n for (const part of info.quickInfo.displayParts) {\n const span = div.appendChild(document.createElement('span'));\n span.className = classFromKind(part.kind);\n span.innerText = part.text;\n }\n }\n\n return { dom: div };\n };\n};\n\nexport default TypescriptEditor;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useMemo", "createDocAccessor", "getSpace", "useIdentity", "createDataExtensions", "listener", "stackItemContentEditorClassNames", "StackItem", "mx", "React", "useCallback", "fullyQualifiedId", "ElevationProvider", "stackItemContentToolbarClassNames", "createGapSeparator", "MenuProvider", "ToolbarMenu", "useMenuActions", "createToolbar", "state", "templateSelect", "createTemplateSelect", "format", "createFormat", "gap", "createGapSeparator", "deploy", "createDeploy", "nodes", "edges", "ScriptToolbar", "script", "role", "classNames", "handleAction", "useToolbarAction", "toolbarCreator", "useCallback", "menu", "useMenuActions", "div", "className", "stackItemContentToolbarClassNames", "ElevationProvider", "elevation", "MenuProvider", "onAction", "attendableId", "fullyQualifiedId", "ToolbarMenu", "javascript", "defaultHighlightStyle", "Prec", "oneDarkHighlightStyle", "keymap", "tags", "continueKeymap", "tsSync", "tsFacet", "tsLinter", "tsAutocomplete", "tsHover", "React", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "editorFullWidth", "editorMonospace", "EditorView", "folding", "InputModeExtensions", "useTextEditor", "isNonNullable", "TypescriptEditor", "id", "env", "className", "initialValue", "extensions", "scrollTo", "selection", "toolbar", "inputMode", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "editorFullWidth", "EditorView", "theme", "marginTop", "background", "InputModeExtensions", "folding", "Prec", "high", "keymap", "of", "continueKeymap", "editorMonospace", "javascript", "typescript", "autocomplete", "override", "tsAutocomplete", "tsFacet", "path", "tsSync", "tsLinter", "tsHover", "renderTooltip", "createTooltipRenderer", "filter", "isNonNullable", "React", "div", "ref", "data-toolbar", "oneDarkHighlightStyle", "defaultHighlightStyle", "classFromKind", "_kind", "kind", "endsWith", "validTag", "tags", "tag", "style", "info", "document", "createElement", "quickInfo", "displayParts", "part", "span", "appendChild", "innerText", "text", "dom", "ScriptContainer", "classNames", "role", "script", "settings", "editorInputMode", "env", "identity", "useIdentity", "space", "getSpace", "state", "useToolbarState", "useDeployState", "extensions", "useMemo", "listener", "onChange", "text", "source", "target", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "React", "StackItem", "Content", "toolbar", "ScriptToolbar", "TypescriptEditor", "initialValue", "className", "mx", "stackItemContentEditorClassNames", "inputMode"]
|
|
7
|
-
}
|