@fluxo-dev/shell-workflow 26.1.1 → 26.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/index.esm.css +761 -0
  2. package/index.esm.js +113730 -7381
  3. package/package.json +4 -4
  4. package/src/index.d.ts +5 -1
  5. package/src/lib/etl/browse/etl-browse.d.ts +6 -0
  6. package/src/lib/etl/browse/index.d.ts +2 -0
  7. package/src/lib/etl/components/nodes/EtlBlockNode.d.ts +3 -0
  8. package/src/lib/etl/components/nodes/index.d.ts +1 -0
  9. package/src/lib/etl/components/panels/BlockConfigPanel.d.ts +10 -0
  10. package/src/lib/etl/components/panels/BlocksPanel.d.ts +8 -0
  11. package/src/lib/etl/components/panels/PreviewDataPanel.d.ts +8 -0
  12. package/src/lib/etl/components/panels/index.d.ts +3 -0
  13. package/src/lib/etl/constants/index.d.ts +22 -0
  14. package/src/lib/etl/designer/EtlDesignerContext.d.ts +14 -0
  15. package/src/lib/etl/designer/etl-designer.d.ts +7 -0
  16. package/src/lib/etl/designer/index.d.ts +1 -0
  17. package/src/lib/etl/hooks/index.d.ts +6 -0
  18. package/src/lib/etl/hooks/useBlockDefinitions.d.ts +12 -0
  19. package/src/lib/etl/hooks/useExecutionHistory.d.ts +13 -0
  20. package/src/lib/etl/hooks/useNodeOperations.d.ts +15 -0
  21. package/src/lib/etl/hooks/usePipelineActions.d.ts +25 -0
  22. package/src/lib/etl/hooks/usePipelineLiveDebug.d.ts +20 -0
  23. package/src/lib/etl/hooks/usePipelineState.d.ts +16 -0
  24. package/src/lib/etl/services/etl-debug-hub.service.d.ts +13 -0
  25. package/src/lib/etl/types/etl-block.types.d.ts +2 -0
  26. package/src/lib/etl/types/etl-config-field.types.d.ts +9 -0
  27. package/src/lib/etl/types/etl-live-debug.types.d.ts +56 -0
  28. package/src/lib/etl/types/etl-pipeline.types.d.ts +243 -0
  29. package/src/lib/etl/types/index.d.ts +4 -0
  30. package/src/lib/etl/utils/config-field-utils.d.ts +26 -0
  31. package/src/lib/etl/utils/dynamic-ports.d.ts +12 -0
  32. package/src/lib/etl/utils/icon-mapper.d.ts +12 -0
  33. package/src/lib/etl/utils/index.d.ts +6 -0
  34. package/src/lib/etl/utils/pipeline-converter.d.ts +14 -0
  35. package/src/lib/etl/utils/status-utils.d.ts +19 -0
  36. package/src/lib/etl/utils/validation.d.ts +17 -0
  37. package/src/lib/fluxo-module.d.ts +1 -2
  38. package/src/lib/workflow/browse/workflow-browse.d.ts +6 -0
  39. package/src/lib/workflow/browse/workflow-executions-panel.d.ts +8 -0
  40. package/src/lib/workflow/designer-v2/components/canvas/FlowCanvas.d.ts +16 -0
  41. package/src/lib/workflow/designer-v2/components/edges/CustomEdge.d.ts +3 -0
  42. package/src/lib/workflow/designer-v2/components/modals/TriggerInputModal.d.ts +10 -0
  43. package/src/lib/workflow/designer-v2/components/nodes/CustomNode.d.ts +3 -0
  44. package/src/lib/workflow/designer-v2/components/panels/ActionsPanel/ActionsPanel.d.ts +12 -0
  45. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/CollapsibleGroup.d.ts +12 -0
  46. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/ConditionalInput.d.ts +17 -0
  47. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/ExpressionEditor.d.ts +19 -0
  48. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/InputField.d.ts +26 -0
  49. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/InputsSection.d.ts +13 -0
  50. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/NodeConfigPanel.d.ts +12 -0
  51. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/OutcomesSection.d.ts +5 -0
  52. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/OutputsSection.d.ts +6 -0
  53. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/PrimitiveInputsSection.d.ts +13 -0
  54. package/src/lib/workflow/designer-v2/components/panels/NodeConfigPanel/TypedValueEditor.d.ts +17 -0
  55. package/src/lib/workflow/designer-v2/components/toolbar/WorkflowToolbar.d.ts +9 -0
  56. package/src/lib/workflow/designer-v2/constants/index.d.ts +3 -0
  57. package/src/lib/workflow/designer-v2/constants/primitives.d.ts +27 -0
  58. package/src/lib/workflow/designer-v2/constants/styles.d.ts +61 -0
  59. package/src/lib/workflow/designer-v2/constants/triggers.d.ts +10 -0
  60. package/src/lib/workflow/designer-v2/constants/ui-hints.d.ts +22 -0
  61. package/src/lib/workflow/designer-v2/hooks/index.d.ts +9 -0
  62. package/src/lib/workflow/designer-v2/hooks/useActionDefinitions.d.ts +11 -0
  63. package/src/lib/workflow/designer-v2/hooks/useAvailableOutputs.d.ts +14 -0
  64. package/src/lib/workflow/designer-v2/hooks/useInputDependencies.d.ts +9 -0
  65. package/src/lib/workflow/designer-v2/hooks/useInputValidation.d.ts +9 -0
  66. package/src/lib/workflow/designer-v2/hooks/useNodeInputs.d.ts +18 -0
  67. package/src/lib/workflow/designer-v2/hooks/useNodeOperations.d.ts +15 -0
  68. package/src/lib/workflow/designer-v2/hooks/useTriggerDefinitions.d.ts +11 -0
  69. package/src/lib/workflow/designer-v2/hooks/useWorkflowActions.d.ts +15 -0
  70. package/src/lib/workflow/designer-v2/hooks/useWorkflowState.d.ts +17 -0
  71. package/src/lib/workflow/designer-v2/index.d.ts +2 -0
  72. package/src/lib/workflow/designer-v2/types/index.d.ts +6 -0
  73. package/src/lib/workflow/designer-v2/types/input-config.types.d.ts +32 -0
  74. package/src/lib/workflow/designer-v2/types/input-dependency.types.d.ts +17 -0
  75. package/src/lib/workflow/designer-v2/types/input-group.types.d.ts +10 -0
  76. package/src/lib/workflow/designer-v2/types/input-validation.types.d.ts +11 -0
  77. package/src/lib/workflow/designer-v2/types/node-data.types.d.ts +52 -0
  78. package/src/lib/workflow/designer-v2/types/workflow-state.types.d.ts +28 -0
  79. package/src/lib/workflow/designer-v2/utils/branch-validation.d.ts +43 -0
  80. package/src/lib/workflow/designer-v2/utils/handle-helpers.d.ts +8 -0
  81. package/src/lib/workflow/designer-v2/utils/icon-mapper.d.ts +5 -0
  82. package/src/lib/workflow/designer-v2/utils/index.d.ts +8 -0
  83. package/src/lib/workflow/designer-v2/utils/node-factory.d.ts +31 -0
  84. package/src/lib/workflow/designer-v2/utils/parallel-detection.d.ts +32 -0
  85. package/src/lib/workflow/designer-v2/utils/transformers.d.ts +23 -0
  86. package/src/lib/workflow/designer-v2/utils/validation.d.ts +22 -0
  87. package/src/lib/workflow/designer-v2/utils/while-visual-edges.d.ts +7 -0
  88. package/src/lib/workflow/designer-v2/workflow-designer-v2.d.ts +8 -0
  89. package/src/lib/designer/components/action/action-card.d.ts +0 -5
  90. package/src/lib/designer/components/action/action-inputs.d.ts +0 -7
  91. package/src/lib/designer/components/action/outputs-picker.d.ts +0 -6
  92. package/src/lib/designer/components/action-chooser.d.ts +0 -5
  93. package/src/lib/designer/components/connectors/action-button.d.ts +0 -8
  94. package/src/lib/designer/components/connectors/action-connector-vertical-fill.d.ts +0 -10
  95. package/src/lib/designer/components/connectors/action-connector-vertical.d.ts +0 -9
  96. package/src/lib/designer/components/connectors/action-connector.d.ts +0 -7
  97. package/src/lib/designer/components/trigger/trigger-card.d.ts +0 -5
  98. package/src/lib/designer/components/trigger-chooser.d.ts +0 -5
  99. package/src/lib/designer/provider/workflow-designer-provider.d.ts +0 -27
  100. package/src/lib/designer/services/workflow-manager-interface.d.ts +0 -13
  101. package/src/lib/designer/services/workflow-manager.d.ts +0 -75
  102. package/src/lib/designer/workflow-designer.d.ts +0 -5
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@fluxo-dev/shell-workflow",
3
- "version": "26.1.1",
3
+ "version": "26.1.3",
4
4
  "peerDependencies": {
5
5
  "react": "^18.3.1",
6
6
  "@mantine/core": "^7.12.2",
7
7
  "react-router-dom": "^6.11.2",
8
8
  "react-redux": "^8.0.5",
9
9
  "@reduxjs/toolkit": "^1.9.1",
10
- "@fluxo-dev/api-client-base": "^26.1.1",
11
- "@fluxo-dev/state": "^26.1.1",
12
- "@fluxo-dev/ui-components": "^26.1.1"
10
+ "@fluxo-dev/api-client-base": "^26.1.3",
11
+ "@fluxo-dev/state": "^26.1.3",
12
+ "@fluxo-dev/ui-components": "^26.1.3"
13
13
  },
