@dxos/plugin-script 0.7.5-main.9d26e3a → 0.7.5-main.9d2a38b

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 (213) hide show
  1. package/dist/lib/browser/{AutomationPanel-RFQAQ7NF.mjs → AutomationPanel-OOIRJFPJ.mjs} +3 -3
  2. package/dist/lib/browser/ScriptContainer-T2AOMDT3.mjs +685 -0
  3. package/dist/lib/browser/ScriptContainer-T2AOMDT3.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-C7VBULMK.mjs → chunk-5BU5ERNU.mjs} +3 -3
  5. package/dist/lib/browser/chunk-5BU5ERNU.mjs.map +7 -0
  6. package/dist/lib/browser/chunk-REL2R7SB.mjs +52 -0
  7. package/dist/lib/browser/chunk-REL2R7SB.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-4UTRJLQ3.mjs → chunk-SDHKTS6H.mjs} +2 -51
  9. package/dist/lib/browser/{chunk-4UTRJLQ3.mjs.map → chunk-SDHKTS6H.mjs.map} +4 -4
  10. package/dist/lib/browser/chunk-SIOGRRPF.mjs +224 -0
  11. package/dist/lib/browser/chunk-SIOGRRPF.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-K7KY6YMG.mjs → chunk-SJ4J527G.mjs} +2 -2
  13. package/dist/lib/browser/chunk-XPGBHZ3L.mjs +40 -0
  14. package/dist/lib/browser/chunk-XPGBHZ3L.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-ZM6T4HPR.mjs +15 -0
  16. package/dist/lib/browser/chunk-ZM6T4HPR.mjs.map +7 -0
  17. package/dist/lib/browser/compiler-HT53ILG7.mjs +84 -0
  18. package/dist/lib/browser/compiler-HT53ILG7.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +112 -288
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/intent-resolver-YPHT6HDZ.mjs +42 -0
  22. package/dist/lib/browser/intent-resolver-YPHT6HDZ.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/react-surface-GAWVYTJ5.mjs +67 -0
  25. package/dist/lib/browser/react-surface-GAWVYTJ5.mjs.map +7 -0
  26. package/dist/lib/browser/settings-YQQEU3DF.mjs +24 -0
  27. package/dist/lib/browser/settings-YQQEU3DF.mjs.map +7 -0
  28. package/dist/lib/browser/types.mjs +6 -4
  29. package/dist/lib/node/{AutomationPanel-5CJEF4MI.cjs → AutomationPanel-EPRDDR3A.cjs} +8 -8
  30. package/dist/lib/node/ScriptContainer-BV56I4OL.cjs +689 -0
  31. package/dist/lib/node/ScriptContainer-BV56I4OL.cjs.map +7 -0
  32. package/dist/lib/node/chunk-5V3XGLTR.cjs +252 -0
  33. package/dist/lib/node/chunk-5V3XGLTR.cjs.map +7 -0
  34. package/dist/lib/node/{chunk-PK3OQP5L.cjs → chunk-6VKZJ4MH.cjs} +26 -11
  35. package/dist/lib/node/chunk-6VKZJ4MH.cjs.map +7 -0
  36. package/dist/lib/node/{meta.cjs → chunk-A2DI2G4D.cjs} +12 -8
  37. package/dist/lib/node/chunk-A2DI2G4D.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-4INUJLXL.cjs → chunk-DQRAVZM7.cjs} +6 -6
  39. package/dist/lib/node/{chunk-6LYX73ZT.cjs → chunk-EFTZN5X7.cjs} +7 -7
  40. package/dist/lib/node/chunk-EFTZN5X7.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-WPP65EYS.cjs → chunk-T4TXCRN5.cjs} +6 -44
  42. package/dist/lib/node/chunk-T4TXCRN5.cjs.map +7 -0
  43. package/dist/lib/node/chunk-TJ4BTPOS.cjs +64 -0
  44. package/dist/lib/node/chunk-TJ4BTPOS.cjs.map +7 -0
  45. package/dist/lib/node/compiler-457ZR24G.cjs +104 -0
  46. package/dist/lib/node/compiler-457ZR24G.cjs.map +7 -0
  47. package/dist/lib/node/index.cjs +105 -276
  48. package/dist/lib/node/index.cjs.map +4 -4
  49. package/dist/lib/node/intent-resolver-SUAPE7H3.cjs +56 -0
  50. package/dist/lib/node/intent-resolver-SUAPE7H3.cjs.map +7 -0
  51. package/dist/lib/node/meta.json +1 -1
  52. package/dist/lib/node/react-surface-OMBMSFZT.cjs +86 -0
  53. package/dist/lib/node/react-surface-OMBMSFZT.cjs.map +7 -0
  54. package/dist/lib/node/settings-NGHDYAVK.cjs +38 -0
  55. package/dist/lib/node/settings-NGHDYAVK.cjs.map +7 -0
  56. package/dist/lib/node/types.cjs +6 -4
  57. package/dist/lib/node/types.cjs.map +2 -2
  58. package/dist/lib/node-esm/{AutomationPanel-7Y6REBNJ.mjs → AutomationPanel-DMLAGQS5.mjs} +3 -3
  59. package/dist/lib/node-esm/ScriptContainer-3S5VHJVR.mjs +686 -0
  60. package/dist/lib/node-esm/ScriptContainer-3S5VHJVR.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-675XSDRN.mjs +16 -0
  62. package/dist/lib/node-esm/chunk-675XSDRN.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-SLTZMY34.mjs → chunk-BHP545D7.mjs} +3 -3
  64. package/dist/lib/node-esm/chunk-BHP545D7.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-4SRPREUK.mjs → chunk-G76M6O46.mjs} +2 -51
  66. package/dist/lib/node-esm/{chunk-4SRPREUK.mjs.map → chunk-G76M6O46.mjs.map} +4 -4
  67. package/dist/lib/node-esm/chunk-JHGOPQVO.mjs +41 -0
  68. package/dist/lib/node-esm/chunk-JHGOPQVO.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-JJZYWSD7.mjs +54 -0
  70. package/dist/lib/node-esm/chunk-JJZYWSD7.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-XPIKUBGS.mjs +225 -0
  72. package/dist/lib/node-esm/chunk-XPIKUBGS.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-OFYGBUNI.mjs → chunk-XUWS7OTK.mjs} +2 -2
  74. package/dist/lib/node-esm/compiler-PEARFTFR.mjs +85 -0
  75. package/dist/lib/node-esm/compiler-PEARFTFR.mjs.map +7 -0
  76. package/dist/lib/node-esm/index.mjs +112 -288
  77. package/dist/lib/node-esm/index.mjs.map +4 -4
  78. package/dist/lib/node-esm/intent-resolver-SZJXQ3CW.mjs +43 -0
  79. package/dist/lib/node-esm/intent-resolver-SZJXQ3CW.mjs.map +7 -0
  80. package/dist/lib/node-esm/meta.json +1 -1
  81. package/dist/lib/node-esm/react-surface-J7NLV2V4.mjs +68 -0
  82. package/dist/lib/node-esm/react-surface-J7NLV2V4.mjs.map +7 -0
  83. package/dist/lib/node-esm/settings-XGXDY4NI.mjs +25 -0
  84. package/dist/lib/node-esm/settings-XGXDY4NI.mjs.map +7 -0
  85. package/dist/lib/node-esm/types.mjs +6 -4
  86. package/dist/types/src/ScriptPlugin.d.ts +1 -3
  87. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  89. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  90. package/dist/types/src/capabilities/compiler.d.ts +4 -0
  91. package/dist/types/src/capabilities/compiler.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/index.d.ts +6 -0
  93. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  95. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  97. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/settings.d.ts +4 -0
  99. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  100. package/dist/types/src/components/ScriptContainer.d.ts +10 -2
  101. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  102. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -1
  103. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -1
  104. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +11 -0
  105. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -0
  106. package/dist/types/src/components/{Toolbar/Toolbar.stories.d.ts → ScriptToolbar/ScriptToolbar.stories.d.ts} +1 -1
  107. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -0
  108. package/dist/types/src/components/ScriptToolbar/deploy.d.ts +48 -0
  109. package/dist/types/src/components/ScriptToolbar/deploy.d.ts.map +1 -0
  110. package/dist/types/src/components/ScriptToolbar/format.d.ts +25 -0
  111. package/dist/types/src/components/ScriptToolbar/format.d.ts.map +1 -0
  112. package/dist/types/src/components/ScriptToolbar/index.d.ts +2 -0
  113. package/dist/types/src/components/ScriptToolbar/index.d.ts.map +1 -0
  114. package/dist/types/src/components/ScriptToolbar/templateSelect.d.ts +31 -0
  115. package/dist/types/src/components/ScriptToolbar/templateSelect.d.ts.map +1 -0
  116. package/dist/types/src/components/ScriptToolbar/useToolbarAction.d.ts +14 -0
  117. package/dist/types/src/components/ScriptToolbar/useToolbarAction.d.ts.map +1 -0
  118. package/dist/types/src/components/ScriptToolbar/useToolbarState.d.ts +10 -0
  119. package/dist/types/src/components/ScriptToolbar/useToolbarState.d.ts.map +1 -0
  120. package/dist/types/src/components/ScriptToolbar/view.d.ts +33 -0
  121. package/dist/types/src/components/ScriptToolbar/view.d.ts.map +1 -0
  122. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +4 -2
  123. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  124. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/index.d.ts +1 -1
  126. package/dist/types/src/components/index.d.ts.map +1 -1
  127. package/dist/types/src/index.d.ts +2 -4
  128. package/dist/types/src/index.d.ts.map +1 -1
  129. package/dist/types/src/meta.d.ts +1 -2
  130. package/dist/types/src/meta.d.ts.map +1 -1
  131. package/dist/types/src/templates/email.d.ts +2 -1
  132. package/dist/types/src/templates/email.d.ts.map +1 -1
  133. package/dist/types/src/{templates.d.ts → templates/index.d.ts} +1 -1
  134. package/dist/types/src/templates/index.d.ts.map +1 -0
  135. package/dist/types/src/translations.d.ts +91 -0
  136. package/dist/types/src/translations.d.ts.map +1 -1
  137. package/dist/types/src/types.d.ts +14 -6
  138. package/dist/types/src/types.d.ts.map +1 -1
  139. package/dist/types/tsconfig.tsbuildinfo +1 -1
  140. package/package.json +44 -46
  141. package/src/ScriptPlugin.tsx +63 -91
  142. package/src/bundler/bundler.test.ts +2 -2
  143. package/src/capabilities/capabilities.ts +12 -0
  144. package/src/capabilities/compiler.ts +33 -0
  145. package/src/capabilities/index.ts +12 -0
  146. package/src/capabilities/intent-resolver.ts +43 -0
  147. package/src/capabilities/react-surface.tsx +54 -0
  148. package/src/capabilities/settings.ts +14 -0
  149. package/src/components/ScriptContainer.tsx +64 -9
  150. package/src/components/ScriptSettings/ScriptSettings.tsx +25 -1
  151. package/src/components/ScriptSettingsPanel.tsx +124 -50
  152. package/src/components/{Toolbar/Toolbar.stories.tsx → ScriptToolbar/ScriptToolbar.stories.tsx} +2 -2
  153. package/src/components/ScriptToolbar/ScriptToolbar.tsx +51 -0
  154. package/src/components/ScriptToolbar/deploy.ts +157 -0
  155. package/src/components/ScriptToolbar/format.ts +47 -0
  156. package/src/components/{Toolbar → ScriptToolbar}/index.ts +1 -1
  157. package/src/components/ScriptToolbar/templateSelect.ts +64 -0
  158. package/src/components/ScriptToolbar/useToolbarAction.ts +54 -0
  159. package/src/components/ScriptToolbar/useToolbarState.ts +16 -0
  160. package/src/components/ScriptToolbar/view.ts +52 -0
  161. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +2 -0
  162. package/src/components/TypescriptEditor/TypescriptEditor.tsx +73 -8
  163. package/src/index.ts +2 -6
  164. package/src/meta.ts +1 -1
  165. package/src/templates/email.ts +26 -23
  166. package/src/{templates.ts → templates/index.ts} +5 -5
  167. package/src/translations.ts +21 -0
  168. package/src/types.ts +19 -18
  169. package/dist/lib/browser/ScriptContainer-GDVBWFI7.mjs +0 -415
  170. package/dist/lib/browser/ScriptContainer-GDVBWFI7.mjs.map +0 -7
  171. package/dist/lib/browser/chunk-C7VBULMK.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-RQA3EB5K.mjs +0 -26
  173. package/dist/lib/browser/chunk-RQA3EB5K.mjs.map +0 -7
  174. package/dist/lib/browser/meta.mjs +0 -9
  175. package/dist/lib/browser/meta.mjs.map +0 -7
  176. package/dist/lib/node/ScriptContainer-YWXXNLG6.cjs +0 -426
  177. package/dist/lib/node/ScriptContainer-YWXXNLG6.cjs.map +0 -7
  178. package/dist/lib/node/chunk-6LYX73ZT.cjs.map +0 -7
  179. package/dist/lib/node/chunk-PK3OQP5L.cjs.map +0 -7
  180. package/dist/lib/node/chunk-WPP65EYS.cjs.map +0 -7
  181. package/dist/lib/node/meta.cjs.map +0 -7
  182. package/dist/lib/node-esm/ScriptContainer-BG2PHKEH.mjs +0 -416
  183. package/dist/lib/node-esm/ScriptContainer-BG2PHKEH.mjs.map +0 -7
  184. package/dist/lib/node-esm/chunk-H6BBLQ5Q.mjs +0 -27
  185. package/dist/lib/node-esm/chunk-H6BBLQ5Q.mjs.map +0 -7
  186. package/dist/lib/node-esm/chunk-SLTZMY34.mjs.map +0 -7
  187. package/dist/lib/node-esm/meta.mjs +0 -10
  188. package/dist/lib/node-esm/meta.mjs.map +0 -7
  189. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts +0 -12
  190. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts.map +0 -1
  191. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts +0 -6
  192. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +0 -1
  193. package/dist/types/src/components/ScriptBlock/index.d.ts +0 -2
  194. package/dist/types/src/components/ScriptBlock/index.d.ts.map +0 -1
  195. package/dist/types/src/components/ScriptEditor.d.ts +0 -9
  196. package/dist/types/src/components/ScriptEditor.d.ts.map +0 -1
  197. package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -23
  198. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
  199. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +0 -1
  200. package/dist/types/src/components/Toolbar/index.d.ts +0 -2
  201. package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
  202. package/dist/types/src/templates.d.ts.map +0 -1
  203. package/src/components/ScriptBlock/ScriptBlock.stories.tsx +0 -55
  204. package/src/components/ScriptBlock/ScriptBlock.tsx +0 -102
  205. package/src/components/ScriptBlock/index.ts +0 -5
  206. package/src/components/ScriptEditor.tsx +0 -193
  207. package/src/components/Toolbar/Toolbar.tsx +0 -177
  208. /package/dist/lib/browser/{AutomationPanel-RFQAQ7NF.mjs.map → AutomationPanel-OOIRJFPJ.mjs.map} +0 -0
  209. /package/dist/lib/browser/{chunk-K7KY6YMG.mjs.map → chunk-SJ4J527G.mjs.map} +0 -0
  210. /package/dist/lib/node/{AutomationPanel-5CJEF4MI.cjs.map → AutomationPanel-EPRDDR3A.cjs.map} +0 -0
  211. /package/dist/lib/node/{chunk-4INUJLXL.cjs.map → chunk-DQRAVZM7.cjs.map} +0 -0
  212. /package/dist/lib/node-esm/{AutomationPanel-7Y6REBNJ.mjs.map → AutomationPanel-DMLAGQS5.mjs.map} +0 -0
  213. /package/dist/lib/node-esm/{chunk-OFYGBUNI.mjs.map → chunk-XUWS7OTK.mjs.map} +0 -0
