@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.
Files changed (173) hide show
  1. package/dist/lib/browser/{DeploymentDialog-QEKJ54ZB.mjs → DeploymentDialog-EMYG5BCD.mjs} +4 -4
  2. package/dist/lib/browser/{ScriptContainer-ATBYTIFH.mjs → ScriptContainer-TXVLNVQ4.mjs} +5 -5
  3. package/dist/lib/browser/ScriptContainer-TXVLNVQ4.mjs.map +7 -0
  4. package/dist/lib/browser/{artifact-definition-OEDM2SCN.mjs → artifact-definition-PD4UAAQZ.mjs} +41 -35
  5. package/dist/lib/browser/artifact-definition-PD4UAAQZ.mjs.map +7 -0
  6. package/dist/lib/browser/chunk-6MLJJI73.mjs +40 -0
  7. package/dist/lib/browser/chunk-6MLJJI73.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-SXS6PUU5.mjs → chunk-AA3MEHWR.mjs} +5 -4
  9. package/dist/lib/browser/chunk-AA3MEHWR.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-GTJJTVTQ.mjs +87 -0
  11. package/dist/lib/browser/chunk-GTJJTVTQ.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-EGDYE5MW.mjs → chunk-MGYLCUQA.mjs} +4 -4
  13. package/dist/lib/browser/{chunk-EGDYE5MW.mjs.map → chunk-MGYLCUQA.mjs.map} +1 -1
  14. package/dist/lib/browser/{chunk-OZEMT3NO.mjs → chunk-RIKHDIEO.mjs} +2 -2
  15. package/dist/lib/browser/chunk-RIKHDIEO.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-QNXJNXQZ.mjs → chunk-V26XPHYE.mjs} +6 -6
  17. package/dist/lib/browser/chunk-V26XPHYE.mjs.map +7 -0
  18. package/dist/lib/browser/index.mjs +12 -12
  19. package/dist/lib/browser/index.mjs.map +3 -3
  20. package/dist/lib/browser/{intent-resolver-C5D6TNPC.mjs → intent-resolver-PIDSNKRS.mjs} +11 -11
  21. package/dist/lib/browser/intent-resolver-PIDSNKRS.mjs.map +7 -0
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/{react-surface-XJCN7XXF.mjs → react-surface-FFTOHZXK.mjs} +8 -8
  24. package/dist/lib/browser/react-surface-FFTOHZXK.mjs.map +7 -0
  25. package/dist/lib/browser/{settings-NK4XVS2E.mjs → settings-EOKSUGB6.mjs} +2 -2
  26. package/dist/lib/browser/types.mjs +1 -1
  27. package/dist/lib/node/{DeploymentDialog-NUKZNILK.cjs → DeploymentDialog-VWKE3X2Y.cjs} +9 -9
  28. package/dist/lib/node/{DeploymentDialog-NUKZNILK.cjs.map → DeploymentDialog-VWKE3X2Y.cjs.map} +2 -2
  29. package/dist/lib/node/{ScriptContainer-OHHMLPUE.cjs → ScriptContainer-MNYXE47W.cjs} +14 -14
  30. package/dist/lib/node/ScriptContainer-MNYXE47W.cjs.map +7 -0
  31. package/dist/lib/node/{artifact-definition-SEGATFNH.cjs → artifact-definition-C644EAYM.cjs} +47 -41
  32. package/dist/lib/node/artifact-definition-C644EAYM.cjs.map +7 -0
  33. package/dist/lib/node/chunk-DGFQHBA7.cjs +91 -0
  34. package/dist/lib/node/chunk-DGFQHBA7.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-UUGLBCMY.cjs → chunk-HLNSDICG.cjs} +14 -14
  36. package/dist/lib/node/chunk-HLNSDICG.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-PMGWL64F.cjs → chunk-NBOJUJSM.cjs} +6 -6
  38. package/dist/lib/node/chunk-NBOJUJSM.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-ZZ4HK5KM.cjs → chunk-SD6PUOJT.cjs} +11 -11
  40. package/dist/lib/node/chunk-SD6PUOJT.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-PGEGRJP3.cjs → chunk-SXJGHLK6.cjs} +16 -17
  42. package/dist/lib/node/chunk-SXJGHLK6.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-DSFCLQ5F.cjs → chunk-XT76CMHH.cjs} +10 -9
  44. package/dist/lib/node/chunk-XT76CMHH.cjs.map +7 -0
  45. package/dist/lib/node/index.cjs +24 -24
  46. package/dist/lib/node/index.cjs.map +3 -3
  47. package/dist/lib/node/{intent-resolver-BQPBRVHM.cjs → intent-resolver-5VH5Z724.cjs} +20 -20
  48. package/dist/lib/node/intent-resolver-5VH5Z724.cjs.map +7 -0
  49. package/dist/lib/node/meta.json +1 -1
  50. package/dist/lib/node/{react-surface-5XHS5WYW.cjs → react-surface-Y7IYF6UV.cjs} +26 -26
  51. package/dist/lib/node/react-surface-Y7IYF6UV.cjs.map +7 -0
  52. package/dist/lib/node/{settings-7PVJBWC4.cjs → settings-425QHVGC.cjs} +7 -7
  53. package/dist/lib/node/types.cjs +3 -3
  54. package/dist/lib/node/types.cjs.map +1 -1
  55. package/dist/lib/node-esm/{DeploymentDialog-BIXZ5Q57.mjs → DeploymentDialog-FGFA6MG2.mjs} +4 -4
  56. package/dist/lib/node-esm/{ScriptContainer-4YWGWPY7.mjs → ScriptContainer-QFSYBSKM.mjs} +5 -5
  57. package/dist/lib/node-esm/ScriptContainer-QFSYBSKM.mjs.map +7 -0
  58. package/dist/lib/node-esm/{artifact-definition-5UHIXXHW.mjs → artifact-definition-J6UM6BQF.mjs} +41 -35
  59. package/dist/lib/node-esm/artifact-definition-J6UM6BQF.mjs.map +7 -0
  60. package/dist/lib/node-esm/chunk-5ES2REWL.mjs +89 -0
  61. package/dist/lib/node-esm/chunk-5ES2REWL.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-GR4VTXVM.mjs → chunk-NERLX6GG.mjs} +2 -2
  63. package/dist/lib/node-esm/chunk-NERLX6GG.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-4ISQLIIH.mjs → chunk-TQ5VMPMV.mjs} +6 -6
  65. package/dist/lib/node-esm/chunk-TQ5VMPMV.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-KGYTIL33.mjs → chunk-VMQPOPKV.mjs} +12 -13
  67. package/dist/lib/node-esm/chunk-VMQPOPKV.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-TN35DSTF.mjs → chunk-X27CHZ64.mjs} +5 -4
  69. package/dist/lib/node-esm/chunk-X27CHZ64.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-NNQXJQBG.mjs → chunk-XFRKBSGA.mjs} +4 -4
  71. package/dist/lib/node-esm/{chunk-NNQXJQBG.mjs.map → chunk-XFRKBSGA.mjs.map} +1 -1
  72. package/dist/lib/node-esm/index.mjs +12 -12
  73. package/dist/lib/node-esm/index.mjs.map +3 -3
  74. package/dist/lib/node-esm/{intent-resolver-PPJKPHUQ.mjs → intent-resolver-GZEGKYFO.mjs} +11 -11
  75. package/dist/lib/node-esm/intent-resolver-GZEGKYFO.mjs.map +7 -0
  76. package/dist/lib/node-esm/meta.json +1 -1
  77. package/dist/lib/node-esm/{react-surface-7ELFL7IO.mjs → react-surface-NNATTNFP.mjs} +8 -8
  78. package/dist/lib/node-esm/react-surface-NNATTNFP.mjs.map +7 -0
  79. package/dist/lib/node-esm/{settings-SJYC4JLT.mjs → settings-BWSKKIVQ.mjs} +2 -2
  80. package/dist/lib/node-esm/types.mjs +1 -1
  81. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  84. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
  85. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  86. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  87. package/dist/types/src/components/ScriptContainer.d.ts +1 -1
  88. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  89. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +1 -1
  90. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  91. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +1 -1
  92. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  93. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  94. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  95. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  96. package/dist/types/src/components/index.d.ts +1 -1
  97. package/dist/types/src/hooks/deploy.d.ts +4 -3
  98. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  99. package/dist/types/src/hooks/format.d.ts +1 -1
  100. package/dist/types/src/hooks/format.d.ts.map +1 -1
  101. package/dist/types/src/hooks/template.d.ts +1 -1
  102. package/dist/types/src/hooks/template.d.ts.map +1 -1
  103. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  104. package/dist/types/src/hooks/useToolbarAction.d.ts +1 -1
  105. package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -1
  106. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  107. package/dist/types/src/templates/chat.d.ts.map +1 -1
  108. package/dist/types/src/templates/discord.d.ts.map +1 -1
  109. package/dist/types/src/templates/echo.d.ts.map +1 -1
  110. package/dist/types/src/templates/email.d.ts.map +1 -1
  111. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  112. package/dist/types/src/translations.d.ts +2 -110
  113. package/dist/types/src/translations.d.ts.map +1 -1
  114. package/dist/types/src/types.d.ts +27 -26
  115. package/dist/types/src/types.d.ts.map +1 -1
  116. package/dist/types/src/util/deploy.d.ts.map +1 -1
  117. package/dist/types/src/util/functions.d.ts.map +1 -1
  118. package/dist/types/tsconfig.tsbuildinfo +1 -1
  119. package/package.json +51 -49
  120. package/src/ScriptPlugin.tsx +3 -3
  121. package/src/capabilities/artifact-definition.ts +33 -30
  122. package/src/capabilities/intent-resolver.ts +5 -5
  123. package/src/capabilities/react-surface.tsx +3 -3
  124. package/src/components/DeploymentDialog/DeploymentDialog.tsx +2 -2
  125. package/src/components/ScriptContainer.tsx +1 -1
  126. package/src/components/ScriptToolbar/ScriptToolbar.tsx +1 -1
  127. package/src/components/Settings/ScriptObjectSettings.tsx +3 -3
  128. package/src/hooks/format.ts +1 -1
  129. package/src/hooks/template.ts +1 -1
  130. package/src/hooks/useToolbarAction.ts +1 -1
  131. package/src/templates/discord.ts +10 -3
  132. package/src/templates/forex-effect.ts +1 -1
  133. package/src/templates/gmail.ts +42 -28
  134. package/src/translations.ts +1 -1
  135. package/src/types.ts +13 -14
  136. package/src/util/deploy.ts +1 -2
  137. package/dist/lib/browser/ScriptContainer-ATBYTIFH.mjs.map +0 -7
  138. package/dist/lib/browser/artifact-definition-OEDM2SCN.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-OZEMT3NO.mjs.map +0 -7
  140. package/dist/lib/browser/chunk-QNXJNXQZ.mjs.map +0 -7
  141. package/dist/lib/browser/chunk-SXS6PUU5.mjs.map +0 -7
  142. package/dist/lib/browser/chunk-XEPVXV72.mjs +0 -87
  143. package/dist/lib/browser/chunk-XEPVXV72.mjs.map +0 -7
  144. package/dist/lib/browser/chunk-ZFTDU4WS.mjs +0 -41
  145. package/dist/lib/browser/chunk-ZFTDU4WS.mjs.map +0 -7
  146. package/dist/lib/browser/intent-resolver-C5D6TNPC.mjs.map +0 -7
  147. package/dist/lib/browser/react-surface-XJCN7XXF.mjs.map +0 -7
  148. package/dist/lib/node/ScriptContainer-OHHMLPUE.cjs.map +0 -7
  149. package/dist/lib/node/artifact-definition-SEGATFNH.cjs.map +0 -7
  150. package/dist/lib/node/chunk-4K23KEYT.cjs +0 -91
  151. package/dist/lib/node/chunk-4K23KEYT.cjs.map +0 -7
  152. package/dist/lib/node/chunk-DSFCLQ5F.cjs.map +0 -7
  153. package/dist/lib/node/chunk-PGEGRJP3.cjs.map +0 -7
  154. package/dist/lib/node/chunk-PMGWL64F.cjs.map +0 -7
  155. package/dist/lib/node/chunk-UUGLBCMY.cjs.map +0 -7
  156. package/dist/lib/node/chunk-ZZ4HK5KM.cjs.map +0 -7
  157. package/dist/lib/node/intent-resolver-BQPBRVHM.cjs.map +0 -7
  158. package/dist/lib/node/react-surface-5XHS5WYW.cjs.map +0 -7
  159. package/dist/lib/node-esm/ScriptContainer-4YWGWPY7.mjs.map +0 -7
  160. package/dist/lib/node-esm/artifact-definition-5UHIXXHW.mjs.map +0 -7
  161. package/dist/lib/node-esm/chunk-4ISQLIIH.mjs.map +0 -7
  162. package/dist/lib/node-esm/chunk-GR4VTXVM.mjs.map +0 -7
  163. package/dist/lib/node-esm/chunk-KGYTIL33.mjs.map +0 -7
  164. package/dist/lib/node-esm/chunk-TN35DSTF.mjs.map +0 -7
  165. package/dist/lib/node-esm/chunk-X64SI6XO.mjs +0 -89
  166. package/dist/lib/node-esm/chunk-X64SI6XO.mjs.map +0 -7
  167. package/dist/lib/node-esm/intent-resolver-PPJKPHUQ.mjs.map +0 -7
  168. package/dist/lib/node-esm/react-surface-7ELFL7IO.mjs.map +0 -7
  169. /package/dist/lib/browser/{DeploymentDialog-QEKJ54ZB.mjs.map → DeploymentDialog-EMYG5BCD.mjs.map} +0 -0
  170. /package/dist/lib/browser/{settings-NK4XVS2E.mjs.map → settings-EOKSUGB6.mjs.map} +0 -0
  171. /package/dist/lib/node/{settings-7PVJBWC4.cjs.map → settings-425QHVGC.cjs.map} +0 -0
  172. /package/dist/lib/node-esm/{DeploymentDialog-BIXZ5Q57.mjs.map → DeploymentDialog-FGFA6MG2.mjs.map} +0 -0
  173. /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 { ObjectId, S } from '@dxos/echo-schema';
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 { TextType } from '@dxos/schema';
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: S.Schema,
75
- outputSchema: S.Schema,
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 S;
82
+ export const Schema;
82
83
 