14
14
  "module": "./index.esm.js",
15
15
  "type": "module",
package/src/index.d.ts CHANGED
@@ -1,2 +1,6 @@
1
- export * from './lib/designer/workflow-designer';
1
+ export * from './lib/workflow/browse/workflow-browse';
2
+ export * from './lib/workflow/browse/workflow-executions-panel';
3
+ export * from './lib/workflow/designer-v2';
4
+ export * from './lib/etl/browse';
5
+ export * from './lib/etl/designer';
2
6
  export * from './lib/fluxo-module';
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { ShellPageRef } from '@fluxo-dev/ui-components';
3
+ export interface EtlBrowseProps {
4
+ shellPageRef: React.RefObject<ShellPageRef>;
5
+ }
6
+ export declare function EtlBrowse({ shellPageRef }: EtlBrowseProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { EtlBrowse } from './etl-browse';
2
+ export type { EtlBrowseProps } from './etl-browse';
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { NodeProps } from '@xyflow/react';
3
+ export declare const EtlBlockNode: React.MemoExoticComponent<({ data, selected, id }: NodeProps) => import("react/jsx-runtime").JSX.Element>;
@@ -0,0 +1 @@
1
+ export * from './EtlBlockNode';
@@ -0,0 +1,10 @@
1
+ import { Node } from '@xyflow/react';
2
+ import { EtlNodeData } from '../../types';
3
+ interface BlockConfigPanelProps {
4
+ node: Node<EtlNodeData>;
5
+ onClose: () => void;
6
+ onSave: (nodeId: string, config: Record<string, unknown>) => void;
7
+ readOnly?: boolean;
8
+ }
9
+ export declare function BlockConfigPanel({ node, onClose, onSave, readOnly }: BlockConfigPanelProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { BlockDescriptor, BlocksByCategory } from '../../types';
3
+ interface BlocksPanelProps {
4
+ blocksByCategory: BlocksByCategory;
5
+ onBlockDragStart: (event: React.DragEvent, blockType: string, descriptor: BlockDescriptor) => void;
6
+ }
7
+ export declare function BlocksPanel({ blocksByCategory, onBlockDragStart }: BlocksPanelProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,8 @@
1
+ import { PreviewItem } from '../../types';
2
+ export interface PreviewDataPanelProps {
3
+ opened: boolean;
4
+ onClose: () => void;
5
+ nodeLabel: string;
6
+ previewItemsByChannel?: Record<string, PreviewItem[]>;
7
+ }
8
+ export declare function PreviewDataPanel({ opened, onClose, nodeLabel, previewItemsByChannel, }: PreviewDataPanelProps): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,3 @@
1
+ export * from './BlocksPanel';
2
+ export * from './BlockConfigPanel';
3
+ export * from './PreviewDataPanel';
@@ -0,0 +1,22 @@
1
+ /**
2
+ * ETL Designer Constants
3
+ */
4
+ export declare const ETL_COLORS: {
5
+ sources: string;
6
+ transforms: string;
7
+ enrichers: string;
8
+ sinks: string;
9
+ default: string;
10
+ deadletter: string;
11
+ input: string;
12
+ success: string;
13
+ error: string;
14
+ warning: string;
15
+ info: string;
16
+ };
17
+ export declare const BLOCK_CATEGORIES: string[];
18
+ export declare const DEFAULT_PIPELINE_SETTINGS: {
19
+ maxDegreeOfParallelism: number;
20
+ boundedCapacity: number;
21
+ cancellationTimeoutSeconds: number;
22
+ };
@@ -0,0 +1,14 @@
1
+ import { NodeDebugRuntime, PipelineDebugRuntime } from '../types';
2
+ export interface EtlDesignerContextValue {
3
+ [key: string]: unknown;
4
+ onDuplicateNode: (nodeId: string) => void;
5
+ getNodeDebugRuntime: (nodeId: string) => NodeDebugRuntime | undefined;
6
+ pipelineDebug: PipelineDebugRuntime;
7
+ isDebugActive: boolean;
8
+ startLiveDebug: () => Promise<void>;
9
+ stopLiveDebug: () => Promise<void>;
10
+ openPreviewPanel: (nodeId: string) => void;
11
+ }
12
+ export declare const EtlDesignerContext: import("react").Context<EtlDesignerContextValue>;
13
+ export declare function buildEtlDesignerContextValue(value: EtlDesignerContextValue): EtlDesignerContextValue;
14
+ export declare function useEtlDesignerContext(): EtlDesignerContextValue;
@@ -0,0 +1,7 @@
1
+ import '@xyflow/react/dist/style.css';
2
+ export interface EtlDesignerProps {
3
+ pipelineId?: string;
4
+ onClose: () => void;
5
+ onSave?: () => void;
6
+ }
7
+ export declare function EtlDesigner({ pipelineId, onClose, onSave }: EtlDesignerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './etl-designer';
@@ -0,0 +1,6 @@
1
+ export * from './useBlockDefinitions';
2
+ export * from './usePipelineState';
3
+ export * from './usePipelineActions';
4
+ export * from './useNodeOperations';
5
+ export * from './useExecutionHistory';
6
+ export * from './usePipelineLiveDebug';
@@ -0,0 +1,12 @@
1
+ import { BlockDescriptor, BlocksByCategory } from '../types';
2
+ /**
3
+ * Hook to load block definitions from the ETL API
4
+ */
5
+ export declare function useBlockDefinitions(): {
6
+ blocks: BlockDescriptor[];
7
+ blocksByCategory: BlocksByCategory;
8
+ blockDescriptors: Map<string, BlockDescriptor>;
9
+ loading: boolean;
10
+ error: string | null;
11
+ refresh: () => Promise<void>;
12
+ };
@@ -0,0 +1,13 @@
1
+ import { PipelineExecutionHistoryItem, PipelineListItem } from '../types';
2
+ /**
3
+ * Hook to manage pipeline execution history
4
+ */
5
+ export declare function useExecutionHistory(): {
6
+ executions: PipelineExecutionHistoryItem[];
7
+ runningExecutionIds: Set<string>;
8
+ executionsLoading: boolean;
9
+ selectedPipelineForHistory: PipelineListItem | null;
10
+ setSelectedPipelineForHistory: import("react").Dispatch<import("react").SetStateAction<PipelineListItem | null>>;
11
+ loadPipelineHistory: (pipelineId: string, pipelineName?: string) => Promise<void>;
12
+ resetHistory: () => void;
13
+ };
@@ -0,0 +1,15 @@
1
+ import { Edge, Node } from '@xyflow/react';
2
+ import { EtlNodeData, BlockDescriptor } from '../types';
3
+ /**
4
+ * Hook for node operations (add, update, delete)
5
+ */
6
+ export declare function useNodeOperations(nodes: Node<EtlNodeData>[], setNodes: (nodes: Node<EtlNodeData>[] | ((nodes: Node<EtlNodeData>[]) => Node<EtlNodeData>[])) => void, setEdges: (edges: Edge[] | ((edges: Edge[]) => Edge[])) => void): {
7
+ addBlockNode: (blockType: string, descriptor: BlockDescriptor, position: {
8
+ x: number;
9
+ y: number;
10
+ }) => Node<EtlNodeData>;
11
+ updateNodeData: (nodeId: string, updates: Partial<EtlNodeData>) => void;
12
+ updateNodeConfig: (nodeId: string, config: Record<string, unknown>) => void;
13
+ deleteNode: (nodeId: string) => void;
14
+ duplicateNode: (nodeId: string) => void;
15
+ };
@@ -0,0 +1,25 @@
1
+ import { Node, Edge } from '@xyflow/react';
2
+ import { EtlNodeData, PipelineMetadata, ValidationResult, PipelineResult } from '../types';
3
+ /**
4
+ * Hook for pipeline actions (save, validate, execute)
5
+ */
6
+ export declare function usePipelineActions(_pipelineId?: string): {
7
+ savePipeline: (data: {
8
+ nodes: Node<EtlNodeData>[];
9
+ edges: Edge[];
10
+ metadata: PipelineMetadata;
11
+ }) => Promise<import("@fluxo-dev/api-client-base").SavePipelineResponse>;
12
+ validatePipeline: (data: {
13
+ nodes: Node<EtlNodeData>[];
14
+ edges: Edge[];
15
+ metadata: PipelineMetadata;
16
+ }) => Promise<ValidationResult>;
17
+ executePipeline: (data: {
18
+ nodes: Node<EtlNodeData>[];
19
+ edges: Edge[];
20
+ metadata: PipelineMetadata;
21
+ }, dryRun?: boolean) => Promise<PipelineResult>;
22
+ loading: boolean;
23
+ validating: boolean;
24
+ executing: boolean;
25
+ };
@@ -0,0 +1,20 @@
1
+ import { Edge, Node } from '@xyflow/react';
2
+ import { EtlNodeData, NodeDebugRuntime, PipelineDebugRuntime, PipelineMetadata } from '../types';
3
+ type LocalEdgeDebugRuntime = {
4
+ edgeId: string;
5
+ sourceNodeId: string;
6
+ targetNodeId: string;
7
+ status: 'idle' | 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
8
+ };
9
+ export declare function usePipelineLiveDebug(nodes: Node<EtlNodeData>[], edges: Edge[], metadata: PipelineMetadata): {
10
+ pipelineDebug: PipelineDebugRuntime;
11
+ nodeRuntimeById: Record<string, NodeDebugRuntime>;
12
+ edgeRuntimeById: Record<string, LocalEdgeDebugRuntime>;
13
+ getNodeDebugRuntime: (nodeId: string) => NodeDebugRuntime;
14
+ getEdgeDebugRuntime: (edgeId: string) => LocalEdgeDebugRuntime;
15
+ startLiveDebug: () => Promise<void>;
16
+ stopLiveDebug: () => Promise<void>;
17
+ resetDebugState: () => void;
18
+ isDebugActive: boolean;
19
+ };
20
+ export {};
@@ -0,0 +1,16 @@
1
+ import { Edge, Node } from '@xyflow/react';
2
+ import { EtlNodeData, PipelineMetadata } from '../types';
3
+ /**
4
+ * Hook to manage pipeline state (nodes, edges, metadata)
5
+ */
6
+ export declare function usePipelineState(_pipelineId?: string): {
7
+ nodes: Node<EtlNodeData>[];
8
+ edges: Edge[];
9
+ metadata: PipelineMetadata;
10
+ setNodes: import("react").Dispatch<import("react").SetStateAction<Node<EtlNodeData>[]>>;
11
+ setEdges: import("react").Dispatch<import("react").SetStateAction<Edge[]>>;
12
+ setMetadata: import("react").Dispatch<import("react").SetStateAction<PipelineMetadata>>;
13
+ onNodesChange: import("@xyflow/react").OnNodesChange<Node<EtlNodeData>>;
14
+ onEdgesChange: import("@xyflow/react").OnEdgesChange<Edge>;
15
+ resetPipeline: () => void;
16
+ };
@@ -0,0 +1,13 @@
1
+ import { HubConnectionState } from '@microsoft/signalr';
2
+ export declare class EtlDebugHubService {
3
+ private connection;
4
+ private subscribedExecutionId;
5
+ private eventHandlers;
6
+ ensureConnected(): Promise<void>;
7
+ subscribeToPipeline(executionId: string): Promise<void>;
8
+ on<T>(eventName: string, handler: (payload: T) => void): void;
9
+ off(eventName: string): void;
10
+ get state(): HubConnectionState;
11
+ stop(): Promise<void>;
12
+ private reattachHandlers;
13
+ }
@@ -0,0 +1,2 @@
1
+ export { BlockConfigFieldType, DynamicPortType, } from '@fluxo-dev/api-client-base';
2
+ export type { BlockDescriptor, BlockUiDescriptor, BlockPortDescriptor, PortVisibilityCondition, BlockConfigField, SelectOption, FieldValidation, BlocksByCategory, DynamicPortsDescriptor, } from '@fluxo-dev/api-client-base';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Configuration field types for ETL blocks
3
+ */
4
+ export interface ConfigFieldProps {
5
+ field: any;
6
+ value: any;
7
+ onChange: (value: any) => void;
8
+ error?: string;
9
+ }
@@ -0,0 +1,56 @@
1
+ import { HubConnectionState } from '@microsoft/signalr';
2
+ import type { BlockMetrics } from './etl-pipeline.types';
3
+ export declare enum PipelineEventType {
4
+ NodeStarted = 0,
5
+ NodeCompleted = 1,
6
+ NodeFailed = 2,
7
+ ItemProcessed = 3,
8
+ ItemDeadLettered = 4,
9
+ ItemSkipped = 5,
10
+ PipelineStarted = 6,
11
+ PipelineCompleted = 7,
12
+ PipelineFailed = 8,
13
+ PipelineCancelled = 9
14
+ }
15
+ export interface PipelineEvent {
16
+ pipelineExecutionId: string;
17
+ nodeId: string;
18
+ nodeType: string;
19
+ type: PipelineEventType;
20
+ timestamp: string;
21
+ payload: Record<string, unknown>;
22
+ }
23
+ export type LiveBlockMetrics = BlockMetrics;
24
+ export interface MetricsSnapshot {
25
+ executionId: string;
26
+ timestamp: string;
27
+ metrics: LiveBlockMetrics[];
28
+ }
29
+ export type DebugNodeStatus = 'idle' | 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
30
+ export type DebugEdgeStatus = 'idle' | 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
31
+ export type DebugPipelineStatus = 'idle' | 'connecting' | 'subscribed' | 'running' | 'completed' | 'failed' | 'cancelled';
32
+ export interface NodeDebugRuntime {
33
+ nodeId: string;
34
+ status: DebugNodeStatus;
35
+ lastEventType?: PipelineEventType;
36
+ updatedAt?: string;
37
+ metrics?: LiveBlockMetrics;
38
+ error?: string;
39
+ }
40
+ export interface EdgeDebugRuntime {
41
+ edgeId: string;
42
+ sourceNodeId: string;
43
+ targetNodeId: string;
44
+ status: DebugEdgeStatus;
45
+ }
46
+ export interface PipelineDebugRuntime {
47
+ executionId: string | null;
48
+ status: DebugPipelineStatus;
49
+ connectionState: HubConnectionState;
50
+ isStarting: boolean;
51
+ isStopping: boolean;
52
+ error?: string;
53
+ startedAt?: string;
54
+ updatedAt?: string;
55
+ completedAt?: string;
56
+ }
@@ -0,0 +1,243 @@
1
+ import { Node, Edge } from '@xyflow/react';
2
+ import type { BlockDescriptor, BlockPortDescriptor } from './etl-block.types';
3
+ export interface PipelineDefinition {
4
+ $schema?: string;
5
+ id?: string;
6
+ name: string;
7
+ description?: string;
8
+ version?: string;
9
+ settings?: PipelineSettings;
10
+ variables?: Record<string, unknown>;
11
+ nodes: NodeDefinition[];
12
+ edges: EdgeDefinition[];
13
+ }
14
+ export interface PipelineSettings {
15
+ maxDegreeOfParallelism?: number;
16
+ boundedCapacity?: number;
17
+ cancellationTimeoutSeconds?: number;
18
+ }
19
+ export interface NodeDefinition {
20
+ id: string;
21
+ type: string;
22
+ pattern?: string;
23
+ label?: string;
24
+ config: Record<string, unknown>;
25
+ position?: {
26
+ x: number;
27
+ y: number;
28
+ };
29
+ }
30
+ export interface EdgeDefinition {
31
+ id?: string;
32
+ from: string;
33
+ to: string;
34
+ channel?: string;
35
+ sourceHandle?: string;
36
+ targetHandle?: string;
37
+ }
38
+ export interface ValidationResult {
39
+ isValid: boolean;
40
+ errors: ValidationError[];
41
+ warnings: ValidationError[];
42
+ }
43
+ export interface ValidationError {
44
+ code: string;
45
+ message: string;
46
+ nodeId?: string;
47
+ fieldKey?: string;
48
+ nodeIds?: string[];
49
+ severity: 'Error' | 'Warning';
50
+ }
51
+ export interface PipelineResult {
52
+ executionId: string;
53
+ status: PipelineStatus | number;
54
+ duration: string;
55
+ totalItemsProcessed: number;
56
+ totalItemsDeadLettered: number;
57
+ totalItemsSkipped: number;
58
+ startTime: string;
59
+ endTime: string;
60
+ blockMetrics: BlockMetrics[];
61
+ errorMessage?: string;
62
+ }
63
+ export declare enum PipelineStatus {
64
+ Pending = 0,
65
+ Running = 1,
66
+ Paused = 2,
67
+ Completed = 3,
68
+ Failed = 4,
69
+ Cancelled = 5
70
+ }
71
+ export declare enum NodeExecutionState {
72
+ Pending = 0,
73
+ Running = 1,
74
+ Completed = 2,
75
+ Failed = 3,
76
+ Cancelled = 4
77
+ }
78
+ export interface BlockMetrics {
79
+ nodeId: string;
80
+ nodeType: string;
81
+ itemsIn: number;
82
+ itemsOut: number;
83
+ itemsOutByChannel: Record<string, number>;
84
+ itemsDeadLettered: number;
85
+ itemsSkipped: number;
86
+ totalDuration: string;
87
+ throughput: number;
88
+ averageItemDuration: string;
89
+ minItemDuration: string;
90
+ maxItemDuration: string;
91
+ nodeState: NodeExecutionState | number | string;
92
+ hasFailed: boolean;
93
+ failureReason?: string;
94
+ previewItemsByChannel?: Record<string, PreviewItem[]>;
95
+ }
96
+ export interface PreviewItem {
97
+ [key: string]: unknown;
98
+ _truncated?: boolean;
99
+ _originalSize?: number;
100
+ }
101
+ export interface SavePipelineRequest {
102
+ id?: string;
103
+ name: string;
104
+ description?: string;
105
+ category?: string;
106
+ definitionJson: string;
107
+ isActive: boolean;
108
+ tags?: string[];
109
+ metadata?: Record<string, unknown>;
110
+ }
111
+ export interface SavePipelineResponse {
112
+ id: string;
113
+ name: string;
114
+ version: number;
115
+ createdAt: string;
116
+ updatedAt: string;
117
+ }
118
+ export interface PipelineListItem {
119
+ id: string;
120
+ name: string;
121
+ description?: string;
122
+ version: number;
123
+ category?: string;
124
+ isActive: boolean;
125
+ createdAt: string;
126
+ updatedAt: string;
127
+ lastExecutedAt?: string;
128
+ lastExecutionStatus?: PipelineStatus;
129
+ executionCount: number;
130
+ successRate: number;
131
+ tags?: string[];
132
+ }
133
+ export interface PipelineDetails {
134
+ id: string;
135
+ name: string;
136
+ description?: string;
137
+ version: number;
138
+ definitionJson: string;
139
+ category?: string;
140
+ isActive: boolean;
141
+ createdAt: string;
142
+ updatedAt: string;
143
+ createdBy?: string;
144
+ updatedBy?: string;
145
+ lastExecutedAt?: string;
146
+ lastExecutionStatus?: PipelineStatus;
147
+ executionCount: number;
148
+ successCount: number;
149
+ failureCount: number;
150
+ successRate: number;
151
+ tags?: string[];
152
+ metadata?: Record<string, unknown>;
153
+ }
154
+ export interface ExecuteSavedPipelineRequest {
155
+ pipelineId: string;
156
+ dryRun?: boolean;
157
+ variableOverrides?: Record<string, unknown>;
158
+ }
159
+ export interface PipelineExecutionHistoryItem {
160
+ id: string;
161
+ executionId: string;
162
+ pipelineId: string;
163
+ pipelineName: string;
164
+ pipelineVersion: string;
165
+ status: PipelineStatus;
166
+ startTime: string;
167
+ endTime?: string;
168
+ formattedDuration?: string;
169
+ totalItemsProcessed: number;
170
+ totalItemsDeadLettered: number;
171
+ totalItemsSkipped: number;
172
+ successRate: number;
173
+ errorMessage?: string;
174
+ executedBy?: string;
175
+ isDryRun: boolean;
176
+ serverHostname?: string;
177
+ }
178
+ export interface PipelineExecutionDetails extends PipelineExecutionHistoryItem {
179
+ errorStackTrace?: string;
180
+ blockMetricsJson?: string;
181
+ pipelineDefinitionSnapshot?: string;
182
+ metadata?: Record<string, unknown>;
183
+ }
184
+ export interface RunningExecutionItem {
185
+ executionId: string;
186
+ startTime: string;
187
+ elapsedTime: string;
188
+ }
189
+ export interface StopExecutionResponse {
190
+ success: boolean;
191
+ message: string;
192
+ }
193
+ export interface ValidatePipelineRequest {
194
+ definitionJson: string;
195
+ }
196
+ export interface ExecutePipelineRequest {
197
+ executionId: string;
198
+ definitionJson: string;
199
+ dryRun?: boolean;
200
+ isDebugMode: boolean;
201
+ maxPreviewItems: number;
202
+ }
203
+ /**
204
+ * Node data for ReactFlow ETL nodes
205
+ */
206
+ export interface EtlNodeData {
207
+ [key: string]: unknown;
208
+ label: string;
209
+ blockType: string;
210
+ descriptor?: BlockDescriptor;
211
+ config: Record<string, unknown>;
212
+ inputs: BlockPortDescriptor[];
213
+ outputs: BlockPortDescriptor[];
214
+ }
215
+ /**
216
+ * Pipeline metadata used by the designer UI
217
+ */
218
+ export interface PipelineMetadata {
219
+ name: string;
220
+ description: string;
221
+ category: string;
222
+ pipelineId?: string;
223
+ isActive?: boolean;
224
+ tags?: string[];
225
+ customMetadata?: Record<string, unknown>;
226
+ maxPreviewItems?: number;
227
+ }
228
+ /**
229
+ * Complete pipeline state
230
+ */
231
+ export interface PipelineState {
232
+ nodes: Node<EtlNodeData>[];
233
+ edges: Edge[];
234
+ metadata: PipelineMetadata;
235
+ }
236
+ /**
237
+ * Pipeline save data
238
+ */
239
+ export interface PipelineSaveData {
240
+ nodes: Node<EtlNodeData>[];
241
+ edges: Edge[];
242
+ metadata: PipelineMetadata;
243
+ }
@@ -0,0 +1,4 @@
1
+ export * from './etl-block.types';
2
+ export * from './etl-pipeline.types';
3
+ export * from './etl-live-debug.types';
4
+ export * from './etl-config-field.types';
@@ -0,0 +1,26 @@
1
+ import { BlockConfigField } from '../types';
2
+ /**
3
+ * Determina se un campo deve essere visibile in base alla condizione visibleWhen.
4
+ * Se visibleWhen non è definito, il campo è sempre visibile.
5
+ *
6
+ * @param field - Il campo da valutare
7
+ * @param config - La configurazione corrente del blocco
8
+ * @returns true se il campo deve essere visibile, false altrimenti
9
+ */
10
+ export declare function isFieldVisible(field: BlockConfigField, config: Record<string, unknown>): boolean;
11
+ /**
12
+ * Filtra i campi restituendo solo quelli visibili in base alla configurazione corrente.
13
+ *
14
+ * @param fields - Array di campi da filtrare
15
+ * @param config - La configurazione corrente del blocco
16
+ * @returns Array di campi visibili
17
+ */
18
+ export declare function getVisibleFields(fields: BlockConfigField[], config: Record<string, unknown>): BlockConfigField[];
19
+ /**
20
+ * Filtra i campi obbligatori restituendo solo quelli visibili in base alla configurazione corrente.
21
+ *
22
+ * @param fields - Array di campi da filtrare
23
+ * @param config - La configurazione corrente del blocco
24
+ * @returns Array di campi obbligatori e visibili
25
+ */
26
+ export declare function getVisibleRequiredFields(fields: BlockConfigField[], config: Record<string, unknown>): BlockConfigField[];
@@ -0,0 +1,12 @@
1
+ import { BlockDescriptor, BlockPortDescriptor, DynamicPortsDescriptor } from '../types';
2
+ /**
3
+ * Genera porte dinamiche basate sul descriptor e sulla configurazione del blocco.
4
+ *
5
+ * @param descriptor Descriptor delle porte dinamiche
6
+ * @param config Configurazione corrente del blocco
7
+ * @returns Array di porte generate dinamicamente
8
+ */
9
+ export declare function generateDynamicPorts(descriptor: DynamicPortsDescriptor | undefined, config: Record<string, unknown>): BlockPortDescriptor[];
10
+ export declare function getEffectiveInputPorts(descriptor: BlockDescriptor | undefined, config: Record<string, unknown>): BlockPortDescriptor[];
11
+ export declare function getEffectiveOutputPorts(descriptor: BlockDescriptor | undefined, config: Record<string, unknown>): BlockPortDescriptor[];
12
+ export declare function isPortVisible(port: BlockPortDescriptor, config: Record<string, unknown>): boolean;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { IconProps } from '@tabler/icons-react';
3
+ type TablerIcon = React.ForwardRefExoticComponent<IconProps & React.RefAttributes<SVGSVGElement>>;
4
+ /**
5
+ * Risolve dinamicamente un'icona Tabler dal nome stringa inviato dal server.
6
+ * Fallback: IconBox
7
+ *
8
+ * Input supportati:
9
+ * "database" | "Database" | "IconDatabase" | "icon-database" | "icon_database"
10
+ */
11
+ export declare function resolveBlockIcon(iconName: string | undefined): TablerIcon;
12
+ export {};
@@ -0,0 +1,6 @@
1
+ export * from './pipeline-converter';
2
+ export * from './validation';
3
+ export * from './status-utils';
4
+ export * from './icon-mapper';
5
+ export * from './dynamic-ports';
6
+ export * from './config-field-utils';
@@ -0,0 +1,14 @@
1
+ import { Node, Edge } from '@xyflow/react';
2
+ import { PipelineDefinition, EtlNodeData, PipelineMetadata, BlockDescriptor } from '../types';
3
+ /**
4
+ * Convert ReactFlow nodes/edges to PipelineDefinition
5
+ */
6
+ export declare function convertToPipelineDefinition(nodes: Node<EtlNodeData>[], edges: Edge[], metadata: PipelineMetadata): PipelineDefinition;
7
+ /**
8
+ * Convert PipelineDefinition to ReactFlow nodes/edges
9
+ */
10
+ export declare function convertFromPipelineDefinition(definition: PipelineDefinition, blockDescriptors: Map<string, BlockDescriptor>): {
11
+ nodes: Node<EtlNodeData>[];
12
+ edges: Edge[];
13
+ metadata: PipelineMetadata;
14
+ };