ultravisor 1.0.2 → 1.0.4
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/.claude/launch.json +11 -0
- package/.claude/ultravisor-dev-config.json +3 -0
- package/.ultravisor.json +426 -0
- package/docs/README.md +63 -0
- package/package.json +12 -8
- package/source/Ultravisor.cjs +22 -3
- package/source/cli/Ultravisor-CLIProgram.cjs +35 -23
- package/source/cli/commands/Ultravisor-Command-SingleOperation.cjs +29 -18
- package/source/cli/commands/Ultravisor-Command-SingleTask.cjs +62 -19
- package/source/cli/commands/Ultravisor-Command-UpdateTask.cjs +27 -15
- package/source/config/Ultravisor-Default-Command-Configuration.cjs +5 -3
- package/source/services/Ultravisor-ExecutionEngine.cjs +1039 -0
- package/source/services/Ultravisor-ExecutionManifest.cjs +399 -0
- package/source/services/Ultravisor-Hypervisor-State.cjs +270 -97
- package/source/services/Ultravisor-Hypervisor.cjs +38 -83
- package/source/services/Ultravisor-StateManager.cjs +241 -0
- package/source/services/Ultravisor-TaskTypeRegistry.cjs +143 -0
- package/source/services/tasks/Ultravisor-TaskType-Base.cjs +105 -0
- package/source/services/tasks/control/Ultravisor-TaskType-IfConditional.cjs +148 -0
- package/source/services/tasks/control/Ultravisor-TaskType-LaunchOperation.cjs +187 -0
- package/source/services/tasks/control/Ultravisor-TaskType-SplitExecute.cjs +184 -0
- package/source/services/tasks/data/Ultravisor-TaskType-ReplaceString.cjs +82 -0
- package/source/services/tasks/data/Ultravisor-TaskType-SetValues.cjs +81 -0
- package/source/services/tasks/data/Ultravisor-TaskType-StringAppender.cjs +101 -0
- package/source/services/tasks/file-io/Ultravisor-TaskType-ReadFile.cjs +103 -0
- package/source/services/tasks/file-io/Ultravisor-TaskType-WriteFile.cjs +117 -0
- package/source/services/tasks/interaction/Ultravisor-TaskType-ErrorMessage.cjs +54 -0
- package/source/services/tasks/interaction/Ultravisor-TaskType-ValueInput.cjs +62 -0
- package/source/web_server/Ultravisor-API-Server.cjs +237 -124
- package/test/Ultravisor_browser_tests.js +2226 -0
- package/test/Ultravisor_tests.js +1143 -5830
- package/webinterface/css/ultravisor.css +23 -0
- package/webinterface/package.json +6 -3
- package/webinterface/source/Pict-Application-Ultravisor.js +93 -73
- package/webinterface/source/cards/FlowCard-CSVTransform.js +43 -0
- package/webinterface/source/cards/FlowCard-Command.js +86 -0
- package/webinterface/source/cards/FlowCard-ComprehensionIntersect.js +40 -0
- package/webinterface/source/cards/FlowCard-Conditional.js +87 -0
- package/webinterface/source/cards/FlowCard-CopyFile.js +55 -0
- package/webinterface/source/cards/FlowCard-End.js +29 -0
- package/webinterface/source/cards/FlowCard-GetJSON.js +55 -0
- package/webinterface/source/cards/FlowCard-GetText.js +54 -0
- package/webinterface/source/cards/FlowCard-Histogram.js +176 -0
- package/webinterface/source/cards/FlowCard-LaunchOperation.js +82 -0
- package/webinterface/source/cards/FlowCard-ListFiles.js +55 -0
- package/webinterface/source/cards/FlowCard-MeadowCount.js +44 -0
- package/webinterface/source/cards/FlowCard-MeadowCreate.js +44 -0
- package/webinterface/source/cards/FlowCard-MeadowDelete.js +45 -0
- package/webinterface/source/cards/FlowCard-MeadowRead.js +46 -0
- package/webinterface/source/cards/FlowCard-MeadowReads.js +46 -0
- package/webinterface/source/cards/FlowCard-MeadowUpdate.js +44 -0
- package/webinterface/source/cards/FlowCard-ParseCSV.js +85 -0
- package/webinterface/source/cards/FlowCard-ReadJSON.js +54 -0
- package/webinterface/source/cards/FlowCard-ReadText.js +54 -0
- package/webinterface/source/cards/FlowCard-RestRequest.js +59 -0
- package/webinterface/source/cards/FlowCard-SendJSON.js +57 -0
- package/webinterface/source/cards/FlowCard-Solver.js +77 -0
- package/webinterface/source/cards/FlowCard-Start.js +29 -0
- package/webinterface/source/cards/FlowCard-TemplateString.js +77 -0
- package/webinterface/source/cards/FlowCard-WriteJSON.js +54 -0
- package/webinterface/source/cards/FlowCard-WriteText.js +54 -0
- package/webinterface/source/data/ExampleFlow-CSVPipeline.js +231 -0
- package/webinterface/source/data/ExampleFlow-FileProcessor.js +315 -0
- package/webinterface/source/data/ExampleFlow-MeadowPipeline.js +328 -0
- package/webinterface/source/providers/PictRouter-Ultravisor-Configuration.json +8 -8
- package/webinterface/source/views/PictView-Ultravisor-Dashboard.js +6 -6
- package/webinterface/source/views/PictView-Ultravisor-FlowEditor.js +436 -0
- package/webinterface/source/views/PictView-Ultravisor-ManifestList.js +45 -43
- package/webinterface/source/views/PictView-Ultravisor-OperationEdit.js +34 -89
- package/webinterface/source/views/PictView-Ultravisor-OperationList.js +128 -13
- package/webinterface/source/views/PictView-Ultravisor-PendingInput.js +314 -0
- package/webinterface/source/views/PictView-Ultravisor-Schedule.js +18 -53
- package/webinterface/source/views/PictView-Ultravisor-TimingView.js +27 -14
- package/webinterface/source/views/PictView-Ultravisor-TopBar.js +2 -1
- package/.babelrc +0 -6
- package/.browserslistrc +0 -1
- package/.browserslistrc-BACKUP +0 -1
- package/.gulpfile-quackage-config.json +0 -7
- package/.gulpfile-quackage.js +0 -2
- package/debug/Harness.js +0 -5
- package/source/services/Ultravisor-Operation-Manifest.cjs +0 -160
- package/source/services/Ultravisor-Operation.cjs +0 -200
- package/source/services/Ultravisor-Task.cjs +0 -349
- package/source/services/events/Ultravisor-Hypervisor-Event-Solver.cjs +0 -11
- package/source/services/tasks/Ultravisor-Task-Base.cjs +0 -264
- package/source/services/tasks/Ultravisor-Task-CollectValues.cjs +0 -188
- package/source/services/tasks/Ultravisor-Task-Command.cjs +0 -65
- package/source/services/tasks/Ultravisor-Task-CommandEach.cjs +0 -190
- package/source/services/tasks/Ultravisor-Task-Conditional.cjs +0 -104
- package/source/services/tasks/Ultravisor-Task-DateWindow.cjs +0 -72
- package/source/services/tasks/Ultravisor-Task-GeneratePagedOperation.cjs +0 -336
- package/source/services/tasks/Ultravisor-Task-LaunchOperation.cjs +0 -143
- package/source/services/tasks/Ultravisor-Task-LaunchTask.cjs +0 -146
- package/source/services/tasks/Ultravisor-Task-LineMatch.cjs +0 -158
- package/source/services/tasks/Ultravisor-Task-Request.cjs +0 -56
- package/source/services/tasks/Ultravisor-Task-Solver.cjs +0 -89
- package/source/services/tasks/Ultravisor-Task-TemplateString.cjs +0 -93
- package/source/services/tasks/rest/Ultravisor-Task-GetBinary.cjs +0 -127
- package/source/services/tasks/rest/Ultravisor-Task-GetJSON.cjs +0 -119
- package/source/services/tasks/rest/Ultravisor-Task-GetText.cjs +0 -109
- package/source/services/tasks/rest/Ultravisor-Task-GetXML.cjs +0 -112
- package/source/services/tasks/rest/Ultravisor-Task-RestRequest.cjs +0 -499
- package/source/services/tasks/rest/Ultravisor-Task-SendJSON.cjs +0 -150
- package/source/services/tasks/stagingfiles/Ultravisor-Task-CopyFile.cjs +0 -110
- package/source/services/tasks/stagingfiles/Ultravisor-Task-ListFiles.cjs +0 -89
- package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadBinary.cjs +0 -87
- package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadJSON.cjs +0 -67
- package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadText.cjs +0 -66
- package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadXML.cjs +0 -69
- package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteBinary.cjs +0 -95
- package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteJSON.cjs +0 -96
- package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteText.cjs +0 -99
- package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteXML.cjs +0 -102
- package/webinterface/.babelrc +0 -6
- package/webinterface/.browserslistrc +0 -1
- package/webinterface/.browserslistrc-BACKUP +0 -1
- package/webinterface/.gulpfile-quackage-config.json +0 -7
- package/webinterface/.gulpfile-quackage.js +0 -2
- package/webinterface/source/views/PictView-Ultravisor-TaskEdit.js +0 -220
- package/webinterface/source/views/PictView-Ultravisor-TaskList.js +0 -248
- /package/docs/{cover.md → _cover.md} +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardMeadowUpdate extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Meadow Update',
|
|
11
|
+
Code: 'MUPDATE',
|
|
12
|
+
Description: 'Update a record via Meadow REST endpoint.',
|
|
13
|
+
Category: 'Meadow',
|
|
14
|
+
TitleBarColor: '#2e7d32',
|
|
15
|
+
BodyStyle: { fill: '#e8f5e9', stroke: '#2e7d32' },
|
|
16
|
+
Width: 200,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'Data', Side: 'left-top', PortType: 'value', MinimumInputCount: 1, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'Entity', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Updated', Side: 'right-top', PortType: 'value' },
|
|
26
|
+
{ Name: 'Error', Side: 'bottom', PortType: 'error' }
|
|
27
|
+
],
|
|
28
|
+
PropertiesPanel:
|
|
29
|
+
{
|
|
30
|
+
PanelType: 'Form', DefaultWidth: 360, DefaultHeight: 260, Title: 'Meadow Update Settings',
|
|
31
|
+
Configuration: { Manifest: { Scope: 'FlowCardMeadowUpdate',
|
|
32
|
+
Sections: [{ Name: 'Entity', Hash: 'MUSection', Groups: [{ Name: 'Settings', Hash: 'MUGroup' }] }],
|
|
33
|
+
Descriptors: {
|
|
34
|
+
'Record.Data.Entity': { Name: 'Entity Name', Hash: 'Entity', DataType: 'String', Default: '', PictForm: { Section: 'MUSection', Group: 'MUGroup', Row: 1, Width: 12 } },
|
|
35
|
+
'Record.Data.Endpoint': { Name: 'API Endpoint', Hash: 'Endpoint', DataType: 'String', Default: '', PictForm: { Section: 'MUSection', Group: 'MUGroup', Row: 2, Width: 12 } },
|
|
36
|
+
'Record.Data.DataAddress': { Name: 'Data State Address', Hash: 'DataAddress', DataType: 'String', Default: '', PictForm: { Section: 'MUSection', Group: 'MUGroup', Row: 3, Width: 12 } }
|
|
37
|
+
}
|
|
38
|
+
}}
|
|
39
|
+
}
|
|
40
|
+
}, pOptions), pServiceHash);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
module.exports = FlowCardMeadowUpdate;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardParseCSV extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Parse CSV',
|
|
11
|
+
Code: 'PARSECSV',
|
|
12
|
+
Description: 'Parse raw CSV text into an array of record objects.',
|
|
13
|
+
Category: 'Pipeline',
|
|
14
|
+
TitleBarColor: '#c62828',
|
|
15
|
+
BodyStyle: { fill: '#ffebee', stroke: '#c62828' },
|
|
16
|
+
Width: 180,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'Raw Text', Side: 'left-top', PortType: 'value', MinimumInputCount: 1, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'Delimiter', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Records', Side: 'right-top', PortType: 'value' }
|
|
26
|
+
],
|
|
27
|
+
PropertiesPanel:
|
|
28
|
+
{
|
|
29
|
+
PanelType: 'Form',
|
|
30
|
+
DefaultWidth: 340,
|
|
31
|
+
DefaultHeight: 240,
|
|
32
|
+
Title: 'Parse CSV Settings',
|
|
33
|
+
Configuration:
|
|
34
|
+
{
|
|
35
|
+
Manifest:
|
|
36
|
+
{
|
|
37
|
+
Scope: 'FlowCardParseCSV',
|
|
38
|
+
Sections:
|
|
39
|
+
[
|
|
40
|
+
{
|
|
41
|
+
Name: 'Parser',
|
|
42
|
+
Hash: 'ParseSection',
|
|
43
|
+
Groups:
|
|
44
|
+
[
|
|
45
|
+
{ Name: 'Settings', Hash: 'ParseGroup' }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
Descriptors:
|
|
50
|
+
{
|
|
51
|
+
'Record.Data.Delimiter':
|
|
52
|
+
{
|
|
53
|
+
Name: 'Delimiter',
|
|
54
|
+
Hash: 'Delimiter',
|
|
55
|
+
DataType: 'String',
|
|
56
|
+
Default: ',',
|
|
57
|
+
PictForm: { Section: 'ParseSection', Group: 'ParseGroup', Row: 1, Width: 4 }
|
|
58
|
+
},
|
|
59
|
+
'Record.Data.HasHeaders':
|
|
60
|
+
{
|
|
61
|
+
Name: 'Has Headers',
|
|
62
|
+
Hash: 'HasHeaders',
|
|
63
|
+
DataType: 'Boolean',
|
|
64
|
+
Default: true,
|
|
65
|
+
PictForm: { Section: 'ParseSection', Group: 'ParseGroup', Row: 1, Width: 4 }
|
|
66
|
+
},
|
|
67
|
+
'Record.Data.Destination':
|
|
68
|
+
{
|
|
69
|
+
Name: 'State Destination',
|
|
70
|
+
Hash: 'Destination',
|
|
71
|
+
DataType: 'String',
|
|
72
|
+
Default: '',
|
|
73
|
+
PictForm: { Section: 'ParseSection', Group: 'ParseGroup', Row: 2, Width: 12 }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
pOptions),
|
|
81
|
+
pServiceHash);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
module.exports = FlowCardParseCSV;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardReadJSON extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Read JSON',
|
|
11
|
+
Code: 'RJSON',
|
|
12
|
+
Description: 'Read and parse a JSON file from the staging folder.',
|
|
13
|
+
Category: 'File I/O',
|
|
14
|
+
TitleBarColor: '#2980b9',
|
|
15
|
+
BodyStyle: { fill: '#eaf2f8', stroke: '#2980b9' },
|
|
16
|
+
Width: 180,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'Trigger', Side: 'left-bottom', PortType: 'event-in', MinimumInputCount: 0, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'File', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Data', Side: 'right-top', PortType: 'value' },
|
|
26
|
+
{ Name: 'Error', Side: 'bottom', PortType: 'error' }
|
|
27
|
+
],
|
|
28
|
+
PropertiesPanel:
|
|
29
|
+
{
|
|
30
|
+
PanelType: 'Form',
|
|
31
|
+
DefaultWidth: 340,
|
|
32
|
+
DefaultHeight: 220,
|
|
33
|
+
Title: 'Read JSON Settings',
|
|
34
|
+
Configuration:
|
|
35
|
+
{
|
|
36
|
+
Manifest:
|
|
37
|
+
{
|
|
38
|
+
Scope: 'FlowCardReadJSON',
|
|
39
|
+
Sections: [{ Name: 'File', Hash: 'RJSection', Groups: [{ Name: 'Settings', Hash: 'RJGroup' }] }],
|
|
40
|
+
Descriptors:
|
|
41
|
+
{
|
|
42
|
+
'Record.Data.File': { Name: 'File Path', Hash: 'File', DataType: 'String', Default: '', PictForm: { Section: 'RJSection', Group: 'RJGroup', Row: 1, Width: 12 } },
|
|
43
|
+
'Record.Data.Destination': { Name: 'State Destination', Hash: 'Destination', DataType: 'String', Default: '', PictForm: { Section: 'RJSection', Group: 'RJGroup', Row: 2, Width: 12 } }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
pOptions),
|
|
50
|
+
pServiceHash);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = FlowCardReadJSON;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardReadText extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Read Text',
|
|
11
|
+
Code: 'RTXT',
|
|
12
|
+
Description: 'Read a text file from the staging folder.',
|
|
13
|
+
Category: 'File I/O',
|
|
14
|
+
TitleBarColor: '#2980b9',
|
|
15
|
+
BodyStyle: { fill: '#eaf2f8', stroke: '#2980b9' },
|
|
16
|
+
Width: 180,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'Trigger', Side: 'left-bottom', PortType: 'event-in', MinimumInputCount: 0, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'File', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Data', Side: 'right-top', PortType: 'value' },
|
|
26
|
+
{ Name: 'Error', Side: 'bottom', PortType: 'error' }
|
|
27
|
+
],
|
|
28
|
+
PropertiesPanel:
|
|
29
|
+
{
|
|
30
|
+
PanelType: 'Form',
|
|
31
|
+
DefaultWidth: 340,
|
|
32
|
+
DefaultHeight: 220,
|
|
33
|
+
Title: 'Read Text Settings',
|
|
34
|
+
Configuration:
|
|
35
|
+
{
|
|
36
|
+
Manifest:
|
|
37
|
+
{
|
|
38
|
+
Scope: 'FlowCardReadText',
|
|
39
|
+
Sections: [{ Name: 'File', Hash: 'RTSection', Groups: [{ Name: 'Settings', Hash: 'RTGroup' }] }],
|
|
40
|
+
Descriptors:
|
|
41
|
+
{
|
|
42
|
+
'Record.Data.File': { Name: 'File Path', Hash: 'File', DataType: 'String', Default: '', PictForm: { Section: 'RTSection', Group: 'RTGroup', Row: 1, Width: 12 } },
|
|
43
|
+
'Record.Data.Destination': { Name: 'State Destination', Hash: 'Destination', DataType: 'String', Default: '', PictForm: { Section: 'RTSection', Group: 'RTGroup', Row: 2, Width: 12 } }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
pOptions),
|
|
50
|
+
pServiceHash);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = FlowCardReadText;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardRestRequest extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'REST Request',
|
|
11
|
+
Code: 'REST',
|
|
12
|
+
Description: 'Generic REST request with full control over method, headers, and cookies.',
|
|
13
|
+
Category: 'REST',
|
|
14
|
+
TitleBarColor: '#e65100',
|
|
15
|
+
BodyStyle: { fill: '#fff3e0', stroke: '#e65100' },
|
|
16
|
+
Width: 200,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'In', Side: 'left-bottom', PortType: 'event-in', MinimumInputCount: 0, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'URL', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Response', Side: 'right-top', PortType: 'value' },
|
|
26
|
+
{ Name: 'Error', Side: 'bottom', PortType: 'error' }
|
|
27
|
+
],
|
|
28
|
+
PropertiesPanel:
|
|
29
|
+
{
|
|
30
|
+
PanelType: 'Form',
|
|
31
|
+
DefaultWidth: 400,
|
|
32
|
+
DefaultHeight: 400,
|
|
33
|
+
Title: 'REST Request Settings',
|
|
34
|
+
Configuration:
|
|
35
|
+
{
|
|
36
|
+
Manifest:
|
|
37
|
+
{
|
|
38
|
+
Scope: 'FlowCardRestRequest',
|
|
39
|
+
Sections: [{ Name: 'Request', Hash: 'RESTSection', Groups: [{ Name: 'Settings', Hash: 'RESTGroup' }] }],
|
|
40
|
+
Descriptors:
|
|
41
|
+
{
|
|
42
|
+
'Record.Data.URL': { Name: 'URL', Hash: 'URL', DataType: 'String', Default: '', PictForm: { Section: 'RESTSection', Group: 'RESTGroup', Row: 1, Width: 12 } },
|
|
43
|
+
'Record.Data.Method': { Name: 'HTTP Method', Hash: 'Method', DataType: 'String', Default: 'GET', PictForm: { Section: 'RESTSection', Group: 'RESTGroup', Row: 2, Width: 4 } },
|
|
44
|
+
'Record.Data.ContentType': { Name: 'Content Type', Hash: 'ContentType', DataType: 'String', Default: 'application/json', PictForm: { Section: 'RESTSection', Group: 'RESTGroup', Row: 2, Width: 8 } },
|
|
45
|
+
'Record.Data.Headers': { Name: 'Headers (JSON)', Hash: 'Headers', DataType: 'String', Default: '', PictForm: { Section: 'RESTSection', Group: 'RESTGroup', Row: 3, Width: 12, InputType: 'TextArea' } },
|
|
46
|
+
'Record.Data.Body': { Name: 'Body State Address', Hash: 'Body', DataType: 'String', Default: '', PictForm: { Section: 'RESTSection', Group: 'RESTGroup', Row: 4, Width: 12 } },
|
|
47
|
+
'Record.Data.Destination': { Name: 'Response Destination', Hash: 'Destination', DataType: 'String', Default: '', PictForm: { Section: 'RESTSection', Group: 'RESTGroup', Row: 5, Width: 12 } },
|
|
48
|
+
'Record.Data.Retries': { Name: 'Max Retries', Hash: 'Retries', DataType: 'Number', Default: 0, PictForm: { Section: 'RESTSection', Group: 'RESTGroup', Row: 6, Width: 6 } }
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
pOptions),
|
|
55
|
+
pServiceHash);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
module.exports = FlowCardRestRequest;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardSendJSON extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Send JSON',
|
|
11
|
+
Code: 'SENDJSON',
|
|
12
|
+
Description: 'Send a JSON payload via POST or PUT.',
|
|
13
|
+
Category: 'REST',
|
|
14
|
+
TitleBarColor: '#e65100',
|
|
15
|
+
BodyStyle: { fill: '#fff3e0', stroke: '#e65100' },
|
|
16
|
+
Width: 180,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'Data', Side: 'left-top', PortType: 'value', MinimumInputCount: 1, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'URL', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Response', Side: 'right-top', PortType: 'value' },
|
|
26
|
+
{ Name: 'Error', Side: 'bottom', PortType: 'error' }
|
|
27
|
+
],
|
|
28
|
+
PropertiesPanel:
|
|
29
|
+
{
|
|
30
|
+
PanelType: 'Form',
|
|
31
|
+
DefaultWidth: 380,
|
|
32
|
+
DefaultHeight: 320,
|
|
33
|
+
Title: 'Send JSON Settings',
|
|
34
|
+
Configuration:
|
|
35
|
+
{
|
|
36
|
+
Manifest:
|
|
37
|
+
{
|
|
38
|
+
Scope: 'FlowCardSendJSON',
|
|
39
|
+
Sections: [{ Name: 'Request', Hash: 'SJSection', Groups: [{ Name: 'Settings', Hash: 'SJGroup' }] }],
|
|
40
|
+
Descriptors:
|
|
41
|
+
{
|
|
42
|
+
'Record.Data.URL': { Name: 'URL', Hash: 'URL', DataType: 'String', Default: '', PictForm: { Section: 'SJSection', Group: 'SJGroup', Row: 1, Width: 12 } },
|
|
43
|
+
'Record.Data.Method': { Name: 'HTTP Method', Hash: 'Method', DataType: 'String', Default: 'POST', PictForm: { Section: 'SJSection', Group: 'SJGroup', Row: 2, Width: 6 } },
|
|
44
|
+
'Record.Data.Address': { Name: 'Body State Address', Hash: 'Address', DataType: 'String', Default: '', PictForm: { Section: 'SJSection', Group: 'SJGroup', Row: 2, Width: 6 } },
|
|
45
|
+
'Record.Data.Headers': { Name: 'Headers (JSON)', Hash: 'Headers', DataType: 'String', Default: '', PictForm: { Section: 'SJSection', Group: 'SJGroup', Row: 3, Width: 12, InputType: 'TextArea' } },
|
|
46
|
+
'Record.Data.Destination': { Name: 'Response Destination', Hash: 'Destination', DataType: 'String', Default: '', PictForm: { Section: 'SJSection', Group: 'SJGroup', Row: 4, Width: 12 } }
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
pOptions),
|
|
53
|
+
pServiceHash);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
module.exports = FlowCardSendJSON;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardSolver extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Solver',
|
|
11
|
+
Code: 'SOLV',
|
|
12
|
+
Description: 'Evaluate a mathematical expression and store the result.',
|
|
13
|
+
Category: 'Core',
|
|
14
|
+
TitleBarColor: '#7b1fa2',
|
|
15
|
+
BodyStyle: { fill: '#f3e5f5', stroke: '#7b1fa2' },
|
|
16
|
+
Width: 180,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'In', Side: 'left-bottom', PortType: 'event-in', MinimumInputCount: 1, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'Expression', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Result', Side: 'right-top', PortType: 'value' }
|
|
26
|
+
],
|
|
27
|
+
PropertiesPanel:
|
|
28
|
+
{
|
|
29
|
+
PanelType: 'Form',
|
|
30
|
+
DefaultWidth: 350,
|
|
31
|
+
DefaultHeight: 220,
|
|
32
|
+
Title: 'Solver Settings',
|
|
33
|
+
Configuration:
|
|
34
|
+
{
|
|
35
|
+
Manifest:
|
|
36
|
+
{
|
|
37
|
+
Scope: 'FlowCardSolver',
|
|
38
|
+
Sections:
|
|
39
|
+
[
|
|
40
|
+
{
|
|
41
|
+
Name: 'Expression',
|
|
42
|
+
Hash: 'SolverSection',
|
|
43
|
+
Groups:
|
|
44
|
+
[
|
|
45
|
+
{ Name: 'Settings', Hash: 'SolverGroup' }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
Descriptors:
|
|
50
|
+
{
|
|
51
|
+
'Record.Data.Expression':
|
|
52
|
+
{
|
|
53
|
+
Name: 'Expression',
|
|
54
|
+
Hash: 'Expression',
|
|
55
|
+
DataType: 'String',
|
|
56
|
+
Default: '',
|
|
57
|
+
PictForm: { Section: 'SolverSection', Group: 'SolverGroup', Row: 1, Width: 12, InputType: 'TextArea' }
|
|
58
|
+
},
|
|
59
|
+
'Record.Data.Destination':
|
|
60
|
+
{
|
|
61
|
+
Name: 'Result Destination',
|
|
62
|
+
Hash: 'Destination',
|
|
63
|
+
DataType: 'String',
|
|
64
|
+
Default: '',
|
|
65
|
+
PictForm: { Section: 'SolverSection', Group: 'SolverGroup', Row: 2, Width: 12 }
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
pOptions),
|
|
73
|
+
pServiceHash);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
module.exports = FlowCardSolver;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardStart extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Start',
|
|
11
|
+
Code: 'start',
|
|
12
|
+
Description: 'Entry point for the workflow.',
|
|
13
|
+
Category: 'Flow Control',
|
|
14
|
+
TitleBarColor: '#455a64',
|
|
15
|
+
BodyStyle: { fill: '#eceff1', stroke: '#455a64' },
|
|
16
|
+
Width: 140,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs: [],
|
|
19
|
+
Outputs:
|
|
20
|
+
[
|
|
21
|
+
{ Name: 'Out', Side: 'right', PortType: 'event-out' }
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
pOptions),
|
|
25
|
+
pServiceHash);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = FlowCardStart;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardTemplateString extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Template String',
|
|
11
|
+
Code: 'TMPL',
|
|
12
|
+
Description: 'Interpolate a template string with state values.',
|
|
13
|
+
Category: 'Core',
|
|
14
|
+
TitleBarColor: '#7b1fa2',
|
|
15
|
+
BodyStyle: { fill: '#f3e5f5', stroke: '#7b1fa2' },
|
|
16
|
+
Width: 190,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'In', Side: 'left-bottom', PortType: 'event-in', MinimumInputCount: 1, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'Template', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Result', Side: 'right-top', PortType: 'value' }
|
|
26
|
+
],
|
|
27
|
+
PropertiesPanel:
|
|
28
|
+
{
|
|
29
|
+
PanelType: 'Form',
|
|
30
|
+
DefaultWidth: 380,
|
|
31
|
+
DefaultHeight: 240,
|
|
32
|
+
Title: 'Template Settings',
|
|
33
|
+
Configuration:
|
|
34
|
+
{
|
|
35
|
+
Manifest:
|
|
36
|
+
{
|
|
37
|
+
Scope: 'FlowCardTemplateString',
|
|
38
|
+
Sections:
|
|
39
|
+
[
|
|
40
|
+
{
|
|
41
|
+
Name: 'Template',
|
|
42
|
+
Hash: 'TmplSection',
|
|
43
|
+
Groups:
|
|
44
|
+
[
|
|
45
|
+
{ Name: 'Settings', Hash: 'TmplGroup' }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
Descriptors:
|
|
50
|
+
{
|
|
51
|
+
'Record.Data.Template':
|
|
52
|
+
{
|
|
53
|
+
Name: 'Template',
|
|
54
|
+
Hash: 'Template',
|
|
55
|
+
DataType: 'String',
|
|
56
|
+
Default: '',
|
|
57
|
+
PictForm: { Section: 'TmplSection', Group: 'TmplGroup', Row: 1, Width: 12, InputType: 'TextArea' }
|
|
58
|
+
},
|
|
59
|
+
'Record.Data.Destination':
|
|
60
|
+
{
|
|
61
|
+
Name: 'Result Destination',
|
|
62
|
+
Hash: 'Destination',
|
|
63
|
+
DataType: 'String',
|
|
64
|
+
Default: '',
|
|
65
|
+
PictForm: { Section: 'TmplSection', Group: 'TmplGroup', Row: 2, Width: 12 }
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
pOptions),
|
|
73
|
+
pServiceHash);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
module.exports = FlowCardTemplateString;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardWriteJSON extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Write JSON',
|
|
11
|
+
Code: 'WJSON',
|
|
12
|
+
Description: 'Write a JSON object to the staging folder.',
|
|
13
|
+
Category: 'File I/O',
|
|
14
|
+
TitleBarColor: '#2980b9',
|
|
15
|
+
BodyStyle: { fill: '#eaf2f8', stroke: '#2980b9' },
|
|
16
|
+
Width: 180,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'Data', Side: 'left-top', PortType: 'value', MinimumInputCount: 1, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'File', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Done', Side: 'right', PortType: 'event-out' },
|
|
26
|
+
{ Name: 'Error', Side: 'bottom', PortType: 'error' }
|
|
27
|
+
],
|
|
28
|
+
PropertiesPanel:
|
|
29
|
+
{
|
|
30
|
+
PanelType: 'Form',
|
|
31
|
+
DefaultWidth: 340,
|
|
32
|
+
DefaultHeight: 220,
|
|
33
|
+
Title: 'Write JSON Settings',
|
|
34
|
+
Configuration:
|
|
35
|
+
{
|
|
36
|
+
Manifest:
|
|
37
|
+
{
|
|
38
|
+
Scope: 'FlowCardWriteJSON',
|
|
39
|
+
Sections: [{ Name: 'File', Hash: 'WJSection', Groups: [{ Name: 'Settings', Hash: 'WJGroup' }] }],
|
|
40
|
+
Descriptors:
|
|
41
|
+
{
|
|
42
|
+
'Record.Data.File': { Name: 'File Path', Hash: 'File', DataType: 'String', Default: '', PictForm: { Section: 'WJSection', Group: 'WJGroup', Row: 1, Width: 12 } },
|
|
43
|
+
'Record.Data.Address': { Name: 'State Address', Hash: 'Address', DataType: 'String', Default: '', PictForm: { Section: 'WJSection', Group: 'WJGroup', Row: 2, Width: 12 } }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
pOptions),
|
|
50
|
+
pServiceHash);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = FlowCardWriteJSON;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const libPictFlowCard = require('pict-section-flow').PictFlowCard;
|
|
2
|
+
|
|
3
|
+
class FlowCardWriteText extends libPictFlowCard
|
|
4
|
+
{
|
|
5
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
6
|
+
{
|
|
7
|
+
super(pFable, Object.assign(
|
|
8
|
+
{},
|
|
9
|
+
{
|
|
10
|
+
Title: 'Write Text',
|
|
11
|
+
Code: 'WTXT',
|
|
12
|
+
Description: 'Write text content to the staging folder.',
|
|
13
|
+
Category: 'File I/O',
|
|
14
|
+
TitleBarColor: '#2980b9',
|
|
15
|
+
BodyStyle: { fill: '#eaf2f8', stroke: '#2980b9' },
|
|
16
|
+
Width: 180,
|
|
17
|
+
Height: 80,
|
|
18
|
+
Inputs:
|
|
19
|
+
[
|
|
20
|
+
{ Name: 'Data', Side: 'left-top', PortType: 'value', MinimumInputCount: 1, MaximumInputCount: 1 },
|
|
21
|
+
{ Name: 'File', Side: 'left-top', PortType: 'setting', MinimumInputCount: 0, MaximumInputCount: 1 }
|
|
22
|
+
],
|
|
23
|
+
Outputs:
|
|
24
|
+
[
|
|
25
|
+
{ Name: 'Done', Side: 'right', PortType: 'event-out' },
|
|
26
|
+
{ Name: 'Error', Side: 'bottom', PortType: 'error' }
|
|
27
|
+
],
|
|
28
|
+
PropertiesPanel:
|
|
29
|
+
{
|
|
30
|
+
PanelType: 'Form',
|
|
31
|
+
DefaultWidth: 340,
|
|
32
|
+
DefaultHeight: 220,
|
|
33
|
+
Title: 'Write Text Settings',
|
|
34
|
+
Configuration:
|
|
35
|
+
{
|
|
36
|
+
Manifest:
|
|
37
|
+
{
|
|
38
|
+
Scope: 'FlowCardWriteText',
|
|
39
|
+
Sections: [{ Name: 'File', Hash: 'WTSection', Groups: [{ Name: 'Settings', Hash: 'WTGroup' }] }],
|
|
40
|
+
Descriptors:
|
|
41
|
+
{
|
|
42
|
+
'Record.Data.File': { Name: 'File Path', Hash: 'File', DataType: 'String', Default: '', PictForm: { Section: 'WTSection', Group: 'WTGroup', Row: 1, Width: 12 } },
|
|
43
|
+
'Record.Data.Address': { Name: 'State Address', Hash: 'Address', DataType: 'String', Default: '', PictForm: { Section: 'WTSection', Group: 'WTGroup', Row: 2, Width: 12 } }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
pOptions),
|
|
50
|
+
pServiceHash);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = FlowCardWriteText;
|