@dxos/plugin-automation 0.8.4-main.e8ec1fe → 0.8.4-main.effb148878
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/neutral/AutomationPanel-OS3ZWYJK.mjs +12 -0
- package/dist/lib/neutral/AutomationPlugin.mjs +10 -0
- package/dist/lib/neutral/AutomationPlugin.node.mjs +1118 -0
- package/dist/lib/neutral/AutomationPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/AutomationPlugin.workerd.mjs +23 -0
- package/dist/lib/neutral/AutomationPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/AutomationSettings-CAFY3J7H.mjs +32 -0
- package/dist/lib/neutral/AutomationSettings-CAFY3J7H.mjs.map +7 -0
- package/dist/lib/neutral/FunctionsContainer-V5AM45ZI.mjs +38 -0
- package/dist/lib/neutral/FunctionsContainer-V5AM45ZI.mjs.map +7 -0
- package/dist/lib/neutral/FunctionsPanel-L32Z67B7.mjs +97 -0
- package/dist/lib/neutral/FunctionsPanel-L32Z67B7.mjs.map +7 -0
- package/dist/lib/neutral/FunctionsRegistry-RTCY3LXE.mjs +95 -0
- package/dist/lib/neutral/FunctionsRegistry-RTCY3LXE.mjs.map +7 -0
- package/dist/lib/neutral/TriggerSettings-XCHIZPOR.mjs +9 -0
- package/dist/lib/neutral/app-graph-builder-4QOUKY5L.mjs +75 -0
- package/dist/lib/neutral/app-graph-builder-4QOUKY5L.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +17 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/node.mjs +15 -0
- package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
- package/dist/lib/neutral/chunk-2H6X4VQY.mjs +435 -0
- package/dist/lib/neutral/chunk-2H6X4VQY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-2JP77CMN.mjs +42 -0
- package/dist/lib/neutral/chunk-2JP77CMN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-33VXVTV4.mjs +38 -0
- package/dist/lib/neutral/chunk-33VXVTV4.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ARUHHM4Q.mjs +12 -0
- package/dist/lib/neutral/chunk-ARUHHM4Q.mjs.map +7 -0
- package/dist/lib/neutral/chunk-CMM3AFHR.mjs +111 -0
- package/dist/lib/neutral/chunk-CMM3AFHR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-EBSOLOP6.mjs +8 -0
- package/dist/lib/neutral/chunk-EBSOLOP6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-KV7RZLFS.mjs +344 -0
- package/dist/lib/neutral/chunk-KV7RZLFS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QLBA6Y46.mjs +39 -0
- package/dist/lib/neutral/chunk-QLBA6Y46.mjs.map +7 -0
- package/dist/lib/neutral/chunk-XC5EPVE3.mjs +76 -0
- package/dist/lib/neutral/chunk-XC5EPVE3.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +16 -0
- package/dist/lib/neutral/containers/index.mjs +13 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/create-trigger-from-template-IOQZDDSH.mjs +68 -0
- package/dist/lib/neutral/create-trigger-from-template-IOQZDDSH.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +10 -0
- package/dist/lib/neutral/index.mjs +16 -0
- package/dist/lib/neutral/layer-specs-B22CIT3U.mjs +160 -0
- package/dist/lib/neutral/layer-specs-B22CIT3U.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs +13 -0
- package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-3OGMAMKV.mjs +57 -0
- package/dist/lib/neutral/react-surface-3OGMAMKV.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +8 -0
- package/dist/lib/neutral/testing.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +60 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/trigger-runtime-controller-BOEJYGWC.mjs +77 -0
- package/dist/lib/neutral/trigger-runtime-controller-BOEJYGWC.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +12 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/types/src/AutomationPlugin.d.ts +3 -1
- package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
- package/dist/types/src/AutomationPlugin.node.d.ts +4 -0
- package/dist/types/src/AutomationPlugin.node.d.ts.map +1 -0
- package/dist/types/src/AutomationPlugin.test.d.ts +2 -0
- package/dist/types/src/AutomationPlugin.test.d.ts.map +1 -0
- package/dist/types/src/AutomationPlugin.workerd.d.ts +4 -0
- package/dist/types/src/AutomationPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +7 -5
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/layer-specs.d.ts +5 -0
- package/dist/types/src/capabilities/layer-specs.d.ts.map +1 -0
- package/dist/types/src/capabilities/node.d.ts +7 -0
- package/dist/types/src/capabilities/node.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +3 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/trigger-runtime-controller.d.ts +5 -0
- package/dist/types/src/capabilities/trigger-runtime-controller.d.ts.map +1 -0
- package/dist/types/src/capabilities/trigger-runtime-controller.test.d.ts +2 -0
- package/dist/types/src/capabilities/trigger-runtime-controller.test.d.ts.map +1 -0
- package/dist/types/src/commands/index.d.ts +2 -0
- package/dist/types/src/commands/index.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/create/index.d.ts +25 -0
- package/dist/types/src/commands/trigger/create/index.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/create/queue.d.ts +13 -0
- package/dist/types/src/commands/trigger/create/queue.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/create/subscription.d.ts +15 -0
- package/dist/types/src/commands/trigger/create/subscription.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/create/timer.d.ts +13 -0
- package/dist/types/src/commands/trigger/create/timer.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/index.d.ts +57 -0
- package/dist/types/src/commands/trigger/index.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/list.d.ts +7 -0
- package/dist/types/src/commands/trigger/list.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/options.d.ts +10 -0
- package/dist/types/src/commands/trigger/options.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/remove.d.ts +8 -0
- package/dist/types/src/commands/trigger/remove.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/update/index.d.ts +28 -0
- package/dist/types/src/commands/trigger/update/index.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/update/queue.d.ts +11 -0
- package/dist/types/src/commands/trigger/update/queue.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/update/subscription.d.ts +13 -0
- package/dist/types/src/commands/trigger/update/subscription.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/update/timer.d.ts +11 -0
- package/dist/types/src/commands/trigger/update/timer.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/util.d.ts +85 -0
- package/dist/types/src/commands/trigger/util.d.ts.map +1 -0
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +5 -6
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +45 -30
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/TriggerEdgeMetadata.d.ts +18 -0
- package/dist/types/src/components/AutomationPanel/TriggerEdgeMetadata.d.ts.map +1 -0
- package/dist/types/src/components/AutomationPanel/index.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsPanel/index.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsRegistry/index.d.ts +3 -1
- package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +12 -9
- package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +6 -3
- package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +8 -7
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +118 -32
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts +6 -0
- package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts.map +1 -0
- package/dist/types/src/containers/AutomationSettings/index.d.ts +2 -0
- package/dist/types/src/containers/AutomationSettings/index.d.ts.map +1 -0
- package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts +4 -0
- package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts.map +1 -0
- package/dist/types/src/containers/FunctionsContainer/index.d.ts +2 -0
- package/dist/types/src/containers/FunctionsContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts.map +1 -0
- package/dist/types/src/containers/TriggerSettings/index.d.ts +3 -0
- package/dist/types/src/containers/TriggerSettings/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +5 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +1 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useEdgeTriggersDispatcherStatus.d.ts +13 -0
- package/dist/types/src/hooks/useEdgeTriggersDispatcherStatus.d.ts.map +1 -0
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +5 -4
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/create-trigger-from-template.d.ts +5 -0
- package/dist/types/src/operations/create-trigger-from-template.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/testing/test-functions.d.ts +204 -3
- package/dist/types/src/testing/test-functions.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +2 -0
- package/dist/types/src/testing.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +45 -31
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/AutomationOperation.d.ts +21 -0
- package/dist/types/src/types/AutomationOperation.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +13 -5
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +145 -70
- package/src/AutomationPlugin.node.ts +32 -0
- package/src/AutomationPlugin.test.ts +27 -0
- package/src/AutomationPlugin.tsx +24 -38
- package/src/AutomationPlugin.workerd.ts +18 -0
- package/src/capabilities/app-graph-builder.ts +59 -80
- package/src/capabilities/index.ts +13 -7
- package/src/capabilities/layer-specs.ts +230 -0
- package/src/capabilities/node.ts +17 -0
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/react-surface.tsx +49 -46
- package/src/capabilities/trigger-runtime-controller.test.ts +103 -0
- package/src/capabilities/trigger-runtime-controller.ts +126 -0
- package/src/commands/index.ts +5 -0
- package/src/commands/trigger/create/index.ts +14 -0
- package/src/commands/trigger/create/queue.ts +87 -0
- package/src/commands/trigger/create/subscription.ts +125 -0
- package/src/commands/trigger/create/timer.ts +90 -0
- package/src/commands/trigger/index.ts +16 -0
- package/src/commands/trigger/list.ts +70 -0
- package/src/commands/trigger/options.ts +47 -0
- package/src/commands/trigger/remove.ts +45 -0
- package/src/commands/trigger/update/index.ts +14 -0
- package/src/commands/trigger/update/queue.ts +191 -0
- package/src/commands/trigger/update/subscription.ts +279 -0
- package/src/commands/trigger/update/timer.ts +195 -0
- package/src/commands/trigger/util.ts +410 -0
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +15 -8
- package/src/components/AutomationPanel/AutomationPanel.tsx +245 -86
- package/src/components/AutomationPanel/TriggerEdgeMetadata.tsx +148 -0
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +43 -42
- package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +38 -54
- package/src/components/FunctionsRegistry/index.ts +4 -1
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +36 -35
- package/src/components/TriggerEditor/SpecSelector.tsx +26 -20
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +92 -39
- package/src/components/TriggerEditor/TriggerEditor.tsx +171 -54
- package/src/components/index.ts +1 -2
- package/src/containers/AutomationSettings/AutomationSettings.tsx +31 -0
- package/src/containers/AutomationSettings/index.ts +5 -0
- package/src/containers/FunctionsContainer/FunctionsContainer.tsx +33 -0
- package/src/containers/FunctionsContainer/index.ts +5 -0
- package/src/containers/TriggerSettings/TriggerSettings.tsx +48 -0
- package/src/containers/TriggerSettings/index.ts +6 -0
- package/src/containers/index.ts +9 -0
- package/src/hooks/index.ts +2 -1
- package/src/hooks/useEdgeTriggersDispatcherStatus.ts +78 -0
- package/src/hooks/useTriggerRuntimeControls.ts +38 -19
- package/src/index.ts +1 -6
- package/src/meta.ts +25 -6
- package/src/operations/create-trigger-from-template.ts +70 -0
- package/src/operations/index.ts +7 -0
- package/src/plugin.ts +11 -0
- package/src/testing/test-functions.ts +12 -9
- package/src/testing.ts +7 -0
- package/src/translations.ts +53 -36
- package/src/types/AutomationOperation.ts +39 -0
- package/src/types/index.ts +2 -0
- package/src/types/schema.ts +6 -6
- package/dist/lib/browser/AutomationPanel-7OECLR5N.mjs +0 -11
- package/dist/lib/browser/AutomationSettings-KCZISXI6.mjs +0 -68
- package/dist/lib/browser/AutomationSettings-KCZISXI6.mjs.map +0 -7
- package/dist/lib/browser/FunctionsContainer-MIWEISRR.mjs +0 -151
- package/dist/lib/browser/FunctionsContainer-MIWEISRR.mjs.map +0 -7
- package/dist/lib/browser/FunctionsPanel-CRW6SJUN.mjs +0 -10
- package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs +0 -81
- package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs.map +0 -7
- package/dist/lib/browser/chunk-EPEXQP45.mjs +0 -14
- package/dist/lib/browser/chunk-EPEXQP45.mjs.map +0 -7
- package/dist/lib/browser/chunk-JW7XSPYW.mjs +0 -267
- package/dist/lib/browser/chunk-JW7XSPYW.mjs.map +0 -7
- package/dist/lib/browser/chunk-LZQFZO3B.mjs +0 -17
- package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +0 -7
- package/dist/lib/browser/chunk-NAPXRXTY.mjs +0 -100
- package/dist/lib/browser/chunk-NAPXRXTY.mjs.map +0 -7
- package/dist/lib/browser/chunk-QKFBHAGN.mjs +0 -184
- package/dist/lib/browser/chunk-QKFBHAGN.mjs.map +0 -7
- package/dist/lib/browser/chunk-TWWFNOIR.mjs +0 -109
- package/dist/lib/browser/chunk-TWWFNOIR.mjs.map +0 -7
- package/dist/lib/browser/chunk-XAKZ4ANY.mjs +0 -15
- package/dist/lib/browser/chunk-XAKZ4ANY.mjs.map +0 -7
- package/dist/lib/browser/chunk-YBPJCY3F.mjs +0 -38
- package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +0 -7
- package/dist/lib/browser/compute-runtime-EIQTHJFZ.mjs +0 -113
- package/dist/lib/browser/compute-runtime-EIQTHJFZ.mjs.map +0 -7
- package/dist/lib/browser/hooks/index.mjs +0 -13
- package/dist/lib/browser/index.mjs +0 -130
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs +0 -77
- package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/react-surface-YQW7WCFW.mjs +0 -64
- package/dist/lib/browser/react-surface-YQW7WCFW.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -8
- package/dist/lib/node-esm/AutomationPanel-HCVFNHGQ.mjs +0 -12
- package/dist/lib/node-esm/AutomationSettings-UUUPVNUJ.mjs +0 -69
- package/dist/lib/node-esm/AutomationSettings-UUUPVNUJ.mjs.map +0 -7
- package/dist/lib/node-esm/FunctionsContainer-6OB3JN5O.mjs +0 -152
- package/dist/lib/node-esm/FunctionsContainer-6OB3JN5O.mjs.map +0 -7
- package/dist/lib/node-esm/FunctionsPanel-RVVCS6VH.mjs +0 -11
- package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs +0 -82
- package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6YRKST6M.mjs +0 -185
- package/dist/lib/node-esm/chunk-6YRKST6M.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CEVIVRTY.mjs +0 -19
- package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CPP35BE6.mjs +0 -16
- package/dist/lib/node-esm/chunk-CPP35BE6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ECJKIUBO.mjs +0 -39
- package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-KB7NFEYY.mjs +0 -16
- package/dist/lib/node-esm/chunk-KB7NFEYY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PICJ2REN.mjs +0 -101
- package/dist/lib/node-esm/chunk-PICJ2REN.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RVK52XGK.mjs +0 -110
- package/dist/lib/node-esm/chunk-RVK52XGK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-W76WUTZY.mjs +0 -268
- package/dist/lib/node-esm/chunk-W76WUTZY.mjs.map +0 -7
- package/dist/lib/node-esm/compute-runtime-URROOC34.mjs +0 -114
- package/dist/lib/node-esm/compute-runtime-URROOC34.mjs.map +0 -7
- package/dist/lib/node-esm/hooks/index.mjs +0 -14
- package/dist/lib/node-esm/index.mjs +0 -131
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs +0 -78
- package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/react-surface-NNHYNBO6.mjs +0 -65
- package/dist/lib/node-esm/react-surface-NNHYNBO6.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -9
- package/dist/types/src/capabilities/capabilities.d.ts +0 -20
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/compute-runtime.d.ts +0 -5
- package/dist/types/src/capabilities/compute-runtime.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/components/AutomationSettings.d.ts +0 -5
- package/dist/types/src/components/AutomationSettings.d.ts.map +0 -1
- package/dist/types/src/components/FunctionsContainer.d.ts +0 -7
- package/dist/types/src/components/FunctionsContainer.d.ts.map +0 -1
- package/dist/types/src/components/TriggerSettings.d.ts.map +0 -1
- package/dist/types/src/events.d.ts +0 -4
- package/dist/types/src/events.d.ts.map +0 -1
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +0 -12
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +0 -1
- package/src/capabilities/capabilities.ts +0 -41
- package/src/capabilities/compute-runtime.ts +0 -127
- package/src/capabilities/intent-resolver.ts +0 -72
- package/src/components/AutomationSettings.tsx +0 -30
- package/src/components/FunctionsContainer.tsx +0 -36
- package/src/components/TriggerSettings.tsx +0 -25
- package/src/events.ts +0 -11
- package/src/hooks/useComputeRuntimeCallback.ts +0 -68
- /package/dist/lib/{browser/AutomationPanel-7OECLR5N.mjs.map → neutral/AutomationPanel-OS3ZWYJK.mjs.map} +0 -0
- /package/dist/lib/{browser/FunctionsPanel-CRW6SJUN.mjs.map → neutral/AutomationPlugin.mjs.map} +0 -0
- /package/dist/lib/{browser/hooks/index.mjs.map → neutral/TriggerSettings-XCHIZPOR.mjs.map} +0 -0
- /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{node-esm/hooks → neutral/components}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/AutomationPanel-HCVFNHGQ.mjs.map → neutral/index.mjs.map} +0 -0
- /package/dist/lib/{node-esm/FunctionsPanel-RVVCS6VH.mjs.map → neutral/meta.mjs.map} +0 -0
- /package/dist/types/src/{components → containers/TriggerSettings}/TriggerSettings.d.ts +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/AutomationPlugin.node.ts", "../../../src/commands/trigger/index.ts", "../../../src/commands/trigger/create/index.ts", "../../../src/commands/trigger/create/queue.ts", "../../../src/commands/trigger/options.ts", "../../../src/commands/trigger/util.ts", "../../../src/commands/trigger/create/subscription.ts", "../../../src/commands/trigger/create/timer.ts", "../../../src/commands/trigger/list.ts", "../../../src/commands/trigger/remove.ts", "../../../src/commands/trigger/update/index.ts", "../../../src/commands/trigger/update/queue.ts", "../../../src/commands/trigger/update/subscription.ts", "../../../src/commands/trigger/update/timer.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvent, ActivationEvents, Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Operation, Trace, Trigger } from '@dxos/compute';\nimport { ClientEvents } from '@dxos/plugin-client';\n\nimport { AppGraphBuilder, LayerSpecs, OperationHandler, TriggerRuntimeController } from '#capabilities';\nimport { meta } from '#meta';\n\nimport { trigger } from './commands';\n\nexport const AutomationPlugin = Plugin.define(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n AppPlugin.addCommandModule({ commands: [trigger] }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Operation.PersistentOperation, Trigger.Trigger, Trace.Message] }),\n Plugin.addModule({\n activatesOn: ClientEvents.ClientReady,\n firesBeforeActivation: [ActivationEvents.SetupProcessManager],\n activate: LayerSpecs,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvent.allOf(ActivationEvents.ProcessManagerReady, ClientEvents.SpacesReady),\n activate: TriggerRuntimeController,\n }),\n Plugin.make,\n);\n\nexport default AutomationPlugin;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { create } from './create';\nimport { list } from './list';\nimport { remove } from './remove';\nimport { update } from './update';\n\n// TODO(wittjosiah): Rename to automation to align with Composer?\nexport const trigger = Command.make('trigger').pipe(\n Command.withDescription('Manage EDGE triggers.'),\n Command.withSubcommands([create, list, remove, update]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { queue } from './queue';\nimport { subscription } from './subscription';\nimport { timer } from './timer';\n\nexport const create = Command.make('create').pipe(\n Command.withDescription('Create a trigger.'),\n Command.withSubcommands([subscription, timer, queue]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as HashMap from 'effect/HashMap';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';\nimport { Common } from '@dxos/cli-util';\nimport { Operation, Trigger } from '@dxos/compute';\nimport { Database, Feed as FeedNs, Filter, JsonSchema, Ref } from '@dxos/echo';\nimport { EchoURI } from '@dxos/keys';\n\nimport { Enabled, Feed, Input } from '../options';\nimport { printTrigger, promptForSchemaInput, selectFunction, selectFeed } from '../util';\n\nexport const queue = Command.make(\n 'feed',\n {\n spaceId: Common.spaceId.pipe(Options.optional),\n enabled: Enabled,\n functionId: Common.functionId.pipe(Options.optional),\n feed: Feed.pipe(Options.optional),\n input: Input.pipe(Options.optional),\n },\n (options) =>\n Effect.gen(function* () {\n const { json } = yield* CommandConfig;\n\n const functionId = yield* Option.match(options.functionId, {\n onNone: () => selectFunction(),\n onSome: (id) => Effect.succeed(id),\n });\n const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));\n const fn = functions.find((fn) => fn.id === functionId);\n if (!fn) {\n return yield* Effect.fail(new Error(`Function not found: ${functionId}`));\n }\n\n const feed = yield* Option.match(options.feed, {\n onNone: () => selectFeed(),\n onSome: (uri) => Database.resolve(EchoURI.parse(uri), FeedNs.Feed),\n });\n\n const input = yield* Option.match(options.input, {\n onNone: () => promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined),\n onSome: (value) => Effect.succeed(Object.fromEntries(HashMap.toEntries(value))),\n });\n\n // Always prompt for enabled if functionId is not provided.\n const enabled = yield* Option.match(options.functionId, {\n onNone: () =>\n Prompt.confirm({\n message: 'Enable the trigger?',\n initial: true,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(options.enabled),\n });\n\n const trigger = Trigger.make({\n function: Ref.make(fn),\n enabled,\n spec: Trigger.specFeed(feed),\n input,\n });\n\n yield* Database.add(trigger);\n\n if (json) {\n yield* Console.log(JSON.stringify(trigger, null, 2));\n } else {\n yield* Console.log(print(yield* printTrigger(trigger)));\n }\n\n yield* flushAndSync({ indexes: true });\n }),\n).pipe(\n Command.withDescription('Create a feed trigger.'),\n Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),\n Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Options from '@effect/cli/Options';\n\nexport const TriggerId = Options.text('id').pipe(Options.withDescription('The id of the trigger.'));\n\nexport const Enabled = Options.boolean('enabled', { ifPresent: true }).pipe(\n Options.withDescription('Whether the trigger is enabled.'),\n);\n\nexport const Input = Options.keyValueMap('input').pipe(\n Options.withDescription(\"Input data to pass to the function. Must match the function's input schema.\"),\n);\n\n//\n// Subscription\n//\n\nexport const Typename = Options.text('typename').pipe(\n Options.withDescription('The type name to query for the subscription trigger.'),\n);\n\nexport const Deep = Options.boolean('deep', { ifPresent: true }).pipe(\n Options.withDescription('Watch changes to nested properties (not just creation).'),\n);\n\nexport const Delay = Options.integer('delay').pipe(\n Options.withDescription('Debounce changes with a delay in milliseconds.'),\n);\n\n//\n// Timer\n//\n\nexport const Cron = Options.text('cron').pipe(\n Options.withDescription('The cron expression to use for the timer trigger.'),\n);\n\n//\n// Feed\n//\n\nexport const Feed = Options.text('feed').pipe(\n Options.withDescription('The EchoURI of the feed for the feed trigger (echo://<spaceId>/<objectId>).'),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Ansi from '@effect/printer-ansi/Ansi';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport type * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormBuilder } from '@dxos/cli-util';\nimport { Operation, Trigger } from '@dxos/compute';\n// eslint-disable-next-line unused-imports/no-unused-imports\nimport { Annotation, Database, Entity, Feed, Filter, Obj, Query, type QueryAST, Ref, Type } from '@dxos/echo';\nimport { getProperties } from '@dxos/effect';\nimport { FeedAnnotation } from '@dxos/schema';\n\nexport type TriggerRemoteStatus = 'available' | 'not available' | 'n/a';\n\n/**\n * Determines the remote status of a trigger.\n * Only timer/cron triggers can be checked for remote availability.\n */\nexport const getTriggerRemoteStatus = (trigger: Trigger.Trigger, remoteCronIds: string[]): TriggerRemoteStatus => {\n if (trigger.spec?.kind !== 'timer') {\n return 'n/a';\n }\n return remoteCronIds.includes(trigger.id) ? 'available' : 'not available';\n};\n\n/**\n * Pretty prints a trigger with ANSI colors.\n */\nexport const printTrigger = Effect.fn(function* (trigger: Trigger.Trigger, remoteStatus?: TriggerRemoteStatus) {\n const fn = trigger.function && (yield* Database.load(trigger.function));\n\n return FormBuilder.make({\n title: trigger.id,\n }).pipe(\n FormBuilder.set(\n 'status',\n trigger.enabled ? 'enabled' : 'disabled',\n trigger.enabled ? Ansi.green : Ansi.blackBright,\n ),\n FormBuilder.option('kind', Option.fromNullable(trigger.spec?.kind)),\n FormBuilder.option(\n 'remote',\n Option.fromNullable(remoteStatus),\n Match.type<TriggerRemoteStatus>().pipe(\n Match.withReturnType<Ansi.Ansi>(),\n Match.when('available', () => Ansi.green),\n Match.when('not available', () => Ansi.yellow),\n Match.when('n/a', () => Ansi.blackBright),\n Match.exhaustive,\n ),\n ),\n FormBuilder.when(\n fn,\n FormBuilder.nest(\n 'function',\n FormBuilder.make().pipe(\n FormBuilder.set('key', Obj.getMeta(fn as Operation.PersistentOperation).key),\n FormBuilder.set('dxn', Obj.getURI(fn as Obj.Unknown)),\n ),\n ),\n ),\n FormBuilder.nestedOption('spec', Option.fromNullable(trigger.spec).pipe(Option.map(printSpec))),\n FormBuilder.build,\n );\n});\n\nconst printSpec = <T extends Trigger.Spec>(spec: T): FormBuilder.FormBuilder => {\n switch (spec.kind) {\n case 'timer':\n return printTimer(spec);\n case 'subscription':\n return printSubscription(spec);\n case 'webhook':\n return printWebhook(spec);\n case 'feed':\n return printFeed(spec);\n default:\n return FormBuilder.make({}).pipe(FormBuilder.set('unknown', 'Unknown spec type'));\n }\n};\n\nconst printTimer = (spec: Trigger.TimerSpec) => FormBuilder.make({}).pipe(FormBuilder.set('cron', spec.cron));\n\nconst printSubscription = (spec: Trigger.SubscriptionSpec) =>\n FormBuilder.make({}).pipe(FormBuilder.set('query', spec.query?.raw ?? '[Query AST]'));\n\nconst printWebhook = (spec: Trigger.WebhookSpec) =>\n FormBuilder.make({}).pipe(FormBuilder.set('method', spec.method), FormBuilder.set('port', spec.port));\n\nconst printFeed = (spec: Trigger.FeedSpec) =>\n FormBuilder.make({}).pipe(FormBuilder.set('feed', spec.feed ? spec.feed.uri.toString() : '(none)'));\n\n/**\n * Prompts for input values based on an Effect schema.\n * First shows a multi-select to choose which properties to specify,\n * then prompts for values of the selected properties.\n * Required properties are automatically included and cannot be unselected.\n * @param schema - The Effect schema to prompt for\n * @param defaults - Optional default values to use as initial values and pre-select optional properties\n */\nexport const promptForSchemaInput = Effect.fn(function* (\n schema: Schema.Schema.AnyNoContext | undefined,\n defaults?: Record<string, any> | undefined,\n) {\n if (!schema) {\n return {};\n }\n\n const ast = schema.ast;\n\n // Check if it's a struct/object type\n if (!SchemaAST.isTypeLiteral(ast)) {\n return {};\n }\n\n const properties = getProperties(ast);\n if (properties.length === 0) {\n return {};\n }\n\n // Separate required and optional properties\n const requiredProperties: typeof properties = [];\n const optionalProperties: typeof properties = [];\n\n for (const prop of properties) {\n if (prop.isOptional) {\n optionalProperties.push(prop);\n } else {\n requiredProperties.push(prop);\n }\n }\n\n // Build property info\n const propertyInfo = properties.map((prop) => {\n const key = prop.name.toString();\n return {\n prop,\n key,\n isRequired: !prop.isOptional,\n };\n });\n\n // Multi-select: show all properties and let user select which optional ones to include\n const selectedKeys = new Set<string>();\n\n // Required properties are automatically selected\n for (const info of propertyInfo) {\n if (info.isRequired) {\n selectedKeys.add(info.key);\n }\n }\n\n // Show required properties that will be automatically included\n if (requiredProperties.length > 0) {\n const requiredNames = requiredProperties.map((p) => {\n const info = propertyInfo.find((i) => i.prop === p);\n return info?.key ?? p.name.toString();\n });\n yield* Console.log(`Required properties (will be included): ${requiredNames.join(', ')}`);\n }\n\n // For optional properties, use multi-select to choose which ones to include\n if (optionalProperties.length > 0) {\n const optionalInfo = propertyInfo.filter((info) => !info.isRequired);\n const choices = optionalInfo.map((info) => {\n const hasDefault = defaults?.[info.key] !== undefined;\n const defaultText = hasDefault ? ` (current: ${JSON.stringify(defaults[info.key])})` : '';\n return {\n title: `${info.key}${defaultText}`,\n value: info.key,\n description: hasDefault ? 'Has default value' : undefined,\n };\n });\n\n const selected = yield* Prompt.multiSelect({\n message: 'Select optional properties to include:',\n choices,\n });\n\n // Add selected optional properties to selectedKeys\n for (const key of selected) {\n selectedKeys.add(String(key));\n }\n }\n\n // If no properties selected (shouldn't happen if there are required ones), return empty\n if (selectedKeys.size === 0) {\n return {};\n }\n\n // Prompt for values of selected properties\n const inputObj: Record<string, any> = {};\n\n for (const info of propertyInfo) {\n if (!selectedKeys.has(info.key)) {\n continue;\n }\n\n const key = info.key;\n const propType = info.prop.type;\n const schemaDefault = Option.getOrUndefined(SchemaAST.getDefaultAnnotation(propType));\n const defaultValue = defaults?.[key] ?? schemaDefault;\n\n if (SchemaAST.isBooleanKeyword(propType)) {\n const initialValue =\n typeof defaultValue === 'boolean' ? defaultValue : typeof schemaDefault === 'boolean' ? schemaDefault : false;\n const value = yield* Prompt.confirm({\n message: `${info.key}${defaults?.[key] !== undefined ? ` (current: ${defaults[key]})` : ''}:`,\n initial: initialValue,\n });\n inputObj[key] = value;\n } else if (SchemaAST.isNumberKeyword(propType)) {\n const currentValue = typeof defaultValue === 'number' ? String(defaultValue) : '';\n const valueStr = yield* Prompt.text({\n message: `${info.key}${currentValue ? ` (current: ${currentValue}, press Enter to keep)` : ''}:`,\n }).pipe(Prompt.run);\n inputObj[key] = valueStr === '' && defaultValue !== undefined ? defaultValue : parseFloat(valueStr) || 0;\n } else if (SchemaAST.isStringKeyword(propType)) {\n const currentValue = typeof defaultValue === 'string' ? defaultValue : '';\n const valueStr = yield* Prompt.text({\n message: `${info.key}${currentValue ? ` (current: ${currentValue}, press Enter to keep)` : ''}:`,\n }).pipe(Prompt.run);\n inputObj[key] = valueStr === '' && defaultValue !== undefined ? defaultValue : valueStr;\n } else if (Ref.isRefType(propType)) {\n const isDefaultTemplate =\n typeof defaultValue === 'string' && defaultValue.startsWith('{{') && defaultValue.endsWith('}}');\n const useTemplate = yield* Prompt.confirm({\n message: `Use a template to specify ${info.key}?${isDefaultTemplate ? ' (current: template)' : ''}`,\n initial: isDefaultTemplate,\n });\n if (useTemplate) {\n const currentValue = typeof defaultValue === 'string' ? defaultValue : '';\n const templateStr = yield* Prompt.text({\n message: `${info.key} template${currentValue ? ` (current: ${currentValue}, press Enter to keep)` : ''}:`,\n }).pipe(Prompt.run);\n inputObj[key] = templateStr === '' && defaultValue !== undefined ? defaultValue : templateStr;\n } else {\n const annotation = Annotation.ReferenceAnnotation.getFromAst(propType).pipe(Option.getOrThrow);\n const objects = yield* Database.runQuery(Filter.typename(annotation.typename));\n if (objects.length === 0) {\n inputObj[key] = undefined;\n } else {\n const selected = yield* Prompt.select({\n message: `Select ${info.key}:`,\n choices: objects.map((obj: Entity.Any) => ({\n title: Entity.getLabel(obj) ?? obj.id,\n value: Ref.make(obj),\n description: Entity.getDescription(obj),\n })),\n });\n inputObj[key] = selected;\n }\n }\n } else {\n // For other types, prompt as string and let validation handle it\n const currentValue = defaultValue !== undefined ? String(defaultValue) : '';\n const valueStr = yield* Prompt.text({\n message: `${info.key}${currentValue ? ` (current: ${currentValue}, press Enter to keep)` : ''}:`,\n }).pipe(Prompt.run);\n inputObj[key] = valueStr === '' && defaultValue !== undefined ? defaultValue : valueStr;\n }\n }\n\n return inputObj;\n});\n\n/**\n * Selects a function interactively from available functions in the database.\n * Queries the database for functions and prompts the user to select one.\n */\nexport const selectFunction = Effect.fn(function* () {\n const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));\n\n if (functions.length === 0) {\n return yield* Effect.fail(new Error('No functions available'));\n }\n\n const selected = yield* Prompt.select({\n message: 'Select a function:',\n choices: functions.map((fn: Operation.PersistentOperation) => ({\n title: fn.name ?? fn.id,\n value: fn.id,\n description: fn.description,\n })),\n });\n\n return String(selected);\n});\n\n/**\n * Selects a trigger interactively from available triggers.\n * If kind is provided, filters triggers by that kind.\n * Queries the database for triggers and prompts the user to select one.\n */\nexport const selectTrigger = Effect.fn(function* (kind?: Trigger.Kind) {\n const triggers = yield* Database.runQuery(\n Query.select(Filter.type(Trigger.Trigger)).debugLabel('cli.trigger.selectTrigger'),\n );\n const filteredTriggers = kind ? triggers.filter((trigger) => trigger.spec?.kind === kind) : triggers;\n\n if (filteredTriggers.length === 0) {\n return yield* Effect.fail(new Error(kind ? `No ${kind} triggers available` : 'No triggers available'));\n }\n\n const choices = yield* Effect.all(\n filteredTriggers.map((trigger) =>\n Effect.gen(function* () {\n const fn = trigger.function ? yield* Database.load(trigger.function) : undefined;\n const functionName =\n fn && Obj.instanceOf(Operation.PersistentOperation, fn)\n ? (fn.name ?? Obj.getMeta(fn).key ?? fn.id)\n : undefined;\n const title = functionName ?? trigger.id;\n const description = `${trigger.enabled ? 'enabled' : 'disabled'} - ${trigger.spec?.kind ?? 'unknown'}`;\n\n return {\n title,\n value: trigger.id,\n description,\n };\n }),\n ),\n );\n\n const selected = yield* Prompt.select({\n message: kind ? `Select a ${kind} trigger:` : 'Select a trigger:',\n choices,\n });\n\n return String(selected);\n});\n\n/**\n * Selects a feed interactively from available feeds in the database.\n * Queries schemas with FeedAnnotation, then queries objects of those types,\n * and returns the chosen Feed object.\n */\nexport const selectFeed = Effect.fn(function* () {\n // Query schema registry for schemas with FeedAnnotation.\n const schemas = yield* Database.runSchemaQuery({ location: ['database', 'runtime'] });\n\n // Filter schemas that have FeedAnnotation.\n const feedSchemas = schemas.filter((type) => {\n const schema = Type.getSchema(type);\n const annotation = FeedAnnotation.get(schema);\n return Option.isSome(annotation) && annotation.value === true;\n });\n\n if (feedSchemas.length === 0) {\n return yield* Effect.fail(new Error('No schemas with Feed annotation found'));\n }\n\n // Collect all Feed objects referenced by host objects.\n const feedChoices: Array<{ title: string; value: Feed.Feed; description?: string }> = [];\n\n // Process each feed schema, resolving the Feed object reference.\n for (const schema of feedSchemas) {\n yield* Effect.gen(function* () {\n const typename = Type.getTypename(schema);\n const objects = yield* Database.runQuery(Filter.type(typename));\n\n for (const obj of objects) {\n // Access the feed property (which is a Ref<Feed>).\n const feedRef = (obj as any).feed as Ref.Ref<any> | undefined;\n if (!feedRef) {\n continue;\n }\n\n const feedObj = yield* Effect.promise(() => feedRef.tryLoad());\n if (!feedObj || !Obj.instanceOf(Feed.Feed, feedObj)) {\n continue;\n }\n\n const label = Obj.getLabel(obj) ?? obj.id;\n const description = Obj.getTypename(obj);\n\n feedChoices.push({\n title: label,\n value: feedObj,\n description,\n });\n }\n }).pipe(Effect.catchAll(() => Effect.void));\n }\n\n if (feedChoices.length === 0) {\n return yield* Effect.fail(new Error('No objects with feed properties found'));\n }\n\n const selected = yield* Prompt.select({\n message: 'Select a feed:',\n choices: feedChoices,\n });\n\n return selected as Feed.Feed;\n});\n\n/**\n * Pretty prints trigger removal result with ANSI colors.\n */\nexport const printTriggerRemoved = (id: string) =>\n FormBuilder.make({ title: 'Trigger removed' }).pipe(FormBuilder.set('id', id), FormBuilder.build);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as HashMap from 'effect/HashMap';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';\nimport { Common } from '@dxos/cli-util';\nimport { Operation, Trigger } from '@dxos/compute';\nimport { Database, Filter, JsonSchema, Query, Ref } from '@dxos/echo';\n\nimport { Deep, Delay, Enabled, Input, Typename } from '../options';\nimport { printTrigger, promptForSchemaInput, selectFunction } from '../util';\n\nexport const subscription = Command.make(\n 'subscription',\n {\n spaceId: Common.spaceId.pipe(Options.optional),\n enabled: Enabled,\n functionId: Common.functionId.pipe(Options.optional),\n typename: Typename.pipe(Options.optional),\n deep: Deep.pipe(Options.optional),\n delay: Delay.pipe(Options.optional),\n input: Input.pipe(Options.optional),\n },\n (options) =>\n Effect.gen(function* () {\n const { json } = yield* CommandConfig;\n\n const functionId = yield* Option.match(options.functionId, {\n onNone: () => selectFunction(),\n onSome: (id) => Effect.succeed(id),\n });\n const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));\n const fn = functions.find((fn) => fn.id === functionId);\n if (!fn) {\n return yield* Effect.fail(new Error(`Function not found: ${functionId}`));\n }\n\n const typename = yield* Option.match(options.typename, {\n onNone: () =>\n Prompt.text({\n message: 'Enter type name:',\n }).pipe(Prompt.run),\n onSome: (value) => Effect.succeed(value),\n });\n const subscriptionQuery = Query.select(Filter.type(typename));\n\n const deepOption = yield* Option.match(options.deep, {\n onNone: () =>\n Prompt.confirm({\n message: 'Watch changes to nested properties (deep)?',\n initial: false,\n }).pipe(\n Prompt.run,\n Effect.map((value) => (value ? Option.some(value) : Option.none())),\n ),\n onSome: () => Effect.succeed(Option.some(true)),\n });\n\n const delayOption = yield* Option.match(options.delay, {\n onNone: () =>\n Effect.gen(function* () {\n const delayStr = yield* Prompt.text({\n message: 'Debounce delay in milliseconds (optional, press Enter to skip):',\n }).pipe(Prompt.run);\n return delayStr === '' ? Option.none<number>() : Option.some(parseInt(delayStr, 10));\n }),\n onSome: (value) => Effect.succeed(Option.some(value)),\n });\n\n const subscriptionOptions: { deep?: boolean; delay?: number } = {};\n if (Option.isSome(deepOption)) {\n subscriptionOptions.deep = deepOption.value;\n }\n if (Option.isSome(delayOption)) {\n subscriptionOptions.delay = delayOption.value;\n }\n\n const input = yield* Option.match(options.input, {\n onNone: () => promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined),\n onSome: (value) => Effect.succeed(Object.fromEntries(HashMap.toEntries(value))),\n });\n\n // Always prompt for enabled if functionId is not provided.\n const enabled = yield* Option.match(options.functionId, {\n onNone: () =>\n Prompt.confirm({\n message: 'Enable the trigger?',\n initial: true,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(options.enabled),\n });\n\n const trigger = Trigger.make({\n function: Ref.make(fn),\n enabled,\n spec: Trigger.specSubscription(\n subscriptionQuery,\n Object.keys(subscriptionOptions).length > 0 ? subscriptionOptions : undefined,\n ),\n input,\n });\n yield* Database.add(trigger);\n\n if (json) {\n yield* Console.log(JSON.stringify(trigger, null, 2));\n } else {\n yield* Console.log(print(yield* printTrigger(trigger)));\n }\n\n yield* flushAndSync({ indexes: true });\n }),\n).pipe(\n Command.withDescription('Create a subscription trigger.'),\n Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),\n Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as HashMap from 'effect/HashMap';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';\nimport { Common } from '@dxos/cli-util';\nimport { Operation, Trigger } from '@dxos/compute';\nimport { Database, Filter, JsonSchema, Ref } from '@dxos/echo';\n\nimport { Cron, Enabled, Input } from '../options';\nimport { printTrigger, promptForSchemaInput, selectFunction } from '../util';\n\n// trigger create timer --cron \"0 0 * * *\" --functionId <functionId>\nexport const timer = Command.make(\n 'timer',\n {\n spaceId: Common.spaceId.pipe(Options.optional),\n enabled: Enabled,\n functionId: Common.functionId.pipe(Options.optional),\n cron: Cron.pipe(Options.optional),\n input: Input.pipe(Options.optional),\n },\n (options) =>\n Effect.gen(function* () {\n const { json } = yield* CommandConfig;\n\n const functionId = yield* Option.match(options.functionId, {\n onNone: () => selectFunction(),\n onSome: (id) => Effect.succeed(id),\n });\n const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));\n const fn = functions.find((fn) => fn.id === functionId);\n if (!fn) {\n return yield* Effect.fail(new Error(`Function not found: ${functionId}`));\n }\n\n const cron = yield* Option.match(options.cron, {\n onNone: () =>\n Prompt.text({\n message: 'Enter cron expression:',\n }).pipe(Prompt.run),\n onSome: (value) => Effect.succeed(value),\n });\n\n const input = yield* Option.match(options.input, {\n onNone: () => promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined),\n onSome: (value) => Effect.succeed(Object.fromEntries(HashMap.toEntries(value))),\n });\n\n // Always prompt for enabled if functionId is not provided.\n const enabled = yield* Option.match(options.functionId, {\n onNone: () =>\n Prompt.confirm({\n message: 'Enable the trigger?',\n initial: true,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(options.enabled),\n });\n\n const trigger = Trigger.make({\n function: Ref.make(fn),\n enabled,\n spec: Trigger.specTimer(cron),\n input,\n });\n\n yield* Database.add(trigger);\n\n if (json) {\n yield* Console.log(JSON.stringify(trigger, null, 2));\n } else {\n yield* Console.log(print(yield* printTrigger(trigger)));\n }\n\n yield* flushAndSync({ indexes: true });\n }),\n).pipe(\n Command.withDescription('Create a timer trigger.'),\n Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),\n Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig, Common, printList, spaceIdWithDefault, spaceLayer } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport { Trigger } from '@dxos/compute';\nimport { Context } from '@dxos/context';\nimport { Database, Filter, Query } from '@dxos/echo';\n\nimport { getTriggerRemoteStatus, printTrigger } from './util';\n\nexport const list = Command.make(\n 'list',\n {\n spaceId: Common.spaceId.pipe(Options.optional),\n },\n Effect.fn(function* ({ spaceId: spaceIdOption }) {\n const { json } = yield* CommandConfig;\n\n // Fetch local triggers\n const triggers = yield* Database.runQuery(\n Query.select(Filter.type(Trigger.Trigger)).debugLabel('cli.trigger.list'),\n );\n\n // Fetch remote cron triggers to check availability\n const remoteCronIds = yield* Effect.gen(function* () {\n const client = yield* ClientService;\n const spaceId = yield* spaceIdWithDefault(spaceIdOption);\n const result = yield* Effect.promise(() => client.edge.http.getCronTriggers(Context.default(), spaceId)).pipe(\n Effect.catchAll(() => Effect.succeed({ cronIds: [] })),\n );\n return result.cronIds;\n });\n\n // Determine remote status for each trigger\n const triggersWithStatus = triggers.map((trigger) => ({\n trigger,\n remoteStatus: getTriggerRemoteStatus(trigger, remoteCronIds),\n }));\n\n // Print triggers\n if (json) {\n yield* Console.log(\n JSON.stringify(\n triggersWithStatus.map(({ trigger, remoteStatus }) => ({ ...trigger, remoteStatus })),\n null,\n 2,\n ),\n );\n } else {\n if (triggersWithStatus.length === 0) {\n yield* Console.log('No triggers found.');\n } else {\n const items = yield* Effect.all(\n triggersWithStatus.map(({ trigger, remoteStatus }) => printTrigger(trigger, remoteStatus)),\n );\n yield* Console.log(printList(items));\n }\n }\n }),\n).pipe(\n Command.withDescription('List triggers configured on EDGE.'),\n Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig, Common, print, spaceLayer, withTypes } from '@dxos/cli-util';\nimport { Trigger } from '@dxos/compute';\nimport { Database, Ref } from '@dxos/echo';\nimport { EchoURI } from '@dxos/keys';\n\nimport { TriggerId } from './options';\nimport { printTriggerRemoved, selectTrigger } from './util';\n\nexport const remove = Command.make(\n 'remove',\n {\n spaceId: Common.spaceId.pipe(Options.optional),\n id: TriggerId.pipe(Options.optional),\n },\n (options) =>\n Effect.gen(function* () {\n const { json } = yield* CommandConfig;\n const triggerId = yield* Option.match(options.id, {\n onNone: () => selectTrigger(),\n onSome: (id) => Effect.succeed(id),\n });\n const dxn = EchoURI.make({ objectId: triggerId });\n const trigger = yield* Database.resolve(Ref.fromURI(dxn), Trigger.Trigger);\n yield* Database.remove(trigger);\n if (json) {\n yield* Console.log(JSON.stringify({ id: trigger.id, removed: true }, null, 2));\n } else {\n yield* Console.log(print(printTriggerRemoved(trigger.id)));\n }\n }),\n).pipe(\n Command.withDescription('Remove a trigger.'),\n Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),\n Command.provideEffectDiscard(() => withTypes(Trigger.Trigger)),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { queue } from './queue';\nimport { subscription } from './subscription';\nimport { timer } from './timer';\n\nexport const update = Command.make('update').pipe(\n Command.withDescription('Update a trigger.'),\n Command.withSubcommands([subscription, timer, queue]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';\nimport { Common } from '@dxos/cli-util';\nimport { Operation, Trigger } from '@dxos/compute';\nimport { Database, Feed as FeedNs, Filter, JsonSchema, Obj, Ref } from '@dxos/echo';\nimport { EchoURI, type ObjectId } from '@dxos/keys';\n\nimport { Enabled, Feed, Input, TriggerId } from '../options';\nimport { printTrigger, promptForSchemaInput, selectFunction, selectFeed, selectTrigger } from '../util';\n\nexport const queue = Command.make(\n 'feed',\n {\n spaceId: Common.spaceId.pipe(Options.optional),\n id: TriggerId.pipe(Options.optional),\n enabled: Enabled,\n functionId: Common.functionId.pipe(Options.optional),\n feed: Feed.pipe(Options.optional),\n input: Input.pipe(Options.optional),\n },\n (options) =>\n Effect.gen(function* () {\n const { json } = yield* CommandConfig;\n const triggerId = yield* Option.match(options.id, {\n onNone: () => selectTrigger('feed'),\n onSome: (id) => Effect.succeed(id),\n });\n const dxn = EchoURI.make({ objectId: triggerId as ObjectId });\n const trigger = yield* Database.resolve(dxn, Trigger.Trigger);\n if (trigger.spec?.kind !== 'feed') {\n return yield* Effect.fail(new Error(`Invalid trigger type: ${trigger.spec?.kind}`));\n }\n\n const currentFn = yield* updateFunction(trigger, options.functionId);\n yield* updateFeed(trigger, options.feed);\n yield* updateInput(trigger, currentFn, options.input);\n yield* updateEnabled(trigger, options.id, options.enabled);\n\n if (json) {\n yield* Console.log(JSON.stringify(trigger, null, 2));\n } else {\n yield* Console.log(print(yield* printTrigger(trigger)));\n }\n\n yield* flushAndSync({ indexes: true });\n }),\n).pipe(\n Command.withDescription('Update a feed trigger.'),\n Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),\n Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),\n);\n\n/**\n * Handles updating the function for a trigger.\n * Prompts for confirmation if functionId is not provided, then updates the function if confirmed.\n * @returns The current function (either original or newly assigned)\n */\nconst updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionIdOption: Option.Option<string>) {\n let currentFn: Operation.PersistentOperation | undefined = trigger.function\n ? yield* Database.load(trigger.function) as any\n : undefined;\n if (currentFn && !Obj.instanceOf(Operation.PersistentOperation, currentFn)) {\n currentFn = undefined;\n }\n const currentFunctionName = currentFn ? (currentFn.name ?? currentFn.id) : undefined;\n const shouldChangeFunction = yield* Option.match(functionIdOption, {\n onNone: () =>\n Prompt.confirm({\n message: `Change the function${currentFunctionName ? ` (current: ${currentFunctionName})` : ''}?`,\n initial: false,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(true),\n });\n if (shouldChangeFunction) {\n const functionId = yield* Option.match(functionIdOption, {\n onNone: () => selectFunction(),\n onSome: (id) => Effect.succeed(id),\n });\n const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));\n const foundFn = functions.find((fn) => fn.id === functionId);\n if (!foundFn || !Obj.instanceOf(Operation.PersistentOperation, foundFn)) {\n return yield* Effect.fail(new Error(`Function not found: ${functionId}`));\n }\n Obj.update(trigger, (trigger) => {\n trigger.function = Ref.make(foundFn);\n });\n currentFn = foundFn;\n }\n\n if (!currentFn) {\n const functionId = (trigger.function ? trigger.function.uri.toString() : undefined) ?? 'unknown';\n return yield* Effect.fail(new Error(`Invalid reference for ${functionId}`));\n }\n\n return currentFn;\n});\n\n/**\n * Handles updating the feed reference for a feed trigger.\n * Prompts for confirmation if feed is not provided, then updates the feed if confirmed.\n */\nconst updateFeed = Effect.fn(function* (trigger: Trigger.Trigger, feedOption: Option.Option<string>) {\n const currentFeed = trigger.spec?.kind === 'feed' ? trigger.spec.feed : undefined;\n const currentFeedStr = currentFeed ? currentFeed.uri.toString() : undefined;\n const shouldChangeFeed = yield* Option.match(feedOption, {\n onNone: () =>\n Prompt.confirm({\n message: `Change the feed${currentFeedStr ? ` (current: ${currentFeedStr})` : ''}?`,\n initial: false,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(true),\n });\n if (shouldChangeFeed) {\n const feed = yield* Option.match(feedOption, {\n onNone: () => selectFeed(),\n onSome: (uri) => Database.resolve(EchoURI.parse(uri), FeedNs.Feed),\n });\n Obj.update(trigger, (trigger) => {\n if (trigger.spec?.kind === 'feed') {\n trigger.spec.feed = Ref.make(feed);\n }\n });\n }\n});\n\n/**\n * Handles updating the input for a trigger.\n * Prompts for confirmation if input is not provided, then updates the input if confirmed.\n */\nconst updateInput = Effect.fn(function* (\n trigger: Trigger.Trigger,\n fn: Operation.PersistentOperation,\n inputOption: Option.Option<Record<string, any>>,\n) {\n const currentInput = trigger.input as Record<string, any> | undefined;\n const currentInputStr = currentInput ? JSON.stringify(currentInput) : 'none';\n const shouldChangeInput = yield* Option.match(inputOption, {\n onNone: () =>\n Effect.gen(function* () {\n yield* Console.log(`Current input: ${currentInputStr}`);\n return yield* Prompt.confirm({\n message: 'Change input?',\n initial: false,\n }).pipe(Prompt.run);\n }),\n onSome: () => Effect.succeed(true),\n });\n if (shouldChangeInput) {\n const inputObj = yield* Option.match(inputOption, {\n onNone: () =>\n promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined, currentInput),\n onSome: (value) => Effect.succeed(value as Record<string, any>),\n });\n Obj.update(trigger, (trigger) => {\n trigger.input = inputObj;\n });\n }\n});\n\n/**\n * Handles updating the enabled status for a trigger.\n * Prompts for enabled if id is not provided.\n */\nconst updateEnabled = Effect.fn(function* (\n trigger: Trigger.Trigger,\n idOption: Option.Option<string>,\n enabled: boolean,\n) {\n const enabledValue = yield* Option.match(idOption, {\n onNone: () =>\n Prompt.confirm({\n message: 'Enable the trigger?',\n initial: trigger.enabled,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(enabled),\n });\n Obj.update(trigger, (trigger) => {\n trigger.enabled = enabledValue;\n });\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';\nimport { Common } from '@dxos/cli-util';\nimport { Operation, Trigger } from '@dxos/compute';\nimport { Database, Filter, JsonSchema, Obj, Query, Ref } from '@dxos/echo';\nimport { DXN, EchoURI } from '@dxos/keys';\n\nimport { Deep, Delay, Enabled, Input, TriggerId, Typename } from '../options';\nimport { printTrigger, promptForSchemaInput, selectFunction, selectTrigger } from '../util';\n\nexport const subscription = Command.make(\n 'subscription',\n {\n spaceId: Common.spaceId.pipe(Options.optional),\n id: TriggerId.pipe(Options.optional),\n enabled: Enabled,\n functionId: Common.functionId.pipe(Options.optional),\n typename: Typename.pipe(Options.optional),\n deep: Deep.pipe(Options.optional),\n delay: Delay.pipe(Options.optional),\n input: Input.pipe(Options.optional),\n },\n (options) =>\n Effect.gen(function* () {\n const { json } = yield* CommandConfig;\n\n const triggerId = yield* Option.match(options.id, {\n onNone: () => selectTrigger('subscription'),\n onSome: (id) => Effect.succeed(id),\n });\n const dxn = EchoURI.make({ objectId: triggerId });\n const trigger = yield* Database.resolve(Ref.fromURI(dxn), Trigger.Trigger);\n if (trigger.spec?.kind !== 'subscription') {\n return yield* Effect.fail(new Error(`Invalid trigger type: ${trigger.spec?.kind}`));\n }\n\n const currentFn = yield* updateFunction(trigger, options.functionId);\n yield* updateSpec(trigger, options.typename, options.deep, options.delay);\n yield* updateInput(trigger, currentFn, options.input);\n yield* updateEnabled(trigger, options.id, options.enabled);\n\n if (json) {\n yield* Console.log(JSON.stringify(trigger, null, 2));\n } else {\n yield* Console.log(print(yield* printTrigger(trigger)));\n }\n\n yield* flushAndSync({ indexes: true });\n }),\n).pipe(\n Command.withDescription('Update a subscription trigger.'),\n Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),\n Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),\n);\n\n/**\n * Extracts the current typename from a subscription trigger's query AST.\n */\nconst extractCurrentTypename = (spec: Trigger.SubscriptionSpec | undefined): Option.Option<string> => {\n if (!spec?.query?.ast) {\n return Option.none();\n }\n return Match.value(spec.query.ast).pipe(\n Match.withReturnType<Option.Option<string>>(),\n Match.when({ type: 'select' }, (q) =>\n Match.value(q.filter).pipe(\n Match.withReturnType<Option.Option<string>>(),\n Match.when({ type: 'object' }, (f) =>\n Option.fromNullable(f.typename).pipe(\n Option.flatMap((dxn) => Option.fromNullable(DXN.isDXN(dxn) ? DXN.getName(dxn) : undefined)),\n ),\n ),\n Match.orElse(() => Option.none()),\n ),\n ),\n Match.orElse(() => Option.none()),\n );\n};\n\n/**\n * Handles updating the function for a trigger.\n * Prompts for confirmation if functionId is not provided, then updates the function if confirmed.\n * @returns The current function (either original or newly assigned)\n */\nconst updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionIdOption: Option.Option<string>) {\n let currentFn: Operation.PersistentOperation | undefined = trigger.function\n ? yield* Database.load(trigger.function) as any\n : undefined;\n if (currentFn && !Obj.instanceOf(Operation.PersistentOperation, currentFn)) {\n currentFn = undefined;\n }\n const currentFunctionName = currentFn ? (currentFn.name ?? currentFn.id) : undefined;\n const shouldChangeFunction = yield* Option.match(functionIdOption, {\n onNone: () =>\n Prompt.confirm({\n message: `Change the function${currentFunctionName ? ` (current: ${currentFunctionName})` : ''}?`,\n initial: false,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(true),\n });\n if (shouldChangeFunction) {\n const functionId = yield* Option.match(functionIdOption, {\n onNone: () => selectFunction(),\n onSome: (id) => Effect.succeed(id),\n });\n const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));\n const foundFn = functions.find((fn) => fn.id === functionId);\n if (!foundFn || !Obj.instanceOf(Operation.PersistentOperation, foundFn)) {\n return yield* Effect.fail(new Error(`Function not found: ${functionId}`));\n }\n Obj.update(trigger, (trigger) => {\n trigger.function = Ref.make(foundFn);\n });\n currentFn = foundFn;\n }\n\n if (!currentFn) {\n const functionId =\n (trigger.function ? EchoURI.getObjectId(EchoURI.tryParse(trigger.function.uri)!) : undefined) ?? 'unknown';\n return yield* Effect.fail(new Error(`Invalid reference for ${functionId}`));\n }\n\n return currentFn;\n});\n\n/**\n * Handles updating the subscription trigger spec (typename, deep, delay).\n * Prompts for confirmation if no spec options are provided, then updates the spec if confirmed.\n */\nconst updateSpec = Effect.fn(function* (\n trigger: Trigger.Trigger,\n typenameOption: Option.Option<string>,\n deepOption: Option.Option<boolean>,\n delayOption: Option.Option<number>,\n) {\n const currentSpec = trigger.spec?.kind === 'subscription' ? trigger.spec : undefined;\n const currentTypename = extractCurrentTypename(currentSpec);\n const currentTypenameStr = Option.getOrUndefined(currentTypename);\n const currentDeep = currentSpec?.options?.deep;\n const currentDelay = currentSpec?.options?.delay;\n const specParts: string[] = [];\n if (currentTypenameStr) {\n specParts.push(`typename: ${currentTypenameStr}`);\n }\n if (currentDeep !== undefined) {\n specParts.push(`deep: ${currentDeep}`);\n }\n if (currentDelay !== undefined) {\n specParts.push(`delay: ${currentDelay}`);\n }\n const currentSpecStr = specParts.length > 0 ? specParts.join(', ') : 'none';\n\n const hasSpecOption = Option.isSome(typenameOption) || Option.isSome(deepOption) || Option.isSome(delayOption);\n const shouldChangeSpec = yield* hasSpecOption\n ? Effect.succeed(true)\n : Prompt.confirm({\n message: `Change the trigger spec (current: ${currentSpecStr})?`,\n initial: false,\n }).pipe(Prompt.run);\n if (shouldChangeSpec) {\n const typename = yield* Option.match(typenameOption, {\n onNone: () =>\n Prompt.text({\n message: `Enter type name${currentTypenameStr ? ` (current: ${currentTypenameStr})` : ''}:`,\n }).pipe(Prompt.run),\n onSome: (value) => Effect.succeed(value),\n });\n const queryAst = Query.select(Filter.type(typename)).ast;\n\n const deepOptionValue = yield* Option.match(deepOption, {\n onNone: () =>\n Prompt.confirm({\n message: 'Watch changes to nested properties (deep)?',\n initial: currentSpec?.options?.deep ?? false,\n }).pipe(\n Prompt.run,\n Effect.map((value) => (value ? Option.some(value) : Option.none())),\n ),\n onSome: () => Effect.succeed(Option.some(true)),\n });\n\n const delayOptionValue = yield* Option.match(delayOption, {\n onNone: () =>\n Effect.gen(function* () {\n const currentDelay = currentSpec?.options?.delay;\n const delayStr = yield* Prompt.text({\n message: `Debounce delay in milliseconds (optional, press Enter to skip)${currentDelay ? ` (current: ${currentDelay})` : ''}:`,\n }).pipe(Prompt.run);\n return delayStr === '' ? Option.none<number>() : Option.some(parseInt(delayStr, 10));\n }),\n onSome: (value) => Effect.succeed(Option.some(value)),\n });\n\n const subscriptionOptions: { deep?: boolean; delay?: number } = {};\n if (Option.isSome(deepOptionValue)) {\n subscriptionOptions.deep = deepOptionValue.value;\n }\n if (Option.isSome(delayOptionValue)) {\n subscriptionOptions.delay = delayOptionValue.value;\n }\n\n Obj.update(trigger, (trigger) => {\n const spec = trigger.spec;\n if (spec?.kind === 'subscription') {\n // Cast needed because QueryAST types are deeply readonly but spec.query expects mutable.\n spec.query = { ast: queryAst } as NonNullable<typeof spec.query>;\n spec.options = Object.keys(subscriptionOptions).length > 0 ? subscriptionOptions : undefined;\n }\n });\n }\n});\n\n/**\n * Handles updating the input for a trigger.\n * Prompts for confirmation if input is not provided, then updates the input if confirmed.\n */\nconst updateInput = Effect.fn(function* (\n trigger: Trigger.Trigger,\n fn: Operation.PersistentOperation,\n inputOption: Option.Option<Record<string, any>>,\n) {\n const currentInput = trigger.input as Record<string, any> | undefined;\n const currentInputStr = currentInput ? JSON.stringify(currentInput) : 'none';\n const shouldChangeInput = yield* Option.match(inputOption, {\n onNone: () =>\n Effect.gen(function* () {\n yield* Console.log(`Current input: ${currentInputStr}`);\n return yield* Prompt.confirm({\n message: 'Change input?',\n initial: false,\n }).pipe(Prompt.run);\n }),\n onSome: () => Effect.succeed(true),\n });\n if (shouldChangeInput) {\n const inputObj = yield* Option.match(inputOption, {\n onNone: () =>\n promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined, currentInput),\n onSome: (value) => Effect.succeed(value as Record<string, any>),\n });\n Obj.update(trigger, (trigger) => {\n trigger.input = inputObj;\n });\n }\n});\n\n/**\n * Handles updating the enabled status for a trigger.\n * Prompts for enabled if id is not provided.\n */\nconst updateEnabled = Effect.fn(function* (\n trigger: Trigger.Trigger,\n idOption: Option.Option<string>,\n enabled: boolean,\n) {\n const enabledValue = yield* Option.match(idOption, {\n onNone: () =>\n Prompt.confirm({\n message: 'Enable the trigger?',\n initial: trigger.enabled,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(enabled),\n });\n Obj.update(trigger, (trigger) => {\n trigger.enabled = enabledValue;\n });\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';\nimport { Common } from '@dxos/cli-util';\nimport { Operation, Trigger } from '@dxos/compute';\nimport { Database, Filter, JsonSchema, Obj, Ref } from '@dxos/echo';\nimport { EchoURI } from '@dxos/keys';\n\nimport { Cron, Enabled, Input, TriggerId } from '../options';\nimport { printTrigger, promptForSchemaInput, selectFunction, selectTrigger } from '../util';\n\nexport const timer = Command.make(\n 'timer',\n {\n spaceId: Common.spaceId.pipe(Options.optional),\n id: TriggerId.pipe(Options.optional),\n enabled: Enabled,\n functionId: Common.functionId.pipe(Options.optional),\n cron: Cron.pipe(Options.optional),\n input: Input.pipe(Options.optional),\n },\n (options) =>\n Effect.gen(function* () {\n const { json } = yield* CommandConfig;\n\n const triggerId = yield* Option.match(options.id, {\n onNone: () => selectTrigger('timer'),\n onSome: (id) => Effect.succeed(id),\n });\n const dxn = EchoURI.make({ objectId: triggerId });\n const trigger = yield* Database.resolve(Ref.fromURI(dxn), Trigger.Trigger);\n if (!trigger.spec || trigger.spec?.kind !== 'timer') {\n return yield* Effect.fail(new Error(`Invalid trigger type: ${trigger.spec?.kind}`));\n }\n\n const currentFn = yield* updateFunction(trigger, options.functionId);\n yield* updateCron(trigger, options.cron);\n yield* updateInput(trigger, currentFn, options.input);\n yield* updateEnabled(trigger, options.id, options.enabled);\n\n if (json) {\n yield* Console.log(JSON.stringify(trigger, null, 2));\n } else {\n yield* Console.log(print(yield* printTrigger(trigger)));\n }\n\n yield* flushAndSync({ indexes: true });\n }),\n).pipe(\n Command.withDescription('Update a timer trigger.'),\n Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),\n Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),\n);\n\n/**\n * Handles updating the function for a trigger.\n * Prompts for confirmation if functionId is not provided, then updates the function if confirmed.\n * @returns The current function (either original or newly assigned)\n */\nconst updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionIdOption: Option.Option<string>) {\n let currentFn: Operation.PersistentOperation | undefined = trigger.function\n ? yield* Database.load(trigger.function) as any\n : undefined;\n if (currentFn && !Obj.instanceOf(Operation.PersistentOperation, currentFn)) {\n currentFn = undefined;\n }\n const currentFunctionName = currentFn ? (currentFn.name ?? currentFn.id) : undefined;\n const shouldChangeFunction = yield* Option.match(functionIdOption, {\n onNone: () =>\n Prompt.confirm({\n message: `Change the function${currentFunctionName ? ` (current: ${currentFunctionName})` : ''}?`,\n initial: false,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(true),\n });\n if (shouldChangeFunction) {\n const functionId = yield* Option.match(functionIdOption, {\n onNone: () => selectFunction(),\n onSome: (id) => Effect.succeed(id),\n });\n const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));\n const foundFn = functions.find((fn) => fn.id === functionId);\n if (!foundFn || !Obj.instanceOf(Operation.PersistentOperation, foundFn)) {\n return yield* Effect.fail(new Error(`Function not found: ${functionId}`));\n }\n Obj.update(trigger, (trigger) => {\n trigger.function = Ref.make(foundFn);\n });\n currentFn = foundFn;\n }\n\n if (!currentFn) {\n const functionId =\n (trigger.function ? EchoURI.getObjectId(EchoURI.tryParse(trigger.function.uri)!) : undefined) ?? 'unknown';\n return yield* Effect.fail(new Error(`Invalid reference for ${functionId}`));\n }\n\n return currentFn;\n});\n\n/**\n * Handles updating the cron expression for a timer trigger.\n * Prompts for confirmation if cron is not provided, then updates the cron if confirmed.\n */\nconst updateCron = Effect.fn(function* (trigger: Trigger.Trigger, cronOption: Option.Option<string>) {\n const currentCron = trigger.spec?.kind === 'timer' ? trigger.spec.cron : undefined;\n const shouldChangeCron = yield* Option.match(cronOption, {\n onNone: () =>\n Prompt.confirm({\n message: `Change the cron expression${currentCron ? ` (current: ${currentCron})` : ''}?`,\n initial: false,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(true),\n });\n if (shouldChangeCron) {\n const cron = yield* Option.match(cronOption, {\n onNone: () =>\n Prompt.text({\n message: `Enter cron expression${currentCron ? ` (current: ${currentCron})` : ''}:`,\n }).pipe(Prompt.run),\n onSome: (value) => Effect.succeed(value),\n });\n Obj.update(trigger, (trigger) => {\n if (trigger.spec?.kind === 'timer') {\n trigger.spec.cron = cron;\n }\n });\n }\n});\n\n/**\n * Handles updating the input for a trigger.\n * Prompts for confirmation if input is not provided, then updates the input if confirmed.\n */\nconst updateInput = Effect.fn(function* (\n trigger: Trigger.Trigger,\n fn: Operation.PersistentOperation,\n inputOption: Option.Option<Record<string, any>>,\n) {\n const currentInput = trigger.input as Record<string, any> | undefined;\n const currentInputStr = currentInput ? JSON.stringify(currentInput) : 'none';\n const shouldChangeInput = yield* Option.match(inputOption, {\n onNone: () =>\n Effect.gen(function* () {\n yield* Console.log(`Current input: ${currentInputStr}`);\n return yield* Prompt.confirm({\n message: 'Change input?',\n initial: false,\n }).pipe(Prompt.run);\n }),\n onSome: () => Effect.succeed(true),\n });\n if (shouldChangeInput) {\n const inputObj = yield* Option.match(inputOption, {\n onNone: () =>\n promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined, currentInput),\n onSome: (value) => Effect.succeed(value as Record<string, any>),\n });\n Obj.update(trigger, (trigger) => {\n trigger.input = inputObj;\n });\n }\n});\n\n/**\n * Handles updating the enabled status for a trigger.\n * Prompts for enabled if id is not provided.\n */\nconst updateEnabled = Effect.fn(function* (\n trigger: Trigger.Trigger,\n idOption: Option.Option<string>,\n enabled: boolean,\n) {\n const enabledValue = yield* Option.match(idOption, {\n onNone: () =>\n Prompt.confirm({\n message: 'Enable the trigger?',\n initial: trigger.enabled,\n }).pipe(Prompt.run),\n onSome: () => Effect.succeed(enabled),\n });\n Obj.update(trigger, (trigger) => {\n trigger.enabled = enabledValue;\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ActivationEvent", "ActivationEvents", "Plugin", "AppPlugin", "Operation", "Trace", "Trigger", "ClientEvents", "AppGraphBuilder", "LayerSpecs", "OperationHandler", "TriggerRuntimeController", "meta", "Command", "Command", "Command", "Options", "Prompt", "Console", "Effect", "HashMap", "Option", "CommandConfig", "flushAndSync", "print", "spaceLayer", "withTypes", "Common", "Operation", "Trigger", "Database", "Feed", "FeedNs", "Filter", "JsonSchema", "Ref", "EchoURI", "Options", "TriggerId", "text", "pipe", "withDescription", "Enabled", "boolean", "ifPresent", "Input", "keyValueMap", "Typename", "Deep", "Delay", "integer", "Cron", "Feed", "Prompt", "Ansi", "Console", "Effect", "Match", "Option", "SchemaAST", "FormBuilder", "Operation", "Trigger", "Annotation", "Database", "Entity", "Feed", "Filter", "Obj", "Query", "Ref", "Type", "getProperties", "FeedAnnotation", "getTriggerRemoteStatus", "trigger", "remoteCronIds", "spec", "kind", "includes", "id", "printTrigger", "fn", "remoteStatus", "function", "load", "make", "title", "pipe", "set", "enabled", "green", "blackBright", "option", "fromNullable", "type", "withReturnType", "when", "yellow", "exhaustive", "nest", "getMeta", "key", "getURI", "nestedOption", "map", "printSpec", "build", "printTimer", "printSubscription", "printWebhook", "printFeed", "cron", "query", "raw", "method", "port", "feed", "uri", "toString", "promptForSchemaInput", "schema", "defaults", "ast", "isTypeLiteral", "properties", "length", "requiredProperties", "optionalProperties", "prop", "isOptional", "push", "propertyInfo", "name", "isRequired", "selectedKeys", "Set", "info", "add", "requiredNames", "p", "find", "i", "log", "join", "optionalInfo", "filter", "choices", "hasDefault", "undefined", "defaultText", "JSON", "stringify", "value", "description", "selected", "multiSelect", "message", "String", "size", "inputObj", "has", "propType", "schemaDefault", "getOrUndefined", "getDefaultAnnotation", "defaultValue", "isBooleanKeyword", "initialValue", "confirm", "initial", "isNumberKeyword", "currentValue", "valueStr", "text", "run", "parseFloat", "isStringKeyword", "isRefType", "isDefaultTemplate", "startsWith", "endsWith", "useTemplate", "templateStr", "annotation", "ReferenceAnnotation", "getFromAst", "getOrThrow", "objects", "runQuery", "typename", "select", "obj", "getLabel", "getDescription", "selectFunction", "functions", "PersistentOperation", "fail", "Error", "selectTrigger", "triggers", "debugLabel", "filteredTriggers", "all", "gen", "functionName", "instanceOf", "selectFeed", "schemas", "runSchemaQuery", "location", "feedSchemas", "getSchema", "get", "isSome", "feedChoices", "getTypename", "feedRef", "feedObj", "promise", "tryLoad", "label", "catchAll", "void", "printTriggerRemoved", "queue", "make", "spaceId", "Common", "pipe", "optional", "enabled", "Enabled", "functionId", "feed", "Feed", "input", "Input", "options", "gen", "json", "CommandConfig", "match", "onNone", "selectFunction", "onSome", "id", "succeed", "functions", "Database", "runQuery", "Filter", "type", "Operation", "PersistentOperation", "fn", "find", "fail", "Error", "selectFeed", "uri", "resolve", "EchoURI", "parse", "FeedNs", "promptForSchemaInput", "inputSchema", "JsonSchema", "toEffectSchema", "undefined", "value", "Object", "fromEntries", "toEntries", "confirm", "message", "initial", "run", "trigger", "Trigger", "function", "Ref", "spec", "specFeed", "add", "log", "JSON", "stringify", "print", "printTrigger", "flushAndSync", "indexes", "withDescription", "provide", "spaceLayer", "provideEffectDiscard", "withTypes", "Command", "Options", "Prompt", "Console", "Effect", "HashMap", "Option", "CommandConfig", "flushAndSync", "print", "spaceLayer", "withTypes", "Common", "Operation", "Trigger", "Database", "Filter", "JsonSchema", "Query", "Ref", "subscription", "make", "spaceId", "Common", "pipe", "optional", "enabled", "Enabled", "functionId", "typename", "Typename", "deep", "Deep", "delay", "Delay", "input", "Input", "options", "gen", "json", "CommandConfig", "match", "onNone", "selectFunction", "onSome", "id", "succeed", "functions", "Database", "runQuery", "Filter", "type", "Operation", "PersistentOperation", "fn", "find", "fail", "Error", "text", "message", "run", "value", "subscriptionQuery", "Query", "select", "deepOption", "confirm", "initial", "map", "some", "none", "delayOption", "delayStr", "parseInt", "subscriptionOptions", "isSome", "promptForSchemaInput", "inputSchema", "JsonSchema", "toEffectSchema", "undefined", "Object", "fromEntries", "toEntries", "trigger", "Trigger", "function", "Ref", "spec", "specSubscription", "keys", "length", "add", "log", "JSON", "stringify", "print", "printTrigger", "flushAndSync", "indexes", "withDescription", "provide", "spaceLayer", "provideEffectDiscard", "withTypes", "Command", "Options", "Prompt", "Console", "Effect", "HashMap", "Option", "CommandConfig", "flushAndSync", "print", "spaceLayer", "withTypes", "Common", "Operation", "Trigger", "Database", "Filter", "JsonSchema", "Ref", "timer", "make", "spaceId", "Common", "pipe", "optional", "enabled", "Enabled", "functionId", "cron", "Cron", "input", "Input", "options", "gen", "json", "CommandConfig", "match", "onNone", "selectFunction", "onSome", "id", "succeed", "functions", "Database", "runQuery", "Filter", "type", "Operation", "PersistentOperation", "fn", "find", "fail", "Error", "text", "message", "run", "value", "promptForSchemaInput", "inputSchema", "JsonSchema", "toEffectSchema", "undefined", "Object", "fromEntries", "toEntries", "confirm", "initial", "trigger", "Trigger", "function", "Ref", "spec", "specTimer", "add", "log", "JSON", "stringify", "print", "printTrigger", "flushAndSync", "indexes", "withDescription", "provide", "spaceLayer", "provideEffectDiscard", "withTypes", "create", "make", "pipe", "withDescription", "withSubcommands", "subscription", "timer", "queue", "Command", "Options", "Console", "Effect", "CommandConfig", "Common", "printList", "spaceIdWithDefault", "spaceLayer", "ClientService", "Trigger", "Context", "Database", "Filter", "Query", "list", "Effect", "spaceId", "spaceIdOption", "json", "CommandConfig", "triggers", "Database", "remoteCronIds", "Query", "Filter", "Trigger", "spaceIdWithDefault", "result", "cronIds", "getTriggerRemoteStatus", "trigger", "remoteStatus", "triggersWithStatus", "Command", "Options", "Console", "Effect", "Option", "CommandConfig", "Common", "print", "spaceLayer", "withTypes", "Trigger", "Database", "Ref", "EchoURI", "remove", "make", "spaceId", "Common", "pipe", "optional", "id", "TriggerId", "options", "gen", "json", "CommandConfig", "triggerId", "match", "onNone", "selectTrigger", "onSome", "succeed", "dxn", "EchoURI", "objectId", "trigger", "Database", "resolve", "Ref", "fromURI", "Trigger", "log", "JSON", "stringify", "removed", "print", "printTriggerRemoved", "withDescription", "provide", "spaceLayer", "provideEffectDiscard", "withTypes", "Command", "Command", "Options", "Prompt", "Console", "Effect", "Option", "CommandConfig", "flushAndSync", "print", "spaceLayer", "withTypes", "Common", "Operation", "Trigger", "Database", "Feed", "FeedNs", "Filter", "JsonSchema", "Obj", "Ref", "EchoURI", "queue", "make", "spaceId", "Common", "pipe", "optional", "id", "TriggerId", "enabled", "Enabled", "functionId", "feed", "Feed", "input", "Input", "options", "gen", "json", "CommandConfig", "triggerId", "match", "onNone", "selectTrigger", "onSome", "succeed", "dxn", "EchoURI", "objectId", "trigger", "Database", "resolve", "Trigger", "spec", "kind", "fail", "Error", "currentFn", "updateFunction", "updateFeed", "updateInput", "updateEnabled", "log", "JSON", "stringify", "print", "printTrigger", "flushAndSync", "indexes", "withDescription", "provide", "spaceLayer", "provideEffectDiscard", "withTypes", "Operation", "PersistentOperation", "fn", "functionIdOption", "function", "load", "undefined", "Obj", "instanceOf", "currentFunctionName", "name", "shouldChangeFunction", "confirm", "message", "initial", "run", "selectFunction", "functions", "runQuery", "Filter", "type", "foundFn", "find", "update", "Ref", "uri", "toString", "feedOption", "currentFeed", "currentFeedStr", "shouldChangeFeed", "selectFeed", "parse", "FeedNs", "inputOption", "currentInput", "currentInputStr", "shouldChangeInput", "inputObj", "promptForSchemaInput", "inputSchema", "JsonSchema", "toEffectSchema", "value", "idOption", "enabledValue", "Command", "Options", "Prompt", "Console", "Effect", "Match", "Option", "CommandConfig", "flushAndSync", "print", "spaceLayer", "withTypes", "Common", "Operation", "Trigger", "Database", "Filter", "JsonSchema", "Obj", "Query", "Ref", "DXN", "EchoURI", "subscription", "make", "spaceId", "Common", "pipe", "optional", "id", "TriggerId", "enabled", "Enabled", "functionId", "typename", "Typename", "deep", "Deep", "delay", "Delay", "input", "Input", "options", "gen", "json", "CommandConfig", "triggerId", "match", "onNone", "selectTrigger", "onSome", "succeed", "dxn", "EchoURI", "objectId", "trigger", "Database", "resolve", "Ref", "fromURI", "Trigger", "spec", "kind", "fail", "Error", "currentFn", "updateFunction", "updateSpec", "updateInput", "updateEnabled", "log", "JSON", "stringify", "print", "printTrigger", "flushAndSync", "indexes", "withDescription", "provide", "spaceLayer", "provideEffectDiscard", "withTypes", "Operation", "PersistentOperation", "extractCurrentTypename", "query", "ast", "none", "value", "withReturnType", "when", "type", "q", "filter", "f", "fromNullable", "flatMap", "DXN", "isDXN", "getName", "undefined", "orElse", "fn", "functionIdOption", "function", "load", "Obj", "instanceOf", "currentFunctionName", "name", "shouldChangeFunction", "confirm", "message", "initial", "run", "selectFunction", "functions", "runQuery", "Filter", "foundFn", "find", "update", "getObjectId", "tryParse", "uri", "typenameOption", "deepOption", "delayOption", "currentSpec", "currentTypename", "currentTypenameStr", "getOrUndefined", "currentDeep", "currentDelay", "specParts", "push", "currentSpecStr", "length", "join", "hasSpecOption", "isSome", "shouldChangeSpec", "text", "queryAst", "Query", "select", "deepOptionValue", "map", "some", "delayOptionValue", "delayStr", "parseInt", "subscriptionOptions", "Object", "keys", "inputOption", "currentInput", "currentInputStr", "shouldChangeInput", "inputObj", "promptForSchemaInput", "inputSchema", "JsonSchema", "toEffectSchema", "idOption", "enabledValue", "Command", "Options", "Prompt", "Console", "Effect", "Option", "CommandConfig", "flushAndSync", "print", "spaceLayer", "withTypes", "Common", "Operation", "Trigger", "Database", "Filter", "JsonSchema", "Obj", "Ref", "EchoURI", "timer", "make", "spaceId", "Common", "pipe", "optional", "id", "TriggerId", "enabled", "Enabled", "functionId", "cron", "Cron", "input", "Input", "options", "gen", "json", "CommandConfig", "triggerId", "match", "onNone", "selectTrigger", "onSome", "succeed", "dxn", "EchoURI", "objectId", "trigger", "Database", "resolve", "Ref", "fromURI", "Trigger", "spec", "kind", "fail", "Error", "currentFn", "updateFunction", "updateCron", "updateInput", "updateEnabled", "log", "JSON", "stringify", "print", "printTrigger", "flushAndSync", "indexes", "withDescription", "provide", "spaceLayer", "provideEffectDiscard", "withTypes", "Operation", "PersistentOperation", "fn", "functionIdOption", "function", "load", "undefined", "Obj", "instanceOf", "currentFunctionName", "name", "shouldChangeFunction", "confirm", "message", "initial", "run", "selectFunction", "functions", "runQuery", "Filter", "type", "foundFn", "find", "update", "getObjectId", "tryParse", "uri", "cronOption", "currentCron", "shouldChangeCron", "text", "value", "inputOption", "currentInput", "currentInputStr", "shouldChangeInput", "inputObj", "promptForSchemaInput", "inputSchema", "JsonSchema", "toEffectSchema", "idOption", "enabledValue", "update", "make", "pipe", "withDescription", "withSubcommands", "subscription", "timer", "queue", "trigger", "make", "pipe", "withDescription", "withSubcommands", "create", "list", "remove", "update", "AutomationPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addAppGraphModule", "activate", "AppGraphBuilder", "addCommandModule", "commands", "trigger", "addOperationHandlerModule", "OperationHandler", "addSchemaModule", "schema", "Operation", "PersistentOperation", "Trigger", "Trace", "Message", "addModule", "activatesOn", "ClientEvents", "ClientReady", "firesBeforeActivation", "ActivationEvents", "SetupProcessManager", "LayerSpecs", "ActivationEvent", "allOf", "ProcessManagerReady", "SpacesReady", "TriggerRuntimeController", "make"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/AutomationPlugin.workerd.ts
|
|
4
|
+
import { Plugin } from "@dxos/app-framework";
|
|
5
|
+
import { AppPlugin } from "@dxos/app-toolkit";
|
|
6
|
+
import { Operation, Trace, Trigger } from "@dxos/compute";
|
|
7
|
+
import { OperationHandler } from "#capabilities";
|
|
8
|
+
import { meta } from "#meta";
|
|
9
|
+
var AutomationPlugin = Plugin.define(meta).pipe(AppPlugin.addOperationHandlerModule({
|
|
10
|
+
activate: OperationHandler
|
|
11
|
+
}), AppPlugin.addSchemaModule({
|
|
12
|
+
schema: [
|
|
13
|
+
Operation.PersistentOperation,
|
|
14
|
+
Trigger.Trigger,
|
|
15
|
+
Trace.Message
|
|
16
|
+
]
|
|
17
|
+
}), Plugin.make);
|
|
18
|
+
var AutomationPlugin_workerd_default = AutomationPlugin;
|
|
19
|
+
export {
|
|
20
|
+
AutomationPlugin,
|
|
21
|
+
AutomationPlugin_workerd_default as default
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=AutomationPlugin.workerd.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/AutomationPlugin.workerd.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Operation, Trace, Trigger } from '@dxos/compute';\n\nimport { OperationHandler } from '#capabilities';\nimport { meta } from '#meta';\n\nexport const AutomationPlugin = Plugin.define(meta).pipe(\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Operation.PersistentOperation, Trigger.Trigger, Trace.Message] }),\n Plugin.make,\n);\n\nexport default AutomationPlugin;\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAC1B,SAASC,WAAWC,OAAOC,eAAe;AAE1C,SAASC,wBAAwB;AACjC,SAASC,YAAY;AAEd,IAAMC,mBAAmBP,OAAOQ,OAAOF,IAAAA,EAAMG,KAClDR,UAAUS,0BAA0B;EAAEC,UAAUN;AAAiB,CAAA,GACjEJ,UAAUW,gBAAgB;EAAEC,QAAQ;IAACX,UAAUY;IAAqBV,QAAQA;IAASD,MAAMY;;AAAS,CAAA,GACpGf,OAAOgB,IAAI;AAGb,IAAA,mCAAeT;",
|
|
6
|
+
"names": ["Plugin", "AppPlugin", "Operation", "Trace", "Trigger", "OperationHandler", "meta", "AutomationPlugin", "define", "pipe", "addOperationHandlerModule", "activate", "addSchemaModule", "schema", "PersistentOperation", "Message", "make"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AutomationPanel
|
|
3
|
+
} from "./chunk-2H6X4VQY.mjs";
|
|
4
|
+
import {
|
|
5
|
+
TriggersSettings
|
|
6
|
+
} from "./chunk-2JP77CMN.mjs";
|
|
7
|
+
import "./chunk-CMM3AFHR.mjs";
|
|
8
|
+
import "./chunk-KV7RZLFS.mjs";
|
|
9
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
10
|
+
|
|
11
|
+
// src/containers/AutomationSettings/AutomationSettings.tsx
|
|
12
|
+
import React from "react";
|
|
13
|
+
import { useTranslation } from "@dxos/react-ui";
|
|
14
|
+
import { Settings } from "@dxos/react-ui-form";
|
|
15
|
+
import { meta } from "#meta";
|
|
16
|
+
var AutomationSettings = (props) => {
|
|
17
|
+
const { t } = useTranslation(meta.id);
|
|
18
|
+
return /* @__PURE__ */ React.createElement(Settings.Viewport, null, /* @__PURE__ */ React.createElement(Settings.Section, {
|
|
19
|
+
title: t("automation-verbose.label", {
|
|
20
|
+
ns: meta.id
|
|
21
|
+
}),
|
|
22
|
+
description: t("automation.description", {
|
|
23
|
+
ns: meta.id
|
|
24
|
+
})
|
|
25
|
+
}, /* @__PURE__ */ React.createElement(AutomationPanel, props), /* @__PURE__ */ React.createElement(TriggersSettings, {
|
|
26
|
+
space: props.space
|
|
27
|
+
})));
|
|
28
|
+
};
|
|
29
|
+
export {
|
|
30
|
+
AutomationSettings as default
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=AutomationSettings-CAFY3J7H.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/containers/AutomationSettings/AutomationSettings.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Settings } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\n\nimport { AutomationPanel, type AutomationPanelProps } from '../../components/AutomationPanel';\nimport { TriggersSettings } from '../TriggerSettings';\n\nexport type AutomationSettingsProps = AppSurface.SpaceArticleProps<Omit<AutomationPanelProps, 'space'>>;\n\nexport const AutomationSettings = (props: AutomationSettingsProps) => {\n const { t } = useTranslation(meta.id);\n return (\n <Settings.Viewport>\n <Settings.Section\n title={t('automation-verbose.label', { ns: meta.id })}\n description={t('automation.description', { ns: meta.id })}\n >\n <AutomationPanel {...props} />\n <TriggersSettings space={props.space} />\n </Settings.Section>\n </Settings.Viewport>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;AAIA,OAAOA,WAAW;AAGlB,SAASC,sBAAsB;AAC/B,SAASC,gBAAgB;AAEzB,SAASC,YAAY;AAOd,IAAMC,qBAAqB,CAACC,UAAAA;AACjC,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,SACE,sBAAA,cAACC,SAASC,UAAQ,MAChB,sBAAA,cAACD,SAASE,SAAO;IACfC,OAAOP,EAAE,4BAA4B;MAAEQ,IAAIN,KAAKC;IAAG,CAAA;IACnDM,aAAaT,EAAE,0BAA0B;MAAEQ,IAAIN,KAAKC;IAAG,CAAA;KAEvD,sBAAA,cAACO,iBAAoBX,KAAAA,GACrB,sBAAA,cAACY,kBAAAA;IAAiBC,OAAOb,MAAMa;;AAIvC;",
|
|
6
|
+
"names": ["React", "useTranslation", "Settings", "meta", "AutomationSettings", "props", "t", "useTranslation", "meta", "id", "Settings", "Viewport", "Section", "title", "ns", "description", "AutomationPanel", "TriggersSettings", "space"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FunctionsPanel,
|
|
3
|
+
FunctionsRegistry
|
|
4
|
+
} from "./chunk-ARUHHM4Q.mjs";
|
|
5
|
+
import "./chunk-KV7RZLFS.mjs";
|
|
6
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
7
|
+
|
|
8
|
+
// src/containers/FunctionsContainer/FunctionsContainer.tsx
|
|
9
|
+
import React from "react";
|
|
10
|
+
import { useTranslation } from "@dxos/react-ui";
|
|
11
|
+
import { Settings } from "@dxos/react-ui-form";
|
|
12
|
+
import { meta } from "#meta";
|
|
13
|
+
var FunctionsContainer = ({ space }) => {
|
|
14
|
+
const { t } = useTranslation(meta.id);
|
|
15
|
+
return /* @__PURE__ */ React.createElement(Settings.Viewport, null, /* @__PURE__ */ React.createElement(Settings.Section, {
|
|
16
|
+
title: t("functions-verbose.label", {
|
|
17
|
+
ns: meta.id
|
|
18
|
+
}),
|
|
19
|
+
description: t("functions.description", {
|
|
20
|
+
ns: meta.id
|
|
21
|
+
})
|
|
22
|
+
}, /* @__PURE__ */ React.createElement(FunctionsPanel, {
|
|
23
|
+
space
|
|
24
|
+
})), /* @__PURE__ */ React.createElement(Settings.Section, {
|
|
25
|
+
title: t("functions-registry-verbose.label", {
|
|
26
|
+
ns: meta.id
|
|
27
|
+
}),
|
|
28
|
+
description: t("functions-registry.description", {
|
|
29
|
+
ns: meta.id
|
|
30
|
+
})
|
|
31
|
+
}, /* @__PURE__ */ React.createElement(FunctionsRegistry, {
|
|
32
|
+
space
|
|
33
|
+
})));
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
FunctionsContainer as default
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=FunctionsContainer-V5AM45ZI.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/containers/FunctionsContainer/FunctionsContainer.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Settings } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\n\nimport { FunctionsPanel, FunctionsRegistry } from '../../components';\n\nexport const FunctionsContainer = ({ space }: AppSurface.SpaceArticleProps) => {\n const { t } = useTranslation(meta.id);\n return (\n <Settings.Viewport>\n <Settings.Section\n title={t('functions-verbose.label', { ns: meta.id })}\n description={t('functions.description', { ns: meta.id })}\n >\n <FunctionsPanel space={space} />\n </Settings.Section>\n <Settings.Section\n title={t('functions-registry-verbose.label', { ns: meta.id })}\n description={t('functions-registry.description', { ns: meta.id })}\n >\n <FunctionsRegistry space={space} />\n </Settings.Section>\n </Settings.Viewport>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAIA,OAAOA,WAAW;AAGlB,SAASC,sBAAsB;AAC/B,SAASC,gBAAgB;AAEzB,SAASC,YAAY;AAId,IAAMC,qBAAqB,CAAC,EAAEC,MAAK,MAAgC;AACxE,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,SACE,sBAAA,cAACC,SAASC,UAAQ,MAChB,sBAAA,cAACD,SAASE,SAAO;IACfC,OAAOP,EAAE,2BAA2B;MAAEQ,IAAIN,KAAKC;IAAG,CAAA;IAClDM,aAAaT,EAAE,yBAAyB;MAAEQ,IAAIN,KAAKC;IAAG,CAAA;KAEtD,sBAAA,cAACO,gBAAAA;IAAeX;OAElB,sBAAA,cAACK,SAASE,SAAO;IACfC,OAAOP,EAAE,oCAAoC;MAAEQ,IAAIN,KAAKC;IAAG,CAAA;IAC3DM,aAAaT,EAAE,kCAAkC;MAAEQ,IAAIN,KAAKC;IAAG,CAAA;KAE/D,sBAAA,cAACQ,mBAAAA;IAAkBZ;;AAI3B;",
|
|
6
|
+
"names": ["React", "useTranslation", "Settings", "meta", "FunctionsContainer", "space", "t", "useTranslation", "meta", "id", "Settings", "Viewport", "Section", "title", "ns", "description", "FunctionsPanel", "FunctionsRegistry"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/components/FunctionsPanel/FunctionsPanel.tsx
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import React, { useCallback, useMemo } from "react";
|
|
6
|
+
import { useOperationInvoker } from "@dxos/app-framework/ui";
|
|
7
|
+
import { LayoutOperation, getObjectPathFromObject } from "@dxos/app-toolkit";
|
|
8
|
+
import { Operation, Script } from "@dxos/compute";
|
|
9
|
+
import { Filter, Type } from "@dxos/echo";
|
|
10
|
+
import { SpaceOperation } from "@dxos/plugin-space";
|
|
11
|
+
import { useQuery } from "@dxos/react-client/echo";
|
|
12
|
+
import { IconButton, useTranslation } from "@dxos/react-ui";
|
|
13
|
+
import { Settings } from "@dxos/react-ui-form";
|
|
14
|
+
import { List } from "@dxos/react-ui-list";
|
|
15
|
+
import { ghostHover, mx } from "@dxos/ui-theme";
|
|
16
|
+
import { meta } from "#meta";
|
|
17
|
+
var FunctionsPanel = ({ space }) => {
|
|
18
|
+
const { t } = useTranslation(meta.id);
|
|
19
|
+
const functions = useQuery(space.db, Filter.type(Operation.PersistentOperation));
|
|
20
|
+
const scripts = useQuery(space.db, Filter.type(Script.Script));
|
|
21
|
+
const { invokePromise } = useOperationInvoker();
|
|
22
|
+
const functionToScriptMap = useMemo(() => functions.reduce((map, func) => {
|
|
23
|
+
const scriptId = func.source?.target?.id;
|
|
24
|
+
if (scriptId) {
|
|
25
|
+
const script = scripts.find((s) => s.id === scriptId);
|
|
26
|
+
if (script) {
|
|
27
|
+
map[func.id] = script;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return map;
|
|
31
|
+
}, {}), [
|
|
32
|
+
functions,
|
|
33
|
+
scripts
|
|
34
|
+
]);
|
|
35
|
+
const getScriptName = useCallback((func) => {
|
|
36
|
+
const script = functionToScriptMap[func.id];
|
|
37
|
+
return script?.name;
|
|
38
|
+
}, [
|
|
39
|
+
functionToScriptMap
|
|
40
|
+
]);
|
|
41
|
+
const handleGoToScript = useCallback((func) => {
|
|
42
|
+
const script = functionToScriptMap[func.id];
|
|
43
|
+
if (script) {
|
|
44
|
+
void invokePromise(LayoutOperation.Open, {
|
|
45
|
+
subject: [
|
|
46
|
+
getObjectPathFromObject(script)
|
|
47
|
+
]
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}, [
|
|
51
|
+
functionToScriptMap,
|
|
52
|
+
invokePromise
|
|
53
|
+
]);
|
|
54
|
+
const handleDelete = useCallback((func) => invokePromise(SpaceOperation.RemoveObjects, {
|
|
55
|
+
objects: [
|
|
56
|
+
func
|
|
57
|
+
]
|
|
58
|
+
}), [
|
|
59
|
+
invokePromise
|
|
60
|
+
]);
|
|
61
|
+
return /* @__PURE__ */ React.createElement(Settings.Panel, null, functions.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
|
|
62
|
+
items: functions,
|
|
63
|
+
isItem: Schema.is(Type.getSchema(Operation.PersistentOperation)),
|
|
64
|
+
getId: (func) => func.id
|
|
65
|
+
}, ({ items }) => /* @__PURE__ */ React.createElement("div", {
|
|
66
|
+
role: "list",
|
|
67
|
+
className: "flex flex-col w-full"
|
|
68
|
+
}, items?.map((func) => /* @__PURE__ */ React.createElement(List.Item, {
|
|
69
|
+
key: func.id,
|
|
70
|
+
item: func,
|
|
71
|
+
classNames: mx("grid grid-cols-[1fr_min-content_auto] min-h-[2.5rem] min-h-[3rem] px-2 items-center", ghostHover)
|
|
72
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
73
|
+
className: "flex flex-col truncate"
|
|
74
|
+
}, /* @__PURE__ */ React.createElement(List.ItemTitle, {
|
|
75
|
+
classNames: "truncate"
|
|
76
|
+
}, func.name), getScriptName(func) && /* @__PURE__ */ React.createElement("p", {
|
|
77
|
+
className: "text-xs text-description truncate"
|
|
78
|
+
}, getScriptName(func))), functionToScriptMap[func.id] && /* @__PURE__ */ React.createElement(IconButton, {
|
|
79
|
+
icon: "ph--arrow-square-out--regular",
|
|
80
|
+
iconOnly: true,
|
|
81
|
+
label: t("show-source-button.label"),
|
|
82
|
+
onClick: () => handleGoToScript(func)
|
|
83
|
+
}) || /* @__PURE__ */ React.createElement("div", null), /* @__PURE__ */ React.createElement(IconButton, {
|
|
84
|
+
icon: "ph--trash--regular",
|
|
85
|
+
iconOnly: true,
|
|
86
|
+
label: t("delete-function-button.label"),
|
|
87
|
+
onClick: () => handleDelete(func)
|
|
88
|
+
}))))));
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// src/components/FunctionsPanel/index.ts
|
|
92
|
+
var FunctionsPanel_default = FunctionsPanel;
|
|
93
|
+
export {
|
|
94
|
+
FunctionsPanel,
|
|
95
|
+
FunctionsPanel_default as default
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=FunctionsPanel-L32Z67B7.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/FunctionsPanel/FunctionsPanel.tsx", "../../../src/components/FunctionsPanel/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation, getObjectPathFromObject } from '@dxos/app-toolkit';\nimport { Operation, Script } from '@dxos/compute';\nimport { Filter, Type } from '@dxos/echo';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { type Space, useQuery } from '@dxos/react-client/echo';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { Settings } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nexport type FunctionsPanelProps = {\n space: Space;\n};\n\nexport const FunctionsPanel = ({ space }: FunctionsPanelProps) => {\n const { t } = useTranslation(meta.id);\n const functions = useQuery(space.db, Filter.type(Operation.PersistentOperation));\n const scripts = useQuery(space.db, Filter.type(Script.Script));\n const { invokePromise } = useOperationInvoker();\n\n const functionToScriptMap = useMemo(\n () =>\n functions.reduce(\n (map, func) => {\n const scriptId = func.source?.target?.id;\n if (scriptId) {\n const script = scripts.find((s) => s.id === scriptId);\n if (script) {\n map[func.id] = script;\n }\n }\n return map;\n },\n {} as Record<string, Script.Script>,\n ),\n [functions, scripts],\n );\n\n const getScriptName = useCallback(\n (func: Operation.PersistentOperation) => {\n const script = functionToScriptMap[func.id];\n return script?.name;\n },\n [functionToScriptMap],\n );\n\n const handleGoToScript = useCallback(\n (func: Operation.PersistentOperation) => {\n const script = functionToScriptMap[func.id];\n if (script) {\n void invokePromise(LayoutOperation.Open, { subject: [getObjectPathFromObject(script)] });\n }\n },\n [functionToScriptMap, invokePromise],\n );\n\n const handleDelete = useCallback(\n (func: Operation.PersistentOperation) => invokePromise(SpaceOperation.RemoveObjects, { objects: [func] }),\n [invokePromise],\n );\n\n return (\n <Settings.Panel>\n {functions.length > 0 && (\n <List.Root<Operation.PersistentOperation>\n items={functions}\n isItem={Schema.is(Type.getSchema(Operation.PersistentOperation))}\n getId={(func) => func.id}\n >\n {({ items }) => (\n <div role='list' className='flex flex-col w-full'>\n {items?.map((func) => (\n <List.Item<Operation.PersistentOperation>\n key={func.id}\n item={func}\n classNames={mx(\n 'grid grid-cols-[1fr_min-content_auto] min-h-[2.5rem] min-h-[3rem] px-2 items-center',\n ghostHover,\n )}\n >\n <div className='flex flex-col truncate'>\n <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>\n {getScriptName(func) && <p className='text-xs text-description truncate'>{getScriptName(func)}</p>}\n </div>\n {(functionToScriptMap[func.id] && (\n <IconButton\n icon='ph--arrow-square-out--regular'\n iconOnly\n label={t('show-source-button.label')}\n onClick={() => handleGoToScript(func)}\n />\n )) || <div />}\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('delete-function-button.label')}\n onClick={() => handleDelete(func)}\n />\n </List.Item>\n ))}\n </div>\n )}\n </List.Root>\n )}\n </Settings.Panel>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FunctionsPanel } from './FunctionsPanel';\n\nexport * from './FunctionsPanel';\nexport default FunctionsPanel;\n"],
|
|
5
|
+
"mappings": ";;;AAIA,YAAYA,YAAY;AACxB,OAAOC,SAASC,aAAaC,eAAe;AAE5C,SAASC,2BAA2B;AACpC,SAASC,iBAAiBC,+BAA+B;AACzD,SAASC,WAAWC,cAAc;AAClC,SAASC,QAAQC,YAAY;AAC7B,SAASC,sBAAsB;AAC/B,SAAqBC,gBAAgB;AACrC,SAASC,YAAYC,sBAAsB;AAC3C,SAASC,gBAAgB;AACzB,SAASC,YAAY;AACrB,SAASC,YAAYC,UAAU;AAE/B,SAASC,YAAY;AAMd,IAAMC,iBAAiB,CAAC,EAAEC,MAAK,MAAuB;AAC3D,QAAM,EAAEC,EAAC,IAAKR,eAAeK,KAAKI,EAAE;AACpC,QAAMC,YAAYZ,SAASS,MAAMI,IAAIhB,OAAOiB,KAAKnB,UAAUoB,mBAAmB,CAAA;AAC9E,QAAMC,UAAUhB,SAASS,MAAMI,IAAIhB,OAAOiB,KAAKlB,OAAOA,MAAM,CAAA;AAC5D,QAAM,EAAEqB,cAAa,IAAKzB,oBAAAA;AAE1B,QAAM0B,sBAAsB3B,QAC1B,MACEqB,UAAUO,OACR,CAACC,KAAKC,SAAAA;AACJ,UAAMC,WAAWD,KAAKE,QAAQC,QAAQb;AACtC,QAAIW,UAAU;AACZ,YAAMG,SAAST,QAAQU,KAAK,CAACC,MAAMA,EAAEhB,OAAOW,QAAAA;AAC5C,UAAIG,QAAQ;AACVL,YAAIC,KAAKV,EAAE,IAAIc;MACjB;IACF;AACA,WAAOL;EACT,GACA,CAAC,CAAA,GAEL;IAACR;IAAWI;GAAQ;AAGtB,QAAMY,gBAAgBtC,YACpB,CAAC+B,SAAAA;AACC,UAAMI,SAASP,oBAAoBG,KAAKV,EAAE;AAC1C,WAAOc,QAAQI;EACjB,GACA;IAACX;GAAoB;AAGvB,QAAMY,mBAAmBxC,YACvB,CAAC+B,SAAAA;AACC,UAAMI,SAASP,oBAAoBG,KAAKV,EAAE;AAC1C,QAAIc,QAAQ;AACV,WAAKR,cAAcxB,gBAAgBsC,MAAM;QAAEC,SAAS;UAACtC,wBAAwB+B,MAAAA;;MAAS,CAAA;IACxF;EACF,GACA;IAACP;IAAqBD;GAAc;AAGtC,QAAMgB,eAAe3C,YACnB,CAAC+B,SAAwCJ,cAAclB,eAAemC,eAAe;IAAEC,SAAS;MAACd;;EAAM,CAAA,GACvG;IAACJ;GAAc;AAGjB,SACE,sBAAA,cAACd,SAASiC,OAAK,MACZxB,UAAUyB,SAAS,KAClB,sBAAA,cAACjC,KAAKkC,MAAI;IACRC,OAAO3B;IACP4B,QAAeC,UAAG3C,KAAK4C,UAAU/C,UAAUoB,mBAAmB,CAAA;IAC9D4B,OAAO,CAACtB,SAASA,KAAKV;KAErB,CAAC,EAAE4B,MAAK,MACP,sBAAA,cAACK,OAAAA;IAAIC,MAAK;IAAOC,WAAU;KACxBP,OAAOnB,IAAI,CAACC,SACX,sBAAA,cAACjB,KAAK2C,MAAI;IACRC,KAAK3B,KAAKV;IACVsC,MAAM5B;IACN6B,YAAY5C,GACV,uFACAD,UAAAA;KAGF,sBAAA,cAACuC,OAAAA;IAAIE,WAAU;KACb,sBAAA,cAAC1C,KAAK+C,WAAS;IAACD,YAAW;KAAY7B,KAAKQ,IAAI,GAC/CD,cAAcP,IAAAA,KAAS,sBAAA,cAAC+B,KAAAA;IAAEN,WAAU;KAAqClB,cAAcP,IAAAA,CAAAA,CAAAA,GAExFH,oBAAoBG,KAAKV,EAAE,KAC3B,sBAAA,cAACV,YAAAA;IACCoD,MAAK;IACLC,UAAAA;IACAC,OAAO7C,EAAE,0BAAA;IACT8C,SAAS,MAAM1B,iBAAiBT,IAAAA;QAE9B,sBAAA,cAACuB,OAAAA,IAAAA,GACP,sBAAA,cAAC3C,YAAAA;IACCoD,MAAK;IACLC,UAAAA;IACAC,OAAO7C,EAAE,8BAAA;IACT8C,SAAS,MAAMvB,aAAaZ,IAAAA;;AAUhD;;;AC7GA,IAAA,yBAAeoC;",
|
|
6
|
+
"names": ["Schema", "React", "useCallback", "useMemo", "useOperationInvoker", "LayoutOperation", "getObjectPathFromObject", "Operation", "Script", "Filter", "Type", "SpaceOperation", "useQuery", "IconButton", "useTranslation", "Settings", "List", "ghostHover", "mx", "meta", "FunctionsPanel", "space", "t", "id", "functions", "db", "type", "PersistentOperation", "scripts", "invokePromise", "functionToScriptMap", "reduce", "map", "func", "scriptId", "source", "target", "script", "find", "s", "getScriptName", "name", "handleGoToScript", "Open", "subject", "handleDelete", "RemoveObjects", "objects", "Panel", "length", "Root", "items", "isItem", "is", "getSchema", "getId", "div", "role", "className", "Item", "key", "item", "classNames", "ItemTitle", "p", "icon", "iconOnly", "label", "onClick", "FunctionsPanel"]
|
|
7
|
+
}
|