@@ -0,0 +1,686 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ Bundler
4
+ } from "./chunk-G76M6O46.mjs";
5
+ import {
6
+ templates
7
+ } from "./chunk-JJZYWSD7.mjs";
8
+ import {
9
+ DebugPanel
10
+ } from "./chunk-XUWS7OTK.mjs";
11
+ import {
12
+ SCRIPT_PLUGIN
13
+ } from "./chunk-BHP545D7.mjs";
14
+
15
+ // packages/plugins/experimental/plugin-script/src/components/ScriptContainer.tsx
16
+ import React3, { useMemo as useMemo3 } from "react";
17
+ import { createDocAccessor, getSpace as getSpace2 } from "@dxos/react-client/echo";
18
+ import { useIdentity } from "@dxos/react-client/halo";
19
+ import { createDataExtensions, listener, stackItemContentEditorClassNames } from "@dxos/react-ui-editor";
20
+ import { StackItem } from "@dxos/react-ui-stack";
21
+ import { mx } from "@dxos/react-ui-theme";
22
+
23
+ // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/ScriptToolbar.tsx
24
+ import React, { useCallback as useCallback5 } from "react";
25
+ import { fullyQualifiedId } from "@dxos/react-client/echo";
26
+ import { ElevationProvider } from "@dxos/react-ui";
27
+ import { stackItemContentToolbarClassNames } from "@dxos/react-ui-editor";
28
+ import { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
29
+
30
+ // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/deploy.ts
31
+ import { useCallback, useEffect, useMemo } from "react";
32
+ import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata, incrementSemverPatch, setUserFunctionUrlInMetadata, uploadWorkerFunction } from "@dxos/functions";
33
+ import { log } from "@dxos/log";
34
+ import { useClient } from "@dxos/react-client";
35
+ import { Filter, create, getMeta, getSpace, makeRef, useQuery } from "@dxos/react-client/echo";
36
+ import { useTranslation } from "@dxos/react-ui";
37
+ import { createMenuAction } from "@dxos/react-ui-menu";
38
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/deploy.ts";
39
+ var createDeploy = (state) => {
40
+ const errorItem = createMenuAction("error", {
41
+ label: state.error ?? [
42
+ "no error label",
43
+ {
44
+ ns: SCRIPT_PLUGIN
45
+ }
46
+ ],
47
+ icon: "ph--warning-circle--regular",
48
+ hidden: !state.error
49
+ });
50
+ const deployAction = createMenuAction("deploy", {
51
+ type: "deploy",
52
+ label: [
53
+ state.deploying ? "pending label" : "deploy label",
54
+ {
55
+ ns: SCRIPT_PLUGIN
56
+ }
57
+ ],
58
+ icon: state.deploying ? "ph--spinner-gap--regular" : "ph--cloud-arrow-up--regular",
59
+ disabled: state.deploying,
60
+ classNames: state.deploying ? "[&_svg]:animate-spin" : ""
61
+ });
62
+ const copyAction = createMenuAction("copy", {
63
+ type: "copy",
64
+ label: [
65
+ "copy link label",
66
+ {
67
+ ns: SCRIPT_PLUGIN
68
+ }
69
+ ],
70
+ icon: "ph--link--regular",
71
+ disabled: !state.functionUrl
72
+ });
73
+ return {
74
+ nodes: [
75
+ errorItem,
76
+ deployAction,
77
+ copyAction
78
+ ],
79
+ edges: [
80
+ {
81
+ source: "root",
82
+ target: "error"
83
+ },
84
+ {
85
+ source: "root",
86
+ target: "deploy"
87
+ },
88
+ {
89
+ source: "root",
90
+ target: "copy"
91
+ }
92
+ ]
93
+ };
94
+ };
95
+ var useDeployDeps = ({ state, script }) => {
96
+ const space = getSpace(script);
97
+ const [fn] = useQuery(space, Filter.schema(FunctionType, {
98
+ source: script
99
+ }));
100
+ const client = useClient();
101
+ const existingFunctionUrl = useMemo(() => fn && getUserFunctionUrlInMetadata(getMeta(fn)), [
102
+ fn
103
+ ]);
104
+ return {
105
+ space,
106
+ fn,
107
+ client,
108
+ existingFunctionUrl
109
+ };
110
+ };
111
+ var useDeployState = ({ state, script }) => {
112
+ const { space, client, existingFunctionUrl } = useDeployDeps({
113
+ state,
114
+ script
115
+ });
116
+ useEffect(() => {
117
+ if (!existingFunctionUrl) {
118
+ return;
119
+ }
120
+ state.functionUrl = getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? "", {
121
+ spaceId: space?.id
122
+ });
123
+ }, [
124
+ existingFunctionUrl,
125
+ space
126
+ ]);
127
+ useEffect(() => {
128
+ state.deployed = Boolean(existingFunctionUrl) && !script.changed;
129
+ }, [
130
+ script.changed,
131
+ existingFunctionUrl
132
+ ]);
133
+ };
134
+ var useDeployHandler = ({ state, script }) => {
135
+ const { space, fn, client, existingFunctionUrl } = useDeployDeps({
136
+ state,
137
+ script
138
+ });
139
+ const { t } = useTranslation(SCRIPT_PLUGIN);
140
+ return useCallback(async () => {
141
+ if (!script.source || !space) {
142
+ return;
143
+ }
144
+ state.error = void 0;
145
+ state.deploying = true;
146
+ try {
147
+ const existingFunctionId = existingFunctionUrl?.split("/").at(-1);
148
+ const bundler = new Bundler({
149
+ platform: "browser",
150
+ sandboxedModules: [],
151
+ remoteModules: {}
152
+ });
153
+ const buildResult = await bundler.bundle(script.source.target.content);
154
+ if (buildResult.error || !buildResult.bundle) {
155
+ throw buildResult.error;
156
+ }
157
+ const { functionId, version, meta } = await uploadWorkerFunction({
158
+ client,
159
+ spaceId: space.id,
160
+ version: fn ? incrementSemverPatch(fn.version) : "0.0.1",
161
+ functionId: existingFunctionId,
162
+ source: buildResult.bundle
163
+ });
164
+ if (functionId === void 0 || version === void 0) {
165
+ throw new Error(`Upload didn't return expected data: functionId=${functionId}, version=${version}`);
166
+ }
167
+ log.info("function uploaded", {
168
+ functionId,
169
+ version
170
+ }, {
171
+ F: __dxlog_file,
172
+ L: 124,
173
+ S: void 0,
174
+ C: (f, a) => f(...a)
175
+ });
176
+ if (fn) {
177
+ fn.version = version;
178
+ }
179
+ const deployedFunction = fn ?? space.db.add(create(FunctionType, {
180
+ name: functionId,
181
+ version,
182
+ source: makeRef(script)
183
+ }));
184
+ script.changed = false;
185
+ if (meta.inputSchema) {
186
+ deployedFunction.inputSchema = meta.inputSchema;
187
+ } else {
188
+ log.verbose("no input schema in function metadata", {
189
+ functionId
190
+ }, {
191
+ F: __dxlog_file,
192
+ L: 137,
193
+ S: void 0,
194
+ C: (f, a) => f(...a)
195
+ });
196
+ }
197
+ setUserFunctionUrlInMetadata(getMeta(deployedFunction), `/${space.id}/${functionId}`);
198
+ state.view = "split";
199
+ } catch (err) {
200
+ log.catch(err, void 0, {
201
+ F: __dxlog_file,
202
+ L: 144,
203
+ S: void 0,
204
+ C: (f, a) => f(...a)
205
+ });
206
+ state.error = t("upload failed label");
207
+ }
208
+ state.deploying = false;
209
+ }, [
210
+ fn,
211
+ client,
212
+ t,
213
+ existingFunctionUrl,
214
+ script,
215
+ script.name,
216
+ script.source,
217
+ space?.id ?? null
218
+ ]);
219
+ };
220
+ var useCopyHandler = ({ state }) => useCallback(async () => {
221
+ if (!state.functionUrl) {
222
+ return;
223
+ }
224
+ await navigator.clipboard.writeText(state.functionUrl);
225
+ }, [
226
+ state.functionUrl
227
+ ]);
228
+
229
+ // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/format.ts
230
+ import { format } from "prettier";
231
+ import prettierPluginEstree from "prettier/plugins/estree";
232
+ import prettierPluginTypescript from "prettier/plugins/typescript";
233
+ import { useCallback as useCallback2 } from "react";
234
+ import { log as log2 } from "@dxos/log";
235
+ import { createMenuAction as createMenuAction2 } from "@dxos/react-ui-menu";
236
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/format.ts";
237
+ var createFormat = () => {
238
+ const formatAction = createMenuAction2("format", {
239
+ label: [
240
+ "format label",
241
+ {
242
+ ns: SCRIPT_PLUGIN
243
+ }
244
+ ],
245
+ icon: "ph--magic-wand--regular"
246
+ });
247
+ return {
248
+ nodes: [
249
+ formatAction
250
+ ],
251
+ edges: [
252
+ {
253
+ source: "root",
254
+ target: "format"
255
+ }
256
+ ]
257
+ };
258
+ };
259
+ var useFormatHandler = ({ script }) => useCallback2(async () => {
260
+ if (!script.source) {
261
+ return;
262
+ }
263
+ try {
264
+ script.source.target.content = await format(script.source.target.content, {
265
+ parser: "typescript",
266
+ plugins: [
267
+ prettierPluginEstree,
268
+ prettierPluginTypescript
269
+ ],
270
+ semi: true,
271
+ singleQuote: true
272
+ });
273
+ } catch (err) {
274
+ log2.catch(err, void 0, {
275
+ F: __dxlog_file2,
276
+ L: 45,
277
+ S: void 0,
278
+ C: (f, a) => f(...a)
279
+ });
280
+ }
281
+ }, [
282
+ script.source
283
+ ]);
284
+
285
+ // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/templateSelect.ts
286
+ import { useCallback as useCallback3 } from "react";
287
+ import { FUNCTIONS_PRESET_META_KEY } from "@dxos/functions";
288
+ import { getMeta as getMeta2 } from "@dxos/live-object";
289
+ import { createMenuItemGroup, createMenuAction as createMenuAction3 } from "@dxos/react-ui-menu";
290
+ var createTemplateSelectGroup = () => {
291
+ return createMenuItemGroup("template-select", {
292
+ label: [
293
+ "template select group label",
294
+ {
295
+ ns: SCRIPT_PLUGIN
296
+ }
297
+ ],
298
+ variant: "dropdownMenu"
299
+ });
300
+ };
301
+ var createTemplateSelectActions = () => {
302
+ return templates.map((template) => {
303
+ return createMenuAction3(`template--${template.id}`, {
304
+ label: template.name,
305
+ value: template.id,
306
+ type: "template"
307
+ });
308
+ });
309
+ };
310
+ var createTemplateSelect = () => {
311
+ const templateSelectGroup = createTemplateSelectGroup();
312
+ const templateSelectActions = createTemplateSelectActions();
313
+ return {
314
+ nodes: [
315
+ templateSelectGroup,
316
+ ...templateSelectActions
317
+ ],
318
+ edges: [
319
+ {
320
+ source: "root",
321
+ target: "template-select"
322
+ },
323
+ ...templateSelectActions.map((action) => ({
324
+ source: "template-select",
325
+ target: action.id
326
+ }))
327
+ ]
328
+ };
329
+ };
330
+ var useTemplateSelectHandler = ({ script }) => {
331
+ return useCallback3((templateId) => {
332
+ const template = templates.find((template2) => template2.id === templateId);
333
+ if (template) {
334
+ script.name = template.name;
335
+ script.source.target.content = template.source;
336
+ const metaKeys = getMeta2(script).keys;
337
+ const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);
338
+ if (oldPresetIndex >= 0) {
339
+ metaKeys.splice(oldPresetIndex, 1);
340
+ }
341
+ if (template.presetId) {
342
+ metaKeys.push({
343
+ source: FUNCTIONS_PRESET_META_KEY,
344
+ id: template.presetId
345
+ });
346
+ }
347
+ }
348
+ }, [
349
+ script
350
+ ]);
351
+ };
352
+
353
+ // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/useToolbarAction.ts
354
+ import { useCallback as useCallback4 } from "react";
355
+ import { log as log3 } from "@dxos/log";
356
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/useToolbarAction.ts";
357
+ var useToolbarAction = (props) => {
358
+ const handleTemplateSelect = useTemplateSelectHandler(props);
359
+ const handleFormat = useFormatHandler(props);
360
+ const handleDeploy = useDeployHandler(props);
361
+ const handleCopy = useCopyHandler(props);
362
+ return useCallback4((action) => {
363
+ switch (action.properties.type) {
364
+ case "template":
365
+ handleTemplateSelect(action.properties.value);
366
+ break;
367
+ case "view":
368
+ props.state.view = action.properties.value;
369
+ break;
370
+ case "format":
371
+ void handleFormat();
372
+ break;
373
+ case "deploy":
374
+ void handleDeploy();
375
+ break;
376
+ case "copy":
377
+ void handleCopy();
378
+ break;
379
+ default:
380
+ log3.error("Unknown action type", action, {
381
+ F: __dxlog_file3,
382
+ L: 49,
383
+ S: void 0,
384
+ C: (f, a) => f(...a)
385
+ });
386
+ }
387
+ }, [
388
+ handleTemplateSelect,
389
+ handleFormat,
390
+ handleDeploy,
391
+ handleCopy
392
+ ]);
393
+ };
394
+
395
+ // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/view.ts
396
+ import { createMenuAction as createMenuAction4, createMenuItemGroup as createMenuItemGroup2 } from "@dxos/react-ui-menu";
397
+ var views = {
398
+ editor: "ph--code--regular",
399
+ split: "ph--square-split-vertical--regular",
400
+ debug: "ph--bug--regular"
401
+ };
402
+ var createViewGroupItem = (state) => {
403
+ return createMenuItemGroup2("view", {
404
+ label: [
405
+ "view group label",
406
+ {
407
+ ns: SCRIPT_PLUGIN
408
+ }
409
+ ],
410
+ variant: "dropdownMenu",
411
+ applyActive: true,
412
+ value: state.view
413
+ });
414
+ };
415
+ var createViewActions = (state) => {
416
+ return Object.entries(views).map(([viewType, icon]) => {
417
+ return createMenuAction4(`view--${viewType}`, {
418
+ type: "view",
419
+ value: viewType,
420
+ label: [
421
+ `view ${viewType} label`,
422
+ {
423
+ ns: SCRIPT_PLUGIN
424
+ }
425
+ ],
426
+ icon,
427
+ checked: state.view === viewType
428
+ });
429
+ });
430
+ };
431
+ var createView = (state) => {
432
+ const viewGroupItem = createViewGroupItem(state);
433
+ const viewActions = createViewActions(state);
434
+ return {
435
+ nodes: [
436
+ viewGroupItem,
437
+ ...viewActions
438
+ ],
439
+ edges: [
440
+ {
441
+ source: "root",
442
+ target: "view"
443
+ },
444
+ ...viewActions.map((action) => ({
445
+ source: "view",
446
+ target: action.id
447
+ }))
448
+ ]
449
+ };
450
+ };
451
+
452
+ // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/ScriptToolbar.tsx
453
+ var createToolbar = (state) => {
454
+ const templateSelect = createTemplateSelect();
455
+ const format2 = createFormat();
456
+ const gap = createGapSeparator();
457
+ const deploy = createDeploy(state);
458
+ const view = createView(state);
459
+ return {
460
+ nodes: [
461
+ ...templateSelect.nodes,
462
+ ...format2.nodes,
463
+ ...gap.nodes,
464
+ ...deploy.nodes,
465
+ ...view.nodes
466
+ ],
467
+ edges: [
468
+ ...templateSelect.edges,
469
+ ...format2.edges,
470
+ ...gap.edges,
471
+ ...deploy.edges,
472
+ ...view.edges
473
+ ]
474
+ };
475
+ };
476
+ var ScriptToolbar = ({ script, role, state, classNames }) => {
477
+ const handleAction = useToolbarAction({
478
+ state,
479
+ script
480
+ });
481
+ const toolbarCreator = useCallback5(() => createToolbar(state), [
482
+ state
483
+ ]);
484
+ const menu = useMenuActions(toolbarCreator);
485
+ return /* @__PURE__ */ React.createElement("div", {
486
+ role: "none",
487
+ className: stackItemContentToolbarClassNames(role)
488
+ }, /* @__PURE__ */ React.createElement(ElevationProvider, {
489
+ elevation: role === "section" ? "positioned" : "base"
490
+ }, /* @__PURE__ */ React.createElement(MenuProvider, {
491
+ ...menu,
492
+ onAction: handleAction,
493
+ attendableId: fullyQualifiedId(script)
494
+ }, /* @__PURE__ */ React.createElement(ToolbarMenu, {
495
+ classNames
496
+ }))));
497
+ };
498
+
499
+ // packages/plugins/experimental/plugin-script/src/components/ScriptToolbar/useToolbarState.ts
500
+ import { useMemo as useMemo2 } from "react";
501
+ import { create as create2 } from "@dxos/live-object";
502
+ var useToolbarState = (initialState = {}) => {
503
+ return useMemo2(() => create2(initialState), []);
504
+ };
505
+
506
+ // packages/plugins/experimental/plugin-script/src/components/TypescriptEditor/TypescriptEditor.tsx
507
+ import { javascript } from "@codemirror/lang-javascript";
508
+ import { defaultHighlightStyle } from "@codemirror/language";
509
+ import { Prec } from "@codemirror/state";
510
+ import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
511
+ import { keymap } from "@codemirror/view";
512
+ import { tags } from "@lezer/highlight";
513
+ import { continueKeymap } from "@valtown/codemirror-continue";
514
+ import { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from "@valtown/codemirror-ts";
515
+ import React2 from "react";
516
+ import { useThemeContext } from "@dxos/react-ui";
517
+ import { autocomplete, createBasicExtensions, createThemeExtensions, editorFullWidth, editorMonospace, EditorView, folding, InputModeExtensions, useTextEditor } from "@dxos/react-ui-editor";
518
+ import { nonNullable } from "@dxos/util";
519
+ var TypescriptEditor = ({ id, env, className, initialValue, extensions, scrollTo, selection, toolbar, inputMode = "vscode" }) => {
520
+ const { themeMode } = useThemeContext();
521
+ const { parentRef, focusAttributes } = useTextEditor(() => ({
522
+ id,
523
+ initialValue,
524
+ extensions: [
525
+ extensions,
526
+ createBasicExtensions({
527
+ highlightActiveLine: true,
528
+ indentWithTab: true,
529
+ lineNumbers: true,
530
+ lineWrapping: false,
531
+ scrollPastEnd: true
532
+ }),
533
+ createThemeExtensions({
534
+ themeMode,
535
+ syntaxHighlighting: true,
536
+ slots: {
537
+ content: {
538
+ className: editorFullWidth
539
+ }
540
+ }
541
+ }),
542
+ // NOTE: Not using default editor gutter because folding for code works best right beside text.
543
+ EditorView.theme({
544
+ ".cm-gutters": {
545
+ // Match margin from content.
546
+ marginTop: "16px"
547
+ }
548
+ }),
549
+ InputModeExtensions[inputMode],
550
+ folding(),
551
+ // Continues block comments when you hit Enter.
552
+ Prec.high(keymap.of(continueKeymap)),
553
+ // TODO(burdon): Factor out.
554
+ [
555
+ editorMonospace,
556
+ javascript({
557
+ typescript: true
558
+ }),
559
+ // https://github.com/val-town/codemirror-ts
560
+ autocomplete({
561
+ override: env ? [
562
+ tsAutocomplete()
563
+ ] : []
564
+ }),
565
+ env ? [
566
+ tsFacet.of({
567
+ env,
568
+ path: `/src/${id}.ts`
569
+ }),
570
+ tsSync(),
571
+ tsLinter(),
572
+ tsHover({
573
+ renderTooltip: createTooltipRenderer(themeMode)
574
+ })
575
+ ] : []
576
+ ]
577
+ ].filter(nonNullable),
578
+ selection,
579
+ scrollTo
580
+ }), [
581
+ id,
582
+ extensions,
583
+ themeMode,
584
+ inputMode,
585
+ selection,
586
+ scrollTo
587
+ ]);
588
+ return /* @__PURE__ */ React2.createElement("div", {
589
+ ref: parentRef,
590
+ "data-toolbar": toolbar ? "enabled" : "disabled",
591
+ className,
592
+ ...focusAttributes
593
+ });
594
+ };
595
+ var createTooltipRenderer = (themeMode) => {
596
+ const theme = themeMode === "dark" ? oneDarkHighlightStyle : defaultHighlightStyle;
597
+ const classFromKind = (_kind) => {
598
+ const kind = _kind.endsWith("Name") ? "name" : _kind;
599
+ const validTag = kind in tags;
600
+ if (!validTag) {
601
+ return "";
602
+ }
603
+ const tag = tags[kind];
604
+ if (typeof tag === "function") {
605
+ return "";
606
+ }
607
+ return theme.style([
608
+ tag
609
+ ]) ?? "";
610
+ };
611
+ return (info) => {
612
+ const div = document.createElement("div");
613
+ div.className = "p-1 rounded border border-separator bg-base xs:max-w-80 max-w-lg";
614
+ if (info.quickInfo?.displayParts) {
615
+ for (const part of info.quickInfo.displayParts) {
616
+ const span = div.appendChild(document.createElement("span"));
617
+ span.className = classFromKind(part.kind);
618
+ span.innerText = part.text;
619
+ }
620
+ }
621
+ return {
622
+ dom: div
623
+ };
624
+ };
625
+ };
626
+
627
+ // packages/plugins/experimental/plugin-script/src/components/ScriptContainer.tsx
628
+ var ScriptContainer = ({ role, classNames, script, settings, env }) => {
629
+ const identity = useIdentity();
630
+ const space = getSpace2(script);
631
+ const extensions = useMemo3(() => [
632
+ listener({
633
+ onChange: (text) => {
634
+ if (script.source.target && script.source.target.content !== text) {
635
+ script.changed = true;
636
+ }
637
+ }
638
+ }),
639
+ createDataExtensions({
640
+ id: script.id,
641
+ text: script.source.target && createDocAccessor(script.source.target, [
642
+ "content"
643
+ ]),
644
+ space,
645
+ identity
646
+ })
647
+ ], [
648
+ script,
649
+ script.source.target,
650
+ space,
651
+ identity
652
+ ]);
653
+ const state = useToolbarState({
654
+ view: "split"
655
+ });
656
+ useDeployState({
657
+ state,
658
+ script
659
+ });
660
+ return /* @__PURE__ */ React3.createElement(StackItem.Content, {
661
+ toolbar: true
662
+ }, /* @__PURE__ */ React3.createElement(ScriptToolbar, {
663
+ state,
664
+ role,
665
+ script
666
+ }), /* @__PURE__ */ React3.createElement("div", {
667
+ role: "none",
668
+ className: mx("flex flex-col w-full overflow-hidden divide-y divide-separator", classNames)
669
+ }, state.view !== "debug" && /* @__PURE__ */ React3.createElement(TypescriptEditor, {
670
+ id: script.id,
671
+ env,
672
+ initialValue: script.source?.target?.content,
673
+ extensions,
674
+ className: stackItemContentEditorClassNames(role),
675
+ inputMode: settings.editorInputMode,
676
+ toolbar: true
677
+ }), state.view !== "editor" && /* @__PURE__ */ React3.createElement(DebugPanel, {
678
+ functionUrl: state.functionUrl
679
+ })));
680
+ };
681
+ var ScriptContainer_default = ScriptContainer;
682
+ export {
683
+ ScriptContainer,
684
+ ScriptContainer_default as default
685
+ };
686
+ //# sourceMappingURL=ScriptContainer-3S5VHJVR.mjs.map