83
84
  // Examples:
84
85
 
85
- S.String
86
- S.Number
87
- S.Boolean
88
- S.Struct({
89
- from: S.String.annotations({ description: 'The source currency' }),
90
- to: S.String.annotations({ description: 'The target currency' }),
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
- S.Array(S.String)
93
- S.Union(S.String, S.Number)
94
- S.optional(S.String)
95
- S.String.annotations({ description: 'The source currency' })
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: S.Struct({
117
- from: S.String.annotations({ description: 'The source currency' }),
118
- to: S.String.annotations({ description: 'The target currency' }),
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: S.Struct({
122
- rate: S.String.annotations({ description: 'The exchange 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: S.Struct({
147
- name: S.String.annotations({ description: 'The name of the script' }),
148
- code: S.String.annotations({
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(TextType, {
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: S.Struct({
180
- id: ObjectId,
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: S.Struct({
199
- id: ObjectId,
200
- code: S.String.annotations({
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 { isNotNullable } from 'effect/Predicate';
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/types';
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 { TextType } from '@dxos/schema';
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(TextType, { content })),
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/types';
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 AccessTokenType } from '@dxos/schema';
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: AccessTokenType; scriptTemplates: any } } =>
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 AccessTokenType } from '@dxos/schema';
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: AccessTokenType;
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/types';
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/types';
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/types';
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 { AccessTokenType } from '@dxos/schema';
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(AccessTokenType, { source: 'github.com' }));
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
 
@@ -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/types';
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
 
@@ -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/types';
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/types';
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
 
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  // @ts-ignore
6
- import { create, EchoObject, defineFunction, DXN, Filter, ObjectId, S } from 'dxos:functions';
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: S.String,
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(EchoObject({ typename: 'example.com/type/Message', version: '0.1.0' }));
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
 
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  // @ts-ignore
6
- import { defineFunction, S } from 'dxos:functions';
6
+ import { S, defineFunction } from 'dxos:functions';
7
7
  import {
8
8
  HttpClient,
9
9
  HttpClientRequest,
@@ -3,7 +3,8 @@
3
3
  //
4
4
 
5
5
  // @ts-ignore
6
- import { create, defineFunction, EchoObject, Filter, ObjectId, S } from 'dxos:functions';
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
- // TODO(ZaymonFC): Calculate this dynamically and expose a parameter.
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 = 'me', after = DEFAULT_AFTER, pageSize = 100 },
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
- const makeRequest = (path: string) =>
49
+ // NOTE: Google API bundles size is v. large and caused runtime issues.
50
+ const makeRequest = (url: string) =>
46
51
  pipe(
47
- path,
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
- const url = `https://gmail.googleapis.com/gmail/v1/users/${userId}/messages?maxResults=${pageSize}&q=${q}`;
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, id: 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.Schema.Type<typeof ActorRole>;
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.Schema.Type<typeof AbstractContentBlock>;
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.Schema.Type<typeof TextContentBlock>;
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.Schema.Type<typeof JsonContentBlock>;
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.Schema.Type<typeof ImageSource>;
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.Schema.Type<typeof ImageContentBlock>;
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.Schema.Type<typeof ReferenceContentBlock>;
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(EchoObject({ typename: 'dxos.org/type/Message', version: '0.1.0' }));
244
- type MessageType = S.Schema.Type<typeof MessageType>;
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>;
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { ScriptType } from '@dxos/functions/types';
5
+ import { ScriptType } from '@dxos/functions';
6
6
 
7
7
  import { SCRIPT_PLUGIN } from './meta';
8
8
 
package/src/types.ts CHANGED
@@ -2,11 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { TitleAnnotationId } from 'effect/SchemaAST';
5
+ import { Schema, SchemaAST } from 'effect';
6
6
 
7
7
  import { SpaceSchema } from '@dxos/client/echo';
8
- import { S } from '@dxos/echo-schema';
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 = S.Struct({
21
- name: S.optional(S.String),
19
+ export const CreateScriptSchema = Schema.Struct({
20
+ name: Schema.optional(Schema.String),
22
21
  // TODO(wittjosiah): Placeholder annotation?
23
- gistUrl: S.optional(S.String.annotations({ [TitleAnnotationId]: 'Import from Gist (url)' })),
24
- initialTemplateId: S.optional(S.String),
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 = S.Schema.Type<typeof CreateScriptSchema>;
26
+ export type CreateScriptProps = Schema.Schema.Type<typeof CreateScriptSchema>;
28
27
 
29
- export class Create extends S.TaggedClass<Create>()(`${SCRIPT_ACTION}/create`, {
30
- input: S.extend(CreateScriptSchema, S.Struct({ space: SpaceSchema })),
31
- output: S.Struct({
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 = S.mutable(
38
- S.Struct({
36
+ export const ScriptSettingsSchema = Schema.mutable(
37
+ Schema.Struct({
39
38
  editorInputMode: EditorInputMode,
40
39
  }),
41
40
  );
42
41
 
43
- export type ScriptSettingsProps = S.Schema.Type<typeof ScriptSettingsSchema>;
42
+ export type ScriptSettingsProps = Schema.Schema.Type<typeof ScriptSettingsSchema>;
@@ -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
- }