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.
Files changed (121) hide show
  1. package/.claude/launch.json +11 -0
  2. package/.claude/ultravisor-dev-config.json +3 -0
  3. package/.ultravisor.json +426 -0
  4. package/docs/README.md +63 -0
  5. package/package.json +12 -8
  6. package/source/Ultravisor.cjs +22 -3
  7. package/source/cli/Ultravisor-CLIProgram.cjs +35 -23
  8. package/source/cli/commands/Ultravisor-Command-SingleOperation.cjs +29 -18
  9. package/source/cli/commands/Ultravisor-Command-SingleTask.cjs +62 -19
  10. package/source/cli/commands/Ultravisor-Command-UpdateTask.cjs +27 -15
  11. package/source/config/Ultravisor-Default-Command-Configuration.cjs +5 -3
  12. package/source/services/Ultravisor-ExecutionEngine.cjs +1039 -0
  13. package/source/services/Ultravisor-ExecutionManifest.cjs +399 -0
  14. package/source/services/Ultravisor-Hypervisor-State.cjs +270 -97
  15. package/source/services/Ultravisor-Hypervisor.cjs +38 -83
  16. package/source/services/Ultravisor-StateManager.cjs +241 -0
  17. package/source/services/Ultravisor-TaskTypeRegistry.cjs +143 -0
  18. package/source/services/tasks/Ultravisor-TaskType-Base.cjs +105 -0
  19. package/source/services/tasks/control/Ultravisor-TaskType-IfConditional.cjs +148 -0
  20. package/source/services/tasks/control/Ultravisor-TaskType-LaunchOperation.cjs +187 -0
  21. package/source/services/tasks/control/Ultravisor-TaskType-SplitExecute.cjs +184 -0
  22. package/source/services/tasks/data/Ultravisor-TaskType-ReplaceString.cjs +82 -0
  23. package/source/services/tasks/data/Ultravisor-TaskType-SetValues.cjs +81 -0
  24. package/source/services/tasks/data/Ultravisor-TaskType-StringAppender.cjs +101 -0
  25. package/source/services/tasks/file-io/Ultravisor-TaskType-ReadFile.cjs +103 -0
  26. package/source/services/tasks/file-io/Ultravisor-TaskType-WriteFile.cjs +117 -0
  27. package/source/services/tasks/interaction/Ultravisor-TaskType-ErrorMessage.cjs +54 -0
  28. package/source/services/tasks/interaction/Ultravisor-TaskType-ValueInput.cjs +62 -0
  29. package/source/web_server/Ultravisor-API-Server.cjs +237 -124
  30. package/test/Ultravisor_browser_tests.js +2226 -0
  31. package/test/Ultravisor_tests.js +1143 -5830
  32. package/webinterface/css/ultravisor.css +23 -0
  33. package/webinterface/package.json +6 -3
  34. package/webinterface/source/Pict-Application-Ultravisor.js +93 -73
  35. package/webinterface/source/cards/FlowCard-CSVTransform.js +43 -0
  36. package/webinterface/source/cards/FlowCard-Command.js +86 -0
  37. package/webinterface/source/cards/FlowCard-ComprehensionIntersect.js +40 -0
  38. package/webinterface/source/cards/FlowCard-Conditional.js +87 -0
  39. package/webinterface/source/cards/FlowCard-CopyFile.js +55 -0
  40. package/webinterface/source/cards/FlowCard-End.js +29 -0
  41. package/webinterface/source/cards/FlowCard-GetJSON.js +55 -0
  42. package/webinterface/source/cards/FlowCard-GetText.js +54 -0
  43. package/webinterface/source/cards/FlowCard-Histogram.js +176 -0
  44. package/webinterface/source/cards/FlowCard-LaunchOperation.js +82 -0
  45. package/webinterface/source/cards/FlowCard-ListFiles.js +55 -0
  46. package/webinterface/source/cards/FlowCard-MeadowCount.js +44 -0
  47. package/webinterface/source/cards/FlowCard-MeadowCreate.js +44 -0
  48. package/webinterface/source/cards/FlowCard-MeadowDelete.js +45 -0
  49. package/webinterface/source/cards/FlowCard-MeadowRead.js +46 -0
  50. package/webinterface/source/cards/FlowCard-MeadowReads.js +46 -0
  51. package/webinterface/source/cards/FlowCard-MeadowUpdate.js +44 -0
  52. package/webinterface/source/cards/FlowCard-ParseCSV.js +85 -0
  53. package/webinterface/source/cards/FlowCard-ReadJSON.js +54 -0
  54. package/webinterface/source/cards/FlowCard-ReadText.js +54 -0
  55. package/webinterface/source/cards/FlowCard-RestRequest.js +59 -0
  56. package/webinterface/source/cards/FlowCard-SendJSON.js +57 -0
  57. package/webinterface/source/cards/FlowCard-Solver.js +77 -0
  58. package/webinterface/source/cards/FlowCard-Start.js +29 -0
  59. package/webinterface/source/cards/FlowCard-TemplateString.js +77 -0
  60. package/webinterface/source/cards/FlowCard-WriteJSON.js +54 -0
  61. package/webinterface/source/cards/FlowCard-WriteText.js +54 -0
  62. package/webinterface/source/data/ExampleFlow-CSVPipeline.js +231 -0
  63. package/webinterface/source/data/ExampleFlow-FileProcessor.js +315 -0
  64. package/webinterface/source/data/ExampleFlow-MeadowPipeline.js +328 -0
  65. package/webinterface/source/providers/PictRouter-Ultravisor-Configuration.json +8 -8
  66. package/webinterface/source/views/PictView-Ultravisor-Dashboard.js +6 -6
  67. package/webinterface/source/views/PictView-Ultravisor-FlowEditor.js +436 -0
  68. package/webinterface/source/views/PictView-Ultravisor-ManifestList.js +45 -43
  69. package/webinterface/source/views/PictView-Ultravisor-OperationEdit.js +34 -89
  70. package/webinterface/source/views/PictView-Ultravisor-OperationList.js +128 -13
  71. package/webinterface/source/views/PictView-Ultravisor-PendingInput.js +314 -0
  72. package/webinterface/source/views/PictView-Ultravisor-Schedule.js +18 -53
  73. package/webinterface/source/views/PictView-Ultravisor-TimingView.js +27 -14
  74. package/webinterface/source/views/PictView-Ultravisor-TopBar.js +2 -1
  75. package/.babelrc +0 -6
  76. package/.browserslistrc +0 -1
  77. package/.browserslistrc-BACKUP +0 -1
  78. package/.gulpfile-quackage-config.json +0 -7
  79. package/.gulpfile-quackage.js +0 -2
  80. package/debug/Harness.js +0 -5
  81. package/source/services/Ultravisor-Operation-Manifest.cjs +0 -160
  82. package/source/services/Ultravisor-Operation.cjs +0 -200
  83. package/source/services/Ultravisor-Task.cjs +0 -349
  84. package/source/services/events/Ultravisor-Hypervisor-Event-Solver.cjs +0 -11
  85. package/source/services/tasks/Ultravisor-Task-Base.cjs +0 -264
  86. package/source/services/tasks/Ultravisor-Task-CollectValues.cjs +0 -188
  87. package/source/services/tasks/Ultravisor-Task-Command.cjs +0 -65
  88. package/source/services/tasks/Ultravisor-Task-CommandEach.cjs +0 -190
  89. package/source/services/tasks/Ultravisor-Task-Conditional.cjs +0 -104
  90. package/source/services/tasks/Ultravisor-Task-DateWindow.cjs +0 -72
  91. package/source/services/tasks/Ultravisor-Task-GeneratePagedOperation.cjs +0 -336
  92. package/source/services/tasks/Ultravisor-Task-LaunchOperation.cjs +0 -143
  93. package/source/services/tasks/Ultravisor-Task-LaunchTask.cjs +0 -146
  94. package/source/services/tasks/Ultravisor-Task-LineMatch.cjs +0 -158
  95. package/source/services/tasks/Ultravisor-Task-Request.cjs +0 -56
  96. package/source/services/tasks/Ultravisor-Task-Solver.cjs +0 -89
  97. package/source/services/tasks/Ultravisor-Task-TemplateString.cjs +0 -93
  98. package/source/services/tasks/rest/Ultravisor-Task-GetBinary.cjs +0 -127
  99. package/source/services/tasks/rest/Ultravisor-Task-GetJSON.cjs +0 -119
  100. package/source/services/tasks/rest/Ultravisor-Task-GetText.cjs +0 -109
  101. package/source/services/tasks/rest/Ultravisor-Task-GetXML.cjs +0 -112
  102. package/source/services/tasks/rest/Ultravisor-Task-RestRequest.cjs +0 -499
  103. package/source/services/tasks/rest/Ultravisor-Task-SendJSON.cjs +0 -150
  104. package/source/services/tasks/stagingfiles/Ultravisor-Task-CopyFile.cjs +0 -110
  105. package/source/services/tasks/stagingfiles/Ultravisor-Task-ListFiles.cjs +0 -89
  106. package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadBinary.cjs +0 -87
  107. package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadJSON.cjs +0 -67
  108. package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadText.cjs +0 -66
  109. package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadXML.cjs +0 -69
  110. package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteBinary.cjs +0 -95
  111. package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteJSON.cjs +0 -96
  112. package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteText.cjs +0 -99
  113. package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteXML.cjs +0 -102
  114. package/webinterface/.babelrc +0 -6
  115. package/webinterface/.browserslistrc +0 -1
  116. package/webinterface/.browserslistrc-BACKUP +0 -1
  117. package/webinterface/.gulpfile-quackage-config.json +0 -7
  118. package/webinterface/.gulpfile-quackage.js +0 -2
  119. package/webinterface/source/views/PictView-Ultravisor-TaskEdit.js +0 -220
  120. package/webinterface/source/views/PictView-Ultravisor-TaskList.js +0 -248
  121. /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;