@dxos/plugin-script 0.8.4-main.dedc0f3 → 0.8.4-main.e8ec1fe

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 (285) hide show
  1. package/dist/lib/browser/DeploymentDialog-MZX4T77L.mjs +14 -0
  2. package/dist/lib/browser/NotebookContainer-RTESC4OV.mjs +817 -0
  3. package/dist/lib/browser/NotebookContainer-RTESC4OV.mjs.map +7 -0
  4. package/dist/lib/browser/ScriptContainer-T2BAZDJ4.mjs +147 -0
  5. package/dist/lib/browser/ScriptContainer-T2BAZDJ4.mjs.map +7 -0
  6. package/dist/lib/browser/{app-graph-builder-IABOSTBK.mjs → app-graph-builder-2WR2ATTJ.mjs} +11 -9
  7. package/dist/lib/browser/app-graph-builder-2WR2ATTJ.mjs.map +7 -0
  8. package/dist/lib/browser/{blueprint-definition-AR7ITBCD.mjs → blueprint-definition-6PZWZM2Y.mjs} +5 -3
  9. package/dist/lib/{node-esm/blueprint-definition-TJY4TX6S.mjs.map → browser/blueprint-definition-6PZWZM2Y.mjs.map} +1 -1
  10. package/dist/lib/browser/chunk-2G2NA6DQ.mjs +88 -0
  11. package/dist/lib/browser/chunk-2G2NA6DQ.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-YCZPTTFO.mjs → chunk-3IJASGG5.mjs} +23 -21
  13. package/dist/lib/browser/chunk-3IJASGG5.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-4M7U2WVT.mjs +304 -0
  15. package/dist/lib/browser/chunk-4M7U2WVT.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-5JSNQYZZ.mjs +517 -0
  17. package/dist/lib/browser/chunk-5JSNQYZZ.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-QYAREHGH.mjs → chunk-EB6AXFXO.mjs} +8 -5
  19. package/dist/lib/browser/chunk-EB6AXFXO.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-GZKWMME3.mjs → chunk-GAFCKEII.mjs} +144 -54
  21. package/dist/lib/browser/chunk-GAFCKEII.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  23. package/dist/lib/browser/chunk-LNNCD2H4.mjs +102 -0
  24. package/dist/lib/browser/chunk-LNNCD2H4.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-M6KJPUJK.mjs +111 -0
  26. package/dist/lib/browser/chunk-M6KJPUJK.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-5TVBECWH.mjs → chunk-UOQ6NCH3.mjs} +2 -2
  28. package/dist/lib/browser/{compiler-2HJH34GM.mjs → compiler-4KHRSX7J.mjs} +13 -25
  29. package/dist/lib/browser/compiler-4KHRSX7J.mjs.map +7 -0
  30. package/dist/lib/browser/index.mjs +104 -41
  31. package/dist/lib/browser/index.mjs.map +3 -3
  32. package/dist/lib/browser/{intent-resolver-F4YSRPJI.mjs → intent-resolver-AFJ575VK.mjs} +38 -23
  33. package/dist/lib/browser/intent-resolver-AFJ575VK.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/{react-surface-BBHFU6MI.mjs → react-surface-QEQ3QUQA.mjs} +45 -21
  36. package/dist/lib/browser/react-surface-QEQ3QUQA.mjs.map +7 -0
  37. package/dist/lib/browser/{settings-KCTBK5TY.mjs → settings-LNLSTZM4.mjs} +10 -8
  38. package/dist/lib/browser/settings-LNLSTZM4.mjs.map +7 -0
  39. package/dist/lib/browser/templates/index.mjs +2 -1
  40. package/dist/lib/browser/types/index.mjs +8 -4
  41. package/dist/lib/node-esm/DeploymentDialog-GL5AUWMR.mjs +15 -0
  42. package/dist/lib/node-esm/DeploymentDialog-GL5AUWMR.mjs.map +7 -0
  43. package/dist/lib/node-esm/NotebookContainer-SVD3A3D6.mjs +818 -0
  44. package/dist/lib/node-esm/NotebookContainer-SVD3A3D6.mjs.map +7 -0
  45. package/dist/lib/node-esm/ScriptContainer-2CE3H3JJ.mjs +148 -0
  46. package/dist/lib/node-esm/ScriptContainer-2CE3H3JJ.mjs.map +7 -0
  47. package/dist/lib/node-esm/{app-graph-builder-CQTTAYHP.mjs → app-graph-builder-NCVLUL5R.mjs} +11 -9
  48. package/dist/lib/node-esm/app-graph-builder-NCVLUL5R.mjs.map +7 -0
  49. package/dist/lib/node-esm/{blueprint-definition-TJY4TX6S.mjs → blueprint-definition-5R6YCSZZ.mjs} +4 -3
  50. package/dist/lib/{browser/blueprint-definition-AR7ITBCD.mjs.map → node-esm/blueprint-definition-5R6YCSZZ.mjs.map} +1 -1
  51. package/dist/lib/node-esm/{chunk-35M3CHYE.mjs → chunk-55JZVM6K.mjs} +2 -2
  52. package/dist/lib/node-esm/chunk-57JA6XL5.mjs +90 -0
  53. package/dist/lib/node-esm/chunk-57JA6XL5.mjs.map +7 -0
  54. package/dist/lib/node-esm/chunk-HDKR5WCD.mjs +113 -0
  55. package/dist/lib/node-esm/chunk-HDKR5WCD.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  57. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-AHXJ6NQU.mjs → chunk-IBV2DR36.mjs} +8 -5
  59. package/dist/lib/node-esm/chunk-IBV2DR36.mjs.map +7 -0
  60. package/dist/lib/node-esm/chunk-IQTBVH4L.mjs +518 -0
  61. package/dist/lib/node-esm/chunk-IQTBVH4L.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-HUHVIOL5.mjs → chunk-KJKZ4KNO.mjs} +144 -54
  63. package/dist/lib/node-esm/chunk-KJKZ4KNO.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-NNHWLRHT.mjs +103 -0
  65. package/dist/lib/node-esm/chunk-NNHWLRHT.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-ZA36GO4T.mjs → chunk-RIE676OW.mjs} +23 -21
  67. package/dist/lib/node-esm/chunk-RIE676OW.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-YRTA4EHU.mjs +305 -0
  69. package/dist/lib/node-esm/chunk-YRTA4EHU.mjs.map +7 -0
  70. package/dist/lib/node-esm/{compiler-7SP27RA6.mjs → compiler-DU5NQISX.mjs} +13 -25
  71. package/dist/lib/node-esm/compiler-DU5NQISX.mjs.map +7 -0
  72. package/dist/lib/node-esm/index.mjs +104 -41
  73. package/dist/lib/node-esm/index.mjs.map +3 -3
  74. package/dist/lib/node-esm/{intent-resolver-CGQYRWWD.mjs → intent-resolver-A5VVK746.mjs} +38 -23
  75. package/dist/lib/node-esm/intent-resolver-A5VVK746.mjs.map +7 -0
  76. package/dist/lib/node-esm/meta.json +1 -1
  77. package/dist/lib/node-esm/{react-surface-UWIWPKZD.mjs → react-surface-U77YT7VF.mjs} +45 -21
  78. package/dist/lib/node-esm/react-surface-U77YT7VF.mjs.map +7 -0
  79. package/dist/lib/node-esm/{settings-DXZ334A3.mjs → settings-IUFMOCXY.mjs} +10 -8
  80. package/dist/lib/node-esm/settings-IUFMOCXY.mjs.map +7 -0
  81. package/dist/lib/node-esm/templates/index.mjs +2 -1
  82. package/dist/lib/node-esm/types/index.mjs +8 -4
  83. package/dist/types/src/ScriptPlugin.d.ts +1 -1
  84. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/blueprint-definition.d.ts +1 -1
  88. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  90. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +3 -3
  91. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  92. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +110 -7
  93. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +1 -1
  95. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  96. package/dist/types/src/components/NotebookContainer.d.ts +10 -0
  97. package/dist/types/src/components/NotebookContainer.d.ts.map +1 -0
  98. package/dist/types/src/components/NotebookContainer.stories.d.ts +251 -0
  99. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +1 -0
  100. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +15 -0
  101. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -0
  102. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts +9 -0
  103. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts.map +1 -0
  104. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +14 -0
  105. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -0
  106. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +245 -0
  107. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -0
  108. package/dist/types/src/components/NotebookStack/index.d.ts +3 -0
  109. package/dist/types/src/components/NotebookStack/index.d.ts.map +1 -0
  110. package/dist/types/src/components/ScriptContainer.d.ts +4 -4
  111. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  112. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +5 -6
  113. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  114. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +237 -2
  115. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +2 -2
  117. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  118. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +2 -2
  119. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  120. package/dist/types/src/components/TestPanel/TestContainer.d.ts +2 -2
  121. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +1 -1
  122. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  123. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +4 -2
  124. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  125. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +3 -3
  126. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/index.d.ts +2 -0
  128. package/dist/types/src/components/index.d.ts.map +1 -1
  129. package/dist/types/src/events.d.ts.map +1 -1
  130. package/dist/types/src/hooks/deploy.d.ts +15 -13
  131. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  132. package/dist/types/src/hooks/format.d.ts +2 -2
  133. package/dist/types/src/hooks/format.d.ts.map +1 -1
  134. package/dist/types/src/hooks/template.d.ts +4 -14
  135. package/dist/types/src/hooks/template.d.ts.map +1 -1
  136. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  137. package/dist/types/src/index.d.ts +1 -0
  138. package/dist/types/src/index.d.ts.map +1 -1
  139. package/dist/types/src/meta.d.ts +0 -1
  140. package/dist/types/src/meta.d.ts.map +1 -1
  141. package/dist/types/src/notebook/compute-graph.d.ts +45 -0
  142. package/dist/types/src/notebook/compute-graph.d.ts.map +1 -0
  143. package/dist/types/src/notebook/compute-graph.test.d.ts +2 -0
  144. package/dist/types/src/notebook/compute-graph.test.d.ts.map +1 -0
  145. package/dist/types/src/notebook/eval.d.ts +13 -0
  146. package/dist/types/src/notebook/eval.d.ts.map +1 -0
  147. package/dist/types/src/notebook/index.d.ts +2 -0
  148. package/dist/types/src/notebook/index.d.ts.map +1 -0
  149. package/dist/types/src/notebook/vfs-parser.d.ts +74 -0
  150. package/dist/types/src/notebook/vfs-parser.d.ts.map +1 -0
  151. package/dist/types/src/notebook/vfs-parser.test.d.ts +2 -0
  152. package/dist/types/src/notebook/vfs-parser.test.d.ts.map +1 -0
  153. package/dist/types/src/templates/chess.d.ts.map +1 -1
  154. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  155. package/dist/types/src/templates/discord.d.ts.map +1 -1
  156. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  157. package/dist/types/src/templates/forex.d.ts.map +1 -1
  158. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  159. package/dist/types/src/templates/index.d.ts +43 -1
  160. package/dist/types/src/templates/index.d.ts.map +1 -1
  161. package/dist/types/src/templates/{echo.d.ts → ping.d.ts} +1 -1
  162. package/dist/types/src/templates/ping.d.ts.map +1 -0
  163. package/dist/types/src/testing/data.d.ts +3 -0
  164. package/dist/types/src/testing/data.d.ts.map +1 -0
  165. package/dist/types/src/testing/index.d.ts +2 -0
  166. package/dist/types/src/testing/index.d.ts.map +1 -0
  167. package/dist/types/src/translations.d.ts +29 -5
  168. package/dist/types/src/translations.d.ts.map +1 -1
  169. package/dist/types/src/types/Notebook.d.ts +31 -0
  170. package/dist/types/src/types/Notebook.d.ts.map +1 -0
  171. package/dist/types/src/types/actions.d.ts +54 -0
  172. package/dist/types/src/types/actions.d.ts.map +1 -0
  173. package/dist/types/src/types/index.d.ts +3 -1
  174. package/dist/types/src/types/index.d.ts.map +1 -1
  175. package/dist/types/src/types/types.d.ts +6 -0
  176. package/dist/types/src/types/types.d.ts.map +1 -0
  177. package/dist/types/src/util/deploy.d.ts +4 -4
  178. package/dist/types/src/util/deploy.d.ts.map +1 -1
  179. package/dist/types/src/util/functions.d.ts +6 -3
  180. package/dist/types/src/util/functions.d.ts.map +1 -1
  181. package/dist/types/tsconfig.tsbuildinfo +1 -1
  182. package/package.json +73 -64
  183. package/src/ScriptPlugin.tsx +88 -69
  184. package/src/capabilities/app-graph-builder.ts +10 -9
  185. package/src/capabilities/artifact-definition.ts +2 -3
  186. package/src/capabilities/compiler.ts +1 -1
  187. package/src/capabilities/intent-resolver.ts +20 -11
  188. package/src/capabilities/react-surface.tsx +30 -17
  189. package/src/capabilities/settings.ts +3 -3
  190. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +13 -6
  191. package/src/components/DeploymentDialog/DeploymentDialog.tsx +41 -30
  192. package/src/components/FrameContainer/FrameContainer.tsx +2 -2
  193. package/src/components/NotebookContainer.stories.tsx +83 -0
  194. package/src/components/NotebookContainer.tsx +263 -0
  195. package/src/components/NotebookStack/NotebookCell.tsx +214 -0
  196. package/src/components/NotebookStack/NotebookMenu.tsx +47 -0
  197. package/src/components/NotebookStack/NotebookStack.stories.tsx +54 -0
  198. package/src/components/NotebookStack/NotebookStack.tsx +86 -0
  199. package/src/components/NotebookStack/index.ts +6 -0
  200. package/src/components/ScriptContainer.tsx +5 -5
  201. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +22 -10
  202. package/src/components/ScriptToolbar/ScriptToolbar.tsx +30 -33
  203. package/src/components/Settings/ScriptObjectSettings.tsx +110 -15
  204. package/src/components/Settings/ScriptPluginSettings.tsx +4 -19
  205. package/src/components/TestPanel/TestContainer.tsx +2 -2
  206. package/src/components/TestPanel/TestPanel.tsx +41 -18
  207. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +71 -16
  208. package/src/components/TypescriptEditor/TypescriptEditor.tsx +35 -35
  209. package/src/components/index.ts +3 -0
  210. package/src/events.ts +2 -2
  211. package/src/hooks/deploy.ts +14 -15
  212. package/src/hooks/format.ts +4 -4
  213. package/src/hooks/template.ts +6 -15
  214. package/src/hooks/useCreateAndDeployScriptTemplates.ts +10 -6
  215. package/src/index.ts +1 -0
  216. package/src/meta.ts +7 -5
  217. package/src/notebook/compute-graph.test.ts +70 -0
  218. package/src/notebook/compute-graph.ts +206 -0
  219. package/src/notebook/eval.ts +105 -0
  220. package/src/notebook/index.ts +5 -0
  221. package/src/notebook/vfs-parser.test.ts +149 -0
  222. package/src/notebook/vfs-parser.ts +451 -0
  223. package/src/templates/chess.ts +2 -0
  224. package/src/templates/data-generator.ts +2 -0
  225. package/src/templates/discord.ts +9 -1
  226. package/src/templates/forex-effect.ts +5 -1
  227. package/src/templates/forex.ts +2 -0
  228. package/src/templates/gmail.ts +22 -11
  229. package/src/templates/index.ts +6 -6
  230. package/src/testing/data.ts +72 -0
  231. package/src/testing/index.ts +5 -0
  232. package/src/translations.ts +32 -7
  233. package/src/types/Notebook.ts +41 -0
  234. package/src/types/actions.ts +53 -0
  235. package/src/types/index.ts +3 -1
  236. package/src/types/types.ts +15 -0
  237. package/src/util/deploy.ts +13 -17
  238. package/src/util/functions.ts +34 -4
  239. package/dist/lib/browser/DeploymentDialog-QZSTVNIS.mjs +0 -12
  240. package/dist/lib/browser/ScriptContainer-DNNA6XC6.mjs +0 -265
  241. package/dist/lib/browser/ScriptContainer-DNNA6XC6.mjs.map +0 -7
  242. package/dist/lib/browser/app-graph-builder-IABOSTBK.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-6CAH7VIE.mjs +0 -283
  244. package/dist/lib/browser/chunk-6CAH7VIE.mjs.map +0 -7
  245. package/dist/lib/browser/chunk-GZKWMME3.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-IS4OG2UW.mjs +0 -39
  247. package/dist/lib/browser/chunk-IS4OG2UW.mjs.map +0 -7
  248. package/dist/lib/browser/chunk-NXKU3BNX.mjs +0 -222
  249. package/dist/lib/browser/chunk-NXKU3BNX.mjs.map +0 -7
  250. package/dist/lib/browser/chunk-QYAREHGH.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-RNGIQIEJ.mjs +0 -88
  252. package/dist/lib/browser/chunk-RNGIQIEJ.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-YCZPTTFO.mjs.map +0 -7
  254. package/dist/lib/browser/compiler-2HJH34GM.mjs.map +0 -7
  255. package/dist/lib/browser/intent-resolver-F4YSRPJI.mjs.map +0 -7
  256. package/dist/lib/browser/react-surface-BBHFU6MI.mjs.map +0 -7
  257. package/dist/lib/browser/settings-KCTBK5TY.mjs.map +0 -7
  258. package/dist/lib/node-esm/DeploymentDialog-G6EHEPXN.mjs +0 -13
  259. package/dist/lib/node-esm/ScriptContainer-KPYZN2KY.mjs +0 -266
  260. package/dist/lib/node-esm/ScriptContainer-KPYZN2KY.mjs.map +0 -7
  261. package/dist/lib/node-esm/app-graph-builder-CQTTAYHP.mjs.map +0 -7
  262. package/dist/lib/node-esm/chunk-2GBESIHU.mjs +0 -284
  263. package/dist/lib/node-esm/chunk-2GBESIHU.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-AHXJ6NQU.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-GWHLP5LM.mjs +0 -90
  266. package/dist/lib/node-esm/chunk-GWHLP5LM.mjs.map +0 -7
  267. package/dist/lib/node-esm/chunk-HUHVIOL5.mjs.map +0 -7
  268. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs +0 -40
  269. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-M642JUOZ.mjs +0 -223
  271. package/dist/lib/node-esm/chunk-M642JUOZ.mjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-ZA36GO4T.mjs.map +0 -7
  273. package/dist/lib/node-esm/compiler-7SP27RA6.mjs.map +0 -7
  274. package/dist/lib/node-esm/intent-resolver-CGQYRWWD.mjs.map +0 -7
  275. package/dist/lib/node-esm/react-surface-UWIWPKZD.mjs.map +0 -7
  276. package/dist/lib/node-esm/settings-DXZ334A3.mjs.map +0 -7
  277. package/dist/types/src/templates/echo.d.ts.map +0 -1
  278. package/dist/types/src/types/schema.d.ts +0 -38
  279. package/dist/types/src/types/schema.d.ts.map +0 -1
  280. package/src/types/schema.ts +0 -37
  281. /package/dist/lib/browser/{DeploymentDialog-QZSTVNIS.mjs.map → DeploymentDialog-MZX4T77L.mjs.map} +0 -0
  282. /package/dist/lib/{node-esm/DeploymentDialog-G6EHEPXN.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  283. /package/dist/lib/browser/{chunk-5TVBECWH.mjs.map → chunk-UOQ6NCH3.mjs.map} +0 -0
  284. /package/dist/lib/node-esm/{chunk-35M3CHYE.mjs.map → chunk-55JZVM6K.mjs.map} +0 -0
  285. /package/src/templates/{echo.ts → ping.ts} +0 -0
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { useEffect, useMemo } from 'react';
6
6
 
7
- import { FunctionType, type ScriptType, getUserFunctionIdInMetadata } from '@dxos/functions';
7
+ import { Function, type Script, getUserFunctionIdInMetadata } from '@dxos/functions';
8
8
  import { log } from '@dxos/log';
9
9
  import { type Client, useClient } from '@dxos/react-client';
10
10
  import { Query, Ref, type Space, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';
@@ -12,7 +12,7 @@ import { type TFunction } from '@dxos/react-ui';
12
12
  import { createMenuAction } from '@dxos/react-ui-menu';
13
13
  import { errorMessageColors } from '@dxos/react-ui-theme';
14
14
 
15
- import { SCRIPT_PLUGIN } from '../meta';
15
+ import { meta } from '../meta';
16
16
  import { deployScript, getFunctionUrl, isScriptDeployed } from '../util';
17
17
 
18
18
  export type DeployActionProperties = { type: 'deploy' } | { type: 'copy' };
@@ -26,8 +26,8 @@ export type DeployState = {
26
26
 
27
27
  export type CreateDeployOptions = {
28
28
  state: Partial<DeployState>;
29
- script: ScriptType;
30
- fn: FunctionType;
29
+ script: Script.Script;
30
+ fn: Function.Function;
31
31
  space?: Space;
32
32
  existingFunctionId?: string;
33
33
  client: Client;
@@ -37,7 +37,7 @@ export type CreateDeployOptions = {
37
37
  export const createDeploy = ({ state, script, space, fn, client, existingFunctionId, t }: CreateDeployOptions) => {
38
38
  // TODO(wittjosiah): Should this be an action?
39
39
  const errorItem = createMenuAction('error', () => {}, {
40
- label: state.error ?? ['no error label', { ns: SCRIPT_PLUGIN }],
40
+ label: state.error ?? ['no error label', { ns: meta.id }],
41
41
  icon: 'ph--warning-circle--regular',
42
42
  hidden: !state.error,
43
43
  classNames: state.error && errorMessageColors,
@@ -64,7 +64,7 @@ export const createDeploy = ({ state, script, space, fn, client, existingFunctio
64
64
  },
65
65
  {
66
66
  type: 'deploy',
67
- label: [state.deploying ? 'pending label' : 'deploy label', { ns: SCRIPT_PLUGIN }],
67
+ label: [state.deploying ? 'publishing label' : 'deploy label', { ns: meta.id }],
68
68
  icon: state.deploying ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular',
69
69
  disabled: state.deploying,
70
70
  classNames: state.deploying ? '[&_svg]:animate-spin' : '',
@@ -74,14 +74,13 @@ export const createDeploy = ({ state, script, space, fn, client, existingFunctio
74
74
  const copyAction = createMenuAction<DeployActionProperties>(
75
75
  'copy',
76
76
  async () => {
77
- if (!state.functionUrl) {
78
- return;
77
+ if (state.functionUrl) {
78
+ await navigator.clipboard.writeText(state.functionUrl);
79
79
  }
80
- await navigator.clipboard.writeText(state.functionUrl);
81
80
  },
82
81
  {
83
82
  type: 'copy',
84
- label: ['copy link label', { ns: SCRIPT_PLUGIN }],
83
+ label: ['copy link label', { ns: meta.id }],
85
84
  icon: 'ph--link--regular',
86
85
  disabled: !state.functionUrl,
87
86
  },
@@ -97,7 +96,7 @@ export const createDeploy = ({ state, script, space, fn, client, existingFunctio
97
96
  };
98
97
  };
99
98
 
100
- export const useDeployState = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {
99
+ export const useDeployState = ({ state, script }: { state: Partial<DeployState>; script: Script.Script }) => {
101
100
  const { space, client, fn, existingFunctionId } = useDeployDeps({ script });
102
101
  useEffect(() => {
103
102
  if (!existingFunctionId) {
@@ -116,10 +115,10 @@ export const useDeployState = ({ state, script }: { state: Partial<DeployState>;
116
115
  }, [script.changed, existingFunctionId, fn, script]);
117
116
  };
118
117
 
119
- export const useDeployDeps = ({ script }: { script: ScriptType }) => {
120
- const space = getSpace(script);
121
- const [fn] = useQuery(space, Query.type(FunctionType, { source: Ref.make(script) }));
118
+ export const useDeployDeps = ({ script }: { script: Script.Script }) => {
122
119
  const client = useClient();
120
+ const space = getSpace(script);
121
+ const [fn] = useQuery(space, Query.type(Function.Function, { source: Ref.make(script) }));
123
122
  const existingFunctionId = useMemo(() => fn && getUserFunctionIdInMetadata(getMeta(fn)), [fn]);
124
- return { space, fn, client, existingFunctionId };
123
+ return { client, space, fn, existingFunctionId };
125
124
  };
@@ -6,15 +6,15 @@ import { format } from 'prettier';
6
6
  import prettierPluginEstree from 'prettier/plugins/estree';
7
7
  import prettierPluginTypescript from 'prettier/plugins/typescript';
8
8
 
9
- import { type ScriptType } from '@dxos/functions';
9
+ import { type Script } from '@dxos/functions';
10
10
  import { log } from '@dxos/log';
11
11
  import { createMenuAction } from '@dxos/react-ui-menu';
12
12
 
13
- import { SCRIPT_PLUGIN } from '../meta';
13
+ import { meta } from '../meta';
14
14
 
15
15
  export type FormatActionProperties = { type: 'format' };
16
16
 
17
- export const createFormat = (script: ScriptType) => {
17
+ export const createFormat = (script: Script.Script) => {
18
18
  const formatAction = createMenuAction(
19
19
  'format',
20
20
  async () => {
@@ -35,7 +35,7 @@ export const createFormat = (script: ScriptType) => {
35
35
  }
36
36
  },
37
37
  {
38
- label: ['format label', { ns: SCRIPT_PLUGIN }],
38
+ label: ['format label', { ns: meta.id }],
39
39
  icon: 'ph--magic-wand--regular',
40
40
  },
41
41
  );
@@ -3,22 +3,14 @@
3
3
  //
4
4
 
5
5
  import { Obj } from '@dxos/echo';
6
- import { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions';
7
- import { createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';
6
+ import { FUNCTIONS_PRESET_META_KEY, type Script } from '@dxos/functions';
7
+ import { createMenuAction } from '@dxos/react-ui-menu';
8
8
 
9
- import { SCRIPT_PLUGIN } from '../meta';
10
9
  import { templates } from '../templates';
11
10
 
12
11
  export type TemplateActionProperties = { type: 'template'; value: string };
13
12
 
14
- const createTemplateSelectGroup = () => {
15
- return createMenuItemGroup('template-select', {
16
- label: ['template select group label', { ns: SCRIPT_PLUGIN }],
17
- variant: 'dropdownMenu',
18
- });
19
- };
20
-
21
- const createTemplateSelectActions = (script: ScriptType) => {
13
+ const createTemplateSelectActions = (script: Script.Script) => {
22
14
  return templates.map((template) => {
23
15
  return createMenuAction<TemplateActionProperties>(
24
16
  `template--${template.id}`,
@@ -30,7 +22,7 @@ const createTemplateSelectActions = (script: ScriptType) => {
30
22
  if (oldPresetIndex >= 0) {
31
23
  metaKeys.splice(oldPresetIndex, 1);
32
24
  }
33
- if (template.presetId) {
25
+ if ('presetId' in template) {
34
26
  metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });
35
27
  }
36
28
  },
@@ -43,11 +35,10 @@ const createTemplateSelectActions = (script: ScriptType) => {
43
35
  });
44
36
  };
45
37
 
46
- export const createTemplateSelect = (script: ScriptType) => {
47
- const templateSelectGroup = createTemplateSelectGroup();
38
+ export const createTemplateSelect = (script: Script.Script) => {
48
39
  const templateSelectActions = createTemplateSelectActions(script);
49
40
  return {
50
- nodes: [templateSelectGroup, ...templateSelectActions],
41
+ nodes: [...templateSelectActions],
51
42
  edges: [
52
43
  { source: 'root', target: 'template-select' },
53
44
  ...templateSelectActions.map((action) => ({ source: 'template-select', target: action.id })),
@@ -2,12 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { pipe } from 'effect/Function';
5
+ import * as Function from 'effect/Function';
6
6
  import { useCallback, useState } from 'react';
7
7
 
8
- import { chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { chain, createIntent } from '@dxos/app-framework';
9
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
9
10
  import { Obj } from '@dxos/echo';
10
- import { ScriptType } from '@dxos/functions';
11
+ import { Script } from '@dxos/functions';
11
12
  import { invariant } from '@dxos/invariant';
12
13
  import { SpaceAction } from '@dxos/plugin-space/types';
13
14
  import { useClient } from '@dxos/react-client';
@@ -40,12 +41,15 @@ export const useCreateAndDeployScriptTemplates = (space: Space | undefined, scri
40
41
  const deploymentResults = await Promise.all(
41
42
  scriptTemplates.map(async (template) => {
42
43
  const result = await dispatch(
43
- pipe(
44
- createIntent(ScriptAction.Create, { space, initialTemplateId: template.id }),
44
+ Function.pipe(
45
+ createIntent(ScriptAction.CreateScript, {
46
+ space,
47
+ initialTemplateId: template.id as any,
48
+ }),
45
49
  chain(SpaceAction.AddObject, { target: space }),
46
50
  ),
47
51
  );
48
- invariant(Obj.instanceOf(ScriptType, result.data?.object));
52
+ invariant(Obj.instanceOf(Script.Script, result.data?.object));
49
53
 
50
54
  return deployScript({ space, client, script: result.data.object });
51
55
  }),
package/src/index.ts CHANGED
@@ -5,5 +5,6 @@
5
5
  export { ScriptCapabilities } from './capabilities';
6
6
  export * from './components';
7
7
  export * from './meta';
8
+ export * from './util';
8
9
 
9
10
  export * from './ScriptPlugin';
package/src/meta.ts CHANGED
@@ -3,15 +3,17 @@
3
3
  //
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
-
7
- export const SCRIPT_PLUGIN = 'dxos.org/plugin/script';
6
+ import { trim } from '@dxos/util';
8
7
 
9
8
  export const meta: PluginMeta = {
10
- id: SCRIPT_PLUGIN,
9
+ id: 'dxos.org/plugin/script',
11
10
  name: 'Scripts',
12
- description:
13
- 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',
11
+ description: trim`
12
+ Write and deploy custom JavaScript functions that extend your workspace capabilities.
13
+ Create AI agent tools, spreadsheet formulas, and automation scripts that integrate seamlessly with other plugins.
14
+ `,
14
15
  icon: 'ph--code--regular',
16
+ iconHue: 'sky',
15
17
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer',
16
18
  tags: ['labs'],
17
19
  screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],
@@ -0,0 +1,70 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, expect, test } from 'vitest';
6
+
7
+ import { createNotebook } from '../testing';
8
+
9
+ import { ComputeGraph } from './compute-graph';
10
+
11
+ describe('notebook', () => {
12
+ test('parse dependency graph', async () => {
13
+ const notebook = createNotebook();
14
+ const graph = new ComputeGraph(notebook);
15
+ const result = graph.parse();
16
+
17
+ const getId = (i: number) => notebook.cells[i].id;
18
+
19
+ // Check dependencies.
20
+ expect(result.dependencyGraph).toMatchObject({
21
+ [getId(0)]: [getId(1), getId(2)],
22
+ [getId(3)]: [getId(1)],
23
+ [getId(4)]: [getId(0), getId(3)],
24
+ });
25
+
26
+ // Compute values.
27
+ const values = await graph.evaluate();
28
+ expect(values).toEqual({
29
+ [getId(0)]: 300,
30
+ [getId(2)]: 200,
31
+ [getId(3)]: 200,
32
+ [getId(4)]: 500,
33
+ });
34
+ });
35
+
36
+ test('evalScript blocks access to window and document', async () => {
37
+ const notebook = createNotebook();
38
+ // Replace one of the cells with code that tries to access window/document.
39
+ if (notebook.cells[2].source?.target) {
40
+ notebook.cells[2].source.target.content = 'b = typeof window';
41
+ }
42
+
43
+ const graph = new ComputeGraph(notebook);
44
+ graph.parse();
45
+ const values = await graph.evaluate();
46
+
47
+ // Should evaluate to 'undefined' since window is blocked.
48
+ expect(values[notebook.cells[2].id]).toBe('undefined');
49
+
50
+ // Test document access.
51
+ if (notebook.cells[2].source?.target) {
52
+ notebook.cells[2].source.target.content = 'b = typeof document';
53
+ }
54
+ graph.parse();
55
+ const values2 = await graph.evaluate();
56
+
57
+ // Should evaluate to 'undefined' since document is blocked.
58
+ expect(values2[notebook.cells[2].id]).toBe('undefined');
59
+
60
+ // Test that safe globals still work.
61
+ if (notebook.cells[2].source?.target) {
62
+ notebook.cells[2].source.target.content = 'b = Math.max(100, 200)';
63
+ }
64
+ graph.parse();
65
+ const values3 = await graph.evaluate();
66
+
67
+ // Should evaluate correctly.
68
+ expect(values3[notebook.cells[2].id]).toBe(200);
69
+ });
70
+ });
@@ -0,0 +1,206 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Signal, signal } from '@preact/signals-core';
6
+
7
+ import { log } from '@dxos/log';
8
+
9
+ import { type Notebook } from '../types';
10
+
11
+ import { evalScript } from './eval';
12
+ import { type ParsedExpression, VirtualTypeScriptParser } from './vfs-parser';
13
+
14
+ /**
15
+ * Compute graph that evaluates the notebook cells.
16
+ */
17
+ // TODO(burdon): Reconcile with @dxos/conductor.
18
+ export class ComputeGraph {
19
+ private readonly _parser = new VirtualTypeScriptParser();
20
+
21
+ private _expressions = signal<Record<string, ParsedExpression>>({});
22
+ private _valuesByCellId = signal<Record<string, any>>({});
23
+ private _valuesByName = signal<Record<string, any>>({});
24
+
25
+ constructor(private readonly _notebook: Notebook.Notebook) {}
26
+
27
+ /**
28
+ * Parsed expressions by cell ID.
29
+ */
30
+ get expressions(): Signal<Record<string, ParsedExpression>> {
31
+ return this._expressions;
32
+ }
33
+
34
+ /**
35
+ * Computed values by cell ID.
36
+ */
37
+ get values(): Signal<Record<string, any>> {
38
+ return this._valuesByCellId;
39
+ }
40
+
41
+ /**
42
+ * Computed values by name.
43
+ */
44
+ get valuesByName(): Signal<Record<string, any>> {
45
+ return this._valuesByName;
46
+ }
47
+
48
+ /**
49
+ * Get computed value by cell ID.
50
+ */
51
+ getValue(cellId: string) {
52
+ return this._valuesByCellId.value[cellId];
53
+ }
54
+
55
+ /**
56
+ * Compute values.
57
+ */
58
+ async evaluate() {
59
+ // Parse expressions.
60
+ const { expressions, dependencyGraph } = this.parse();
61
+ this._valuesByCellId.value = {};
62
+ this._valuesByName.value = {};
63
+
64
+ // Create a map of cell IDs to expressions for easy lookup.
65
+ const cellExpressions = new Map<string, ParsedExpression>();
66
+ Object.entries(expressions).forEach(([id, expr]) => {
67
+ cellExpressions.set(id, expr);
68
+ });
69
+
70
+ // Topological sort to determine evaluation order.
71
+ const evaluationOrder = this.topologicalSort(Object.keys(expressions), dependencyGraph);
72
+
73
+ // Values by reference name.
74
+ const valuesByName: Record<string, any> = {};
75
+ const valuesByCellId: Record<string, any> = {};
76
+
77
+ // Evaluate cells in dependency order.
78
+ for (const cellId of evaluationOrder) {
79
+ const expr = cellExpressions.get(cellId);
80
+ if (!expr) {
81
+ log.error('no expression for cell', { cellId });
82
+ continue;
83
+ }
84
+
85
+ const cellSource = this._notebook.cells.find((cell) => cell.id === cellId)?.source?.target?.content;
86
+ if (!cellSource) {
87
+ log.error('no source for cell', { cellId });
88
+ continue;
89
+ }
90
+
91
+ try {
92
+ // For assignments or declarations, evaluate and store the value.
93
+ if (expr.name && expr.value !== undefined) {
94
+ // If the parser extracted a literal value, use it directly.
95
+ valuesByName[expr.name] = expr.value;
96
+ valuesByCellId[cellId] = expr.value;
97
+ } else if (expr.name) {
98
+ // For non-literal assignments, we need to evaluate the expression.
99
+ // The parser identifies it's an assignment, so we can extract the RHS.
100
+ const equalIndex = cellSource.indexOf('=');
101
+ if (equalIndex !== -1) {
102
+ // Find the actual assignment operator (not in strings or other contexts).
103
+ let rhs = cellSource.substring(equalIndex + 1).trim();
104
+
105
+ // Handle semicolon at the end.
106
+ if (rhs.endsWith(';')) {
107
+ rhs = rhs.slice(0, -1).trim();
108
+ }
109
+
110
+ const result = await this.eval(rhs, valuesByName);
111
+ valuesByName[expr.name] = result;
112
+ if (typeof result !== 'function') {
113
+ valuesByCellId[cellId] = result;
114
+ }
115
+ }
116
+ } else {
117
+ // For expressions without assignment, just evaluate.
118
+ const result = await this.eval(cellSource, valuesByName);
119
+ valuesByCellId[cellId] = result;
120
+ }
121
+ } catch (error) {
122
+ // TODO(burdon): Set error state.
123
+ log.error('error evaluating cell', { cellId, error });
124
+ }
125
+ }
126
+
127
+ this._valuesByCellId.value = valuesByCellId;
128
+ this._valuesByName.value = valuesByName;
129
+ return valuesByCellId;
130
+ }
131
+
132
+ private async eval(source: string, values: Record<string, any>) {
133
+ return evalScript(source, values);
134
+ }
135
+
136
+ /**
137
+ * Parse expressions.
138
+ */
139
+ parse() {
140
+ const expressions = this._notebook.cells
141
+ .filter((cell) => cell.type === 'script')
142
+ .reduce<Record<string, ParsedExpression>>((acc, cell) => {
143
+ const text = cell.source?.target?.content.trim();
144
+ if (text) {
145
+ const parsed = this._parser.parseExpression(text);
146
+ acc[cell.id] = parsed;
147
+ }
148
+
149
+ return acc;
150
+ }, {});
151
+
152
+ // Build dependency graph.
153
+ const dependencyGraph = this.buildDependencyGraph(expressions);
154
+ this._expressions.value = expressions;
155
+ return { expressions, dependencyGraph };
156
+ }
157
+
158
+ private topologicalSort(nodes: string[], dependencies: Record<string, string[]>): string[] {
159
+ const visited = new Set<string>();
160
+ const result: string[] = [];
161
+
162
+ const visit = (node: string) => {
163
+ if (visited.has(node)) {
164
+ return;
165
+ }
166
+
167
+ visited.add(node);
168
+
169
+ // Visit dependencies first.
170
+ const deps = dependencies[node] || [];
171
+ deps.forEach((dep) => visit(dep));
172
+ result.push(node);
173
+ };
174
+
175
+ // Visit all nodes.
176
+ nodes.forEach((node) => visit(node));
177
+ return result;
178
+ }
179
+
180
+ private buildDependencyGraph(expressions: Record<string, ParsedExpression>): Record<string, string[]> {
181
+ // Create a map of variable names to their cell IDs.
182
+ const nameToCellId = new Map<string, string>();
183
+ Object.entries(expressions).forEach(([id, expr]) => {
184
+ if (expr.name) {
185
+ nameToCellId.set(expr.name, id);
186
+ }
187
+ });
188
+
189
+ // Build the dependency graph using cell IDs.
190
+ const graph: Record<string, string[]> = {};
191
+ Object.entries(expressions).forEach(([id, expr]) => {
192
+ if (expr.references && expr.references.length > 0) {
193
+ // Map variable references to cell IDs.
194
+ const dependencyCellIds = expr.references
195
+ .map((ref) => nameToCellId.get(ref))
196
+ .filter((cellId): cellId is string => cellId !== undefined && cellId !== id);
197
+
198
+ if (dependencyCellIds.length > 0) {
199
+ graph[id] = dependencyCellIds;
200
+ }
201
+ }
202
+ });
203
+
204
+ return graph;
205
+ }
206
+ }
@@ -0,0 +1,105 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { trim } from '@dxos/util';
6
+
7
+ /**
8
+ * Evaluate the script (with dependencies as arguments).
9
+ */
10
+ export const evalScript = async (code: string, deps: Record<string, any> = {}) => {
11
+ // Create a sandboxed environment that blocks access to window and document.
12
+ const sandbox = {
13
+ ...deps,
14
+
15
+ // Block access to global objects.
16
+ console: undefined,
17
+ document: undefined,
18
+ global: undefined,
19
+ globalThis: undefined,
20
+ self: undefined,
21
+ window: undefined,
22
+
23
+ // Allow some safe globals.
24
+ Array,
25
+ Boolean,
26
+ Date,
27
+ Error,
28
+ JSON,
29
+ Map,
30
+ Math,
31
+ Number,
32
+ Object,
33
+ Promise,
34
+ RegExp,
35
+ Set,
36
+ String,
37
+
38
+ // Functions.
39
+ isFinite,
40
+ isNaN,
41
+ parseFloat,
42
+ parseInt,
43
+
44
+ // Note: undefined and null are not included as they are keywords, not variables.
45
+ };
46
+
47
+ // Create function with all sandbox keys as parameters.
48
+ const sandboxKeys = Object.keys(sandbox);
49
+ const sandboxValues = Object.values(sandbox);
50
+
51
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
52
+ const fn = new Function(
53
+ ...sandboxKeys,
54
+ trim`
55
+ 'use strict';
56
+ return ${code};
57
+ `,
58
+ );
59
+
60
+ return fn(...sandboxValues);
61
+ };
62
+
63
+ /**
64
+ * Globals.
65
+ */
66
+ export const builtIns = new Set([
67
+ // Types.
68
+ 'Array',
69
+ 'Date',
70
+ 'Error',
71
+ 'JSON',
72
+ 'Map',
73
+ 'Math',
74
+ 'Number',
75
+ 'Object',
76
+ 'Promise',
77
+ 'RegExp',
78
+ 'Set',
79
+ 'String',
80
+
81
+ // Functions.
82
+ 'isFinite',
83
+ 'isNaN',
84
+ 'parseFloat',
85
+ 'parseInt',
86
+ ]);
87
+
88
+ /**
89
+ * Default system definitions.
90
+ */
91
+ export const systemDefinitions = trim`
92
+ interface Array<T> { length: number; [n: number]: T; }
93
+ interface Boolean {}
94
+ interface Function {}
95
+ interface IArguments {}
96
+ interface Number {}
97
+ interface Object {}
98
+ interface RegExp {}
99
+ interface String { length: number; }
100
+
101
+ interface CallableFunction extends Function {}
102
+ interface NewableFunction extends Function {}
103
+
104
+ declare var console: { log(...args: any[]): void };
105
+ `;
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './compute-graph';