Flowfile 0.5.1__py3-none-any.whl → 0.5.4__py3-none-any.whl

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 (346) hide show
  1. build_backends/main.py +25 -22
  2. build_backends/main_prd.py +10 -19
  3. flowfile/__init__.py +194 -74
  4. flowfile/__main__.py +10 -7
  5. flowfile/api.py +51 -57
  6. flowfile/web/__init__.py +14 -9
  7. flowfile/web/static/assets/AdminView-f53bad23.css +129 -0
  8. flowfile/web/static/assets/AdminView-f9847d67.js +713 -0
  9. flowfile/web/static/assets/CloudConnectionView-cf85f943.css +72 -0
  10. flowfile/web/static/assets/{CloudConnectionManager-0dfba9f2.js → CloudConnectionView-faace55b.js} +11 -11
  11. flowfile/web/static/assets/{CloudStorageReader-29d14fcc.css → CloudStorageReader-24c54524.css} +27 -27
  12. flowfile/web/static/assets/{CloudStorageReader-d5b1b6c9.js → CloudStorageReader-d86ecaa7.js} +10 -8
  13. flowfile/web/static/assets/{CloudStorageWriter-00d87aad.js → CloudStorageWriter-0f4d9a44.js} +10 -8
  14. flowfile/web/static/assets/{CloudStorageWriter-b0ee067f.css → CloudStorageWriter-60547855.css} +26 -26
  15. flowfile/web/static/assets/ColumnActionInput-c44b7aee.css +159 -0
  16. flowfile/web/static/assets/ColumnActionInput-f4189ae0.js +330 -0
  17. flowfile/web/static/assets/{ColumnSelector-47996a16.css → ColumnSelector-371637fb.css} +2 -2
  18. flowfile/web/static/assets/{ColumnSelector-4685e75d.js → ColumnSelector-e66b33da.js} +3 -5
  19. flowfile/web/static/assets/ContextMenu-49463352.js +9 -0
  20. flowfile/web/static/assets/ContextMenu-dd5f3f25.js +9 -0
  21. flowfile/web/static/assets/ContextMenu-f709b884.js +9 -0
  22. flowfile/web/static/assets/ContextMenu.vue_vue_type_script_setup_true_lang-a1bd6314.js +59 -0
  23. flowfile/web/static/assets/{CrossJoin-702a3edd.js → CrossJoin-24694b8f.js} +12 -10
  24. flowfile/web/static/assets/{CrossJoin-1119d18e.css → CrossJoin-71b4cc10.css} +20 -20
  25. flowfile/web/static/assets/{CustomNode-b1519993.js → CustomNode-569d45ff.js} +43 -24
  26. flowfile/web/static/assets/CustomNode-edb9b939.css +42 -0
  27. flowfile/web/static/assets/{DatabaseConnectionSettings-0c04b2e5.css → DatabaseConnectionSettings-c20a1e16.css} +23 -21
  28. flowfile/web/static/assets/{DatabaseConnectionSettings-6f3e4ea5.js → DatabaseConnectionSettings-cfc08938.js} +5 -4
  29. flowfile/web/static/assets/{DatabaseReader-ae61773c.css → DatabaseReader-5bf8c75b.css} +41 -46
  30. flowfile/web/static/assets/{DatabaseReader-d38c7295.js → DatabaseReader-701feabb.js} +25 -15
  31. flowfile/web/static/assets/{DatabaseManager-cf5ef661.js → DatabaseView-0482e5b5.js} +11 -11
  32. flowfile/web/static/assets/DatabaseView-6655afd6.css +57 -0
  33. flowfile/web/static/assets/{DatabaseWriter-b04ef46a.js → DatabaseWriter-16721989.js} +17 -10
  34. flowfile/web/static/assets/{DatabaseWriter-2f570e53.css → DatabaseWriter-bdcf2c8b.css} +29 -27
  35. flowfile/web/static/assets/{designer-8da3ba3a.css → DesignerView-49abb835.css} +783 -663
  36. flowfile/web/static/assets/{designer-9633482a.js → DesignerView-f64749fb.js} +1292 -3253
  37. flowfile/web/static/assets/{documentation-ca400224.js → DocumentationView-61bd2990.js} +5 -5
  38. flowfile/web/static/assets/{documentation-12216a74.css → DocumentationView-9ea6e871.css} +9 -9
  39. flowfile/web/static/assets/{ExploreData-2d0cf4db.css → ExploreData-10c5acc8.css} +13 -12
  40. flowfile/web/static/assets/{ExploreData-5fa10ed8.js → ExploreData-e2735b13.js} +18 -9
  41. flowfile/web/static/assets/{ExternalSource-d39af878.js → ExternalSource-2535c3b2.js} +9 -7
  42. flowfile/web/static/assets/{ExternalSource-e37b6275.css → ExternalSource-7ac7373f.css} +20 -20
  43. flowfile/web/static/assets/Filter-2cdbc93c.js +287 -0
  44. flowfile/web/static/assets/Filter-7494ea97.css +48 -0
  45. flowfile/web/static/assets/{Formula-bb96803d.css → Formula-53d58c43.css} +7 -7
  46. flowfile/web/static/assets/{Formula-6b04fb1d.js → Formula-fcda3c2c.js} +13 -11
  47. flowfile/web/static/assets/{FuzzyMatch-1010f966.css → FuzzyMatch-ad6361d6.css} +68 -69
  48. flowfile/web/static/assets/{FuzzyMatch-999521f4.js → FuzzyMatch-f8d3b7d3.js} +12 -10
  49. flowfile/web/static/assets/{Pivot-cf333e3d.css → GraphSolver-4b4d7db9.css} +5 -5
  50. flowfile/web/static/assets/{GraphSolver-17dd2198.js → GraphSolver-72eaa695.js} +14 -12
  51. flowfile/web/static/assets/GroupBy-5792782d.css +9 -0
  52. flowfile/web/static/assets/{GroupBy-6b039e18.js → GroupBy-8aa0598b.js} +9 -7
  53. flowfile/web/static/assets/{Join-fd79b451.css → Join-28b5e18f.css} +22 -22
  54. flowfile/web/static/assets/{Join-24d0f113.js → Join-e40f0ffa.js} +13 -11
  55. flowfile/web/static/assets/LoginView-5111c9ae.js +134 -0
  56. flowfile/web/static/assets/LoginView-d325d632.css +172 -0
  57. flowfile/web/static/assets/ManualInput-3702e677.css +293 -0
  58. flowfile/web/static/assets/{ManualInput-34639209.js → ManualInput-9b6f3224.js} +170 -116
  59. flowfile/web/static/assets/{MultiSelect-0e8724a3.js → MultiSelect-ef28e19e.js} +2 -2
  60. flowfile/web/static/assets/{MultiSelect.vue_vue_type_script_setup_true_lang-b0e538c2.js → MultiSelect.vue_vue_type_script_setup_true_lang-83b3bbfd.js} +1 -1
  61. flowfile/web/static/assets/NodeDesigner-94cd4dd3.css +1429 -0
  62. flowfile/web/static/assets/NodeDesigner-d2b7ee2b.js +2712 -0
  63. flowfile/web/static/assets/{NumericInput-3d63a470.js → NumericInput-1d789794.js} +2 -2
  64. flowfile/web/static/assets/{NumericInput.vue_vue_type_script_setup_true_lang-e0edeccc.js → NumericInput.vue_vue_type_script_setup_true_lang-7775f83e.js} +5 -2
  65. flowfile/web/static/assets/Output-692dd25d.css +37 -0
  66. flowfile/web/static/assets/{Output-edea9802.js → Output-cefef801.js} +14 -10
  67. flowfile/web/static/assets/{GraphSolver-f0cb7bfb.css → Pivot-0eda81b4.css} +5 -5
  68. flowfile/web/static/assets/{Pivot-61d19301.js → Pivot-bab1b75b.js} +12 -10
  69. flowfile/web/static/assets/PivotValidation-0e905b1a.css +13 -0
  70. flowfile/web/static/assets/PivotValidation-41b57ad6.css +13 -0
  71. flowfile/web/static/assets/{PivotValidation-f97fec5b.js → PivotValidation-e7941f91.js} +3 -3
  72. flowfile/web/static/assets/{PivotValidation-de9f43fe.js → PivotValidation-fba09336.js} +3 -3
  73. flowfile/web/static/assets/{PolarsCode-650322d1.css → PolarsCode-2b1f1f23.css} +4 -4
  74. flowfile/web/static/assets/{PolarsCode-bc3c9984.js → PolarsCode-740e40fa.js} +18 -9
  75. flowfile/web/static/assets/PopOver-862d7e28.js +939 -0
  76. flowfile/web/static/assets/PopOver-d96599db.css +33 -0
  77. flowfile/web/static/assets/{Read-64a3f259.js → Read-225cc63f.js} +16 -12
  78. flowfile/web/static/assets/{Read-e808b239.css → Read-90f366bc.css} +15 -15
  79. flowfile/web/static/assets/{RecordCount-3d5039be.js → RecordCount-ffc71eca.js} +6 -4
  80. flowfile/web/static/assets/{RecordId-597510e0.js → RecordId-a70bb8df.js} +9 -7
  81. flowfile/web/static/assets/{SQLQueryComponent-df51adbe.js → SQLQueryComponent-15a421f5.js} +3 -3
  82. flowfile/web/static/assets/SQLQueryComponent-edb90b98.css +29 -0
  83. flowfile/web/static/assets/{Sample-4be0a507.js → Sample-6c26afc7.js} +6 -4
  84. flowfile/web/static/assets/SecretSelector-6329f743.css +43 -0
  85. flowfile/web/static/assets/SecretSelector-ceed9496.js +113 -0
  86. flowfile/web/static/assets/{SecretManager-4839be57.js → SecretsView-214d255a.js} +35 -36
  87. flowfile/web/static/assets/SecretsView-aa291340.css +38 -0
  88. flowfile/web/static/assets/{Select-9b72f201.js → Select-8fc29999.js} +9 -7
  89. flowfile/web/static/assets/{SettingsSection-71e6b7e3.css → SettingsSection-07fbbc39.css} +4 -4
  90. flowfile/web/static/assets/{SettingsSection-5c696bee.css → SettingsSection-26fe48d4.css} +4 -4
  91. flowfile/web/static/assets/{SettingsSection-7ded385d.js → SettingsSection-3f70e4c3.js} +3 -3
  92. flowfile/web/static/assets/{SettingsSection-f0f75a42.js → SettingsSection-83090218.js} +3 -3
  93. flowfile/web/static/assets/{SettingsSection-2e4d03c4.css → SettingsSection-8f980839.css} +4 -4
  94. flowfile/web/static/assets/{SettingsSection-e1e9c953.js → SettingsSection-9f0d1725.js} +3 -3
  95. flowfile/web/static/assets/SetupView-3fa0aa03.js +160 -0
  96. flowfile/web/static/assets/SetupView-e2da3442.css +230 -0
  97. flowfile/web/static/assets/{SingleSelect-6c777aac.js → SingleSelect-a4a568cb.js} +2 -2
  98. flowfile/web/static/assets/{SingleSelect.vue_vue_type_script_setup_true_lang-33e3ff9b.js → SingleSelect.vue_vue_type_script_setup_true_lang-c8ebdd33.js} +1 -1
  99. flowfile/web/static/assets/{SliderInput-7cb93e62.js → SliderInput-be533e71.js} +7 -4
  100. flowfile/web/static/assets/SliderInput-f2e4f23c.css +4 -0
  101. flowfile/web/static/assets/{Sort-6cbde21a.js → Sort-154dad81.js} +9 -7
  102. flowfile/web/static/assets/Sort-4abb7fae.css +9 -0
  103. flowfile/web/static/assets/{TextInput-d9a40c11.js → TextInput-454e2bda.js} +2 -2
  104. flowfile/web/static/assets/{TextInput.vue_vue_type_script_setup_true_lang-5896c375.js → TextInput.vue_vue_type_script_setup_true_lang-e86510d0.js} +5 -2
  105. flowfile/web/static/assets/{TextToRows-5d2c1190.css → TextToRows-12afb4f4.css} +10 -10
  106. flowfile/web/static/assets/{TextToRows-c4fcbf4d.js → TextToRows-ea73433d.js} +11 -10
  107. flowfile/web/static/assets/{ToggleSwitch-4ef91d19.js → ToggleSwitch-9d7b30f1.js} +2 -2
  108. flowfile/web/static/assets/{ToggleSwitch.vue_vue_type_script_setup_true_lang-38478c20.js → ToggleSwitch.vue_vue_type_script_setup_true_lang-00f2580e.js} +1 -1
  109. flowfile/web/static/assets/{UnavailableFields-5edd5322.css → UnavailableFields-394a1f78.css} +14 -14
  110. flowfile/web/static/assets/{UnavailableFields-a03f512c.js → UnavailableFields-b72a2c72.js} +4 -4
  111. flowfile/web/static/assets/{Union-bfe9b996.js → Union-1e44f263.js} +8 -6
  112. flowfile/web/static/assets/{Union-af6c3d9b.css → Union-d6a8d7d5.css} +7 -7
  113. flowfile/web/static/assets/Unique-2b705521.css +3 -0
  114. flowfile/web/static/assets/{Unique-5d023a27.js → Unique-a3bc6d0a.js} +13 -10
  115. flowfile/web/static/assets/{Unpivot-1e422df3.css → Unpivot-b6ad6427.css} +7 -7
  116. flowfile/web/static/assets/{Unpivot-91cc5354.js → Unpivot-e27935fc.js} +11 -9
  117. flowfile/web/static/assets/{UnpivotValidation-7ee2de44.js → UnpivotValidation-72497680.js} +3 -3
  118. flowfile/web/static/assets/UnpivotValidation-d5ca3b7b.css +13 -0
  119. flowfile/web/static/assets/{VueGraphicWalker-ed5ab88b.css → VueGraphicWalker-430f0b86.css} +1 -1
  120. flowfile/web/static/assets/{VueGraphicWalker-e51b9924.js → VueGraphicWalker-d9ab70a3.js} +4 -4
  121. flowfile/web/static/assets/{api-cf1221f0.js → api-a2102880.js} +1 -1
  122. flowfile/web/static/assets/{api-c1bad5ca.js → api-f75042b0.js} +1 -1
  123. flowfile/web/static/assets/{dropDown-35135ba8.css → dropDown-1d6acbd9.css} +41 -41
  124. flowfile/web/static/assets/{dropDown-614b998d.js → dropDown-2798a109.js} +3 -3
  125. flowfile/web/static/assets/{fullEditor-f7971590.js → fullEditor-cf7d7d93.js} +11 -10
  126. flowfile/web/static/assets/{fullEditor-178376bb.css → fullEditor-fe9f7e18.css} +77 -65
  127. flowfile/web/static/assets/{genericNodeSettings-4fe5f36b.js → genericNodeSettings-14eac1c3.js} +5 -5
  128. flowfile/web/static/assets/{genericNodeSettings-924759c7.css → genericNodeSettings-3b2507ea.css} +10 -10
  129. flowfile/web/static/assets/{index-5429bbf8.js → index-387a6f18.js} +41806 -40958
  130. flowfile/web/static/assets/index-6b367bb5.js +38 -0
  131. flowfile/web/static/assets/{index-50508d4d.css → index-e96ab018.css} +2184 -569
  132. flowfile/web/static/assets/index-f0a6e5a5.js +2696 -0
  133. flowfile/web/static/assets/node.types-2c15bb7e.js +82 -0
  134. flowfile/web/static/assets/nodeInput-ed2ae8d7.js +2 -0
  135. flowfile/web/static/assets/{outputCsv-076b85ab.js → outputCsv-3c1757e8.js} +3 -3
  136. flowfile/web/static/assets/outputCsv-b9a072af.css +2499 -0
  137. flowfile/web/static/assets/{outputExcel-0fd17dbe.js → outputExcel-686e1f48.js} +3 -3
  138. flowfile/web/static/assets/{outputExcel-b41305c0.css → outputExcel-f5d272b2.css} +26 -26
  139. flowfile/web/static/assets/outputParquet-54597c3c.css +4 -0
  140. flowfile/web/static/assets/{outputParquet-b61e0847.js → outputParquet-df28faa7.js} +4 -4
  141. flowfile/web/static/assets/{readCsv-c767cb37.css → readCsv-3bfac4c3.css} +15 -15
  142. flowfile/web/static/assets/{readCsv-a8bb8b61.js → readCsv-e37eee21.js} +3 -3
  143. flowfile/web/static/assets/{readExcel-806d2826.css → readExcel-3db6b763.css} +13 -13
  144. flowfile/web/static/assets/{readExcel-67b4aee0.js → readExcel-a13f14bb.js} +5 -5
  145. flowfile/web/static/assets/{readParquet-92ce1dbc.js → readParquet-344cf746.js} +3 -3
  146. flowfile/web/static/assets/{readParquet-48c81530.css → readParquet-c5244ad5.css} +4 -4
  147. flowfile/web/static/assets/secrets.api-ae198c5c.js +65 -0
  148. flowfile/web/static/assets/{selectDynamic-92e25ee3.js → selectDynamic-6b4b0767.js} +5 -5
  149. flowfile/web/static/assets/{selectDynamic-aa913ff4.css → selectDynamic-f2fb394f.css} +21 -20
  150. flowfile/web/static/assets/{vue-codemirror.esm-41b0e0d7.js → vue-codemirror.esm-31ba0e0b.js} +31 -640
  151. flowfile/web/static/assets/{vue-content-loader.es-2c8e608f.js → vue-content-loader.es-4469c8ff.js} +1 -1
  152. flowfile/web/static/index.html +2 -2
  153. {flowfile-0.5.1.dist-info → flowfile-0.5.4.dist-info}/METADATA +3 -4
  154. flowfile-0.5.4.dist-info/RECORD +407 -0
  155. flowfile_core/__init__.py +13 -6
  156. flowfile_core/auth/jwt.py +51 -16
  157. flowfile_core/auth/models.py +32 -7
  158. flowfile_core/auth/password.py +89 -0
  159. flowfile_core/auth/secrets.py +64 -19
  160. flowfile_core/configs/__init__.py +9 -7
  161. flowfile_core/configs/flow_logger.py +15 -14
  162. flowfile_core/configs/node_store/__init__.py +72 -4
  163. flowfile_core/configs/node_store/nodes.py +155 -172
  164. flowfile_core/configs/node_store/user_defined_node_registry.py +108 -27
  165. flowfile_core/configs/settings.py +28 -15
  166. flowfile_core/database/connection.py +7 -6
  167. flowfile_core/database/init_db.py +96 -2
  168. flowfile_core/database/models.py +3 -1
  169. flowfile_core/fileExplorer/__init__.py +17 -0
  170. flowfile_core/fileExplorer/funcs.py +145 -57
  171. flowfile_core/fileExplorer/utils.py +10 -11
  172. flowfile_core/flowfile/_extensions/real_time_interface.py +10 -8
  173. flowfile_core/flowfile/analytics/analytics_processor.py +26 -24
  174. flowfile_core/flowfile/analytics/graphic_walker.py +11 -12
  175. flowfile_core/flowfile/analytics/utils.py +1 -1
  176. flowfile_core/flowfile/code_generator/__init__.py +11 -0
  177. flowfile_core/flowfile/code_generator/code_generator.py +706 -247
  178. flowfile_core/flowfile/connection_manager/_connection_manager.py +6 -5
  179. flowfile_core/flowfile/connection_manager/models.py +1 -1
  180. flowfile_core/flowfile/database_connection_manager/db_connections.py +60 -44
  181. flowfile_core/flowfile/database_connection_manager/models.py +1 -1
  182. flowfile_core/flowfile/extensions.py +17 -12
  183. flowfile_core/flowfile/flow_data_engine/cloud_storage_reader.py +34 -32
  184. flowfile_core/flowfile/flow_data_engine/create/funcs.py +115 -83
  185. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +493 -423
  186. flowfile_core/flowfile/flow_data_engine/flow_file_column/interface.py +2 -2
  187. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +92 -52
  188. flowfile_core/flowfile/flow_data_engine/flow_file_column/polars_type.py +12 -11
  189. flowfile_core/flowfile/flow_data_engine/flow_file_column/type_registry.py +6 -6
  190. flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +26 -30
  191. flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +31 -20
  192. flowfile_core/flowfile/flow_data_engine/join/__init__.py +1 -1
  193. flowfile_core/flowfile/flow_data_engine/join/utils.py +11 -9
  194. flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +14 -15
  195. flowfile_core/flowfile/flow_data_engine/pivot_table.py +5 -7
  196. flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +95 -82
  197. flowfile_core/flowfile/flow_data_engine/read_excel_tables.py +66 -65
  198. flowfile_core/flowfile/flow_data_engine/sample_data.py +27 -21
  199. flowfile_core/flowfile/flow_data_engine/subprocess_operations/__init__.py +1 -1
  200. flowfile_core/flowfile/flow_data_engine/subprocess_operations/models.py +13 -11
  201. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +190 -127
  202. flowfile_core/flowfile/flow_data_engine/threaded_processes.py +8 -8
  203. flowfile_core/flowfile/flow_data_engine/utils.py +99 -67
  204. flowfile_core/flowfile/flow_graph.py +920 -571
  205. flowfile_core/flowfile/flow_graph_utils.py +31 -49
  206. flowfile_core/flowfile/flow_node/flow_node.py +379 -258
  207. flowfile_core/flowfile/flow_node/models.py +53 -41
  208. flowfile_core/flowfile/flow_node/schema_callback.py +14 -19
  209. flowfile_core/flowfile/graph_tree/graph_tree.py +41 -41
  210. flowfile_core/flowfile/handler.py +80 -30
  211. flowfile_core/flowfile/manage/compatibility_enhancements.py +209 -126
  212. flowfile_core/flowfile/manage/io_flowfile.py +54 -57
  213. flowfile_core/flowfile/node_designer/__init__.py +19 -13
  214. flowfile_core/flowfile/node_designer/_type_registry.py +34 -37
  215. flowfile_core/flowfile/node_designer/custom_node.py +162 -36
  216. flowfile_core/flowfile/node_designer/ui_components.py +278 -34
  217. flowfile_core/flowfile/schema_callbacks.py +71 -51
  218. flowfile_core/flowfile/setting_generator/__init__.py +0 -1
  219. flowfile_core/flowfile/setting_generator/setting_generator.py +6 -5
  220. flowfile_core/flowfile/setting_generator/settings.py +64 -53
  221. flowfile_core/flowfile/sources/external_sources/base_class.py +12 -10
  222. flowfile_core/flowfile/sources/external_sources/custom_external_sources/external_source.py +27 -17
  223. flowfile_core/flowfile/sources/external_sources/custom_external_sources/sample_users.py +9 -9
  224. flowfile_core/flowfile/sources/external_sources/factory.py +0 -1
  225. flowfile_core/flowfile/sources/external_sources/sql_source/models.py +45 -31
  226. flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +198 -73
  227. flowfile_core/flowfile/sources/external_sources/sql_source/utils.py +250 -196
  228. flowfile_core/flowfile/util/calculate_layout.py +9 -13
  229. flowfile_core/flowfile/util/execution_orderer.py +25 -17
  230. flowfile_core/flowfile/util/node_skipper.py +4 -4
  231. flowfile_core/flowfile/utils.py +19 -21
  232. flowfile_core/main.py +26 -19
  233. flowfile_core/routes/auth.py +284 -11
  234. flowfile_core/routes/cloud_connections.py +25 -25
  235. flowfile_core/routes/logs.py +21 -29
  236. flowfile_core/routes/public.py +46 -4
  237. flowfile_core/routes/routes.py +70 -34
  238. flowfile_core/routes/secrets.py +25 -27
  239. flowfile_core/routes/user_defined_components.py +483 -4
  240. flowfile_core/run_lock.py +0 -1
  241. flowfile_core/schemas/__init__.py +4 -6
  242. flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py +55 -55
  243. flowfile_core/schemas/cloud_storage_schemas.py +96 -66
  244. flowfile_core/schemas/input_schema.py +231 -144
  245. flowfile_core/schemas/output_model.py +49 -34
  246. flowfile_core/schemas/schemas.py +116 -89
  247. flowfile_core/schemas/transform_schema.py +518 -263
  248. flowfile_core/schemas/yaml_types.py +21 -7
  249. flowfile_core/secret_manager/secret_manager.py +123 -18
  250. flowfile_core/types.py +29 -9
  251. flowfile_core/utils/arrow_reader.py +7 -6
  252. flowfile_core/utils/excel_file_manager.py +3 -3
  253. flowfile_core/utils/fileManager.py +7 -7
  254. flowfile_core/utils/fl_executor.py +8 -10
  255. flowfile_core/utils/utils.py +4 -4
  256. flowfile_core/utils/validate_setup.py +5 -4
  257. flowfile_frame/__init__.py +117 -51
  258. flowfile_frame/adapters.py +2 -9
  259. flowfile_frame/adding_expr.py +73 -32
  260. flowfile_frame/cloud_storage/frame_helpers.py +27 -23
  261. flowfile_frame/cloud_storage/secret_manager.py +12 -26
  262. flowfile_frame/config.py +2 -5
  263. flowfile_frame/database/__init__.py +36 -0
  264. flowfile_frame/database/connection_manager.py +205 -0
  265. flowfile_frame/database/frame_helpers.py +249 -0
  266. flowfile_frame/expr.py +311 -218
  267. flowfile_frame/expr.pyi +160 -159
  268. flowfile_frame/expr_name.py +23 -23
  269. flowfile_frame/flow_frame.py +571 -476
  270. flowfile_frame/flow_frame.pyi +123 -104
  271. flowfile_frame/flow_frame_methods.py +227 -246
  272. flowfile_frame/group_frame.py +50 -20
  273. flowfile_frame/join.py +2 -2
  274. flowfile_frame/lazy.py +129 -87
  275. flowfile_frame/lazy_methods.py +83 -30
  276. flowfile_frame/list_name_space.py +55 -50
  277. flowfile_frame/selectors.py +148 -68
  278. flowfile_frame/series.py +9 -7
  279. flowfile_frame/utils.py +19 -21
  280. flowfile_worker/__init__.py +12 -7
  281. flowfile_worker/configs.py +41 -33
  282. flowfile_worker/create/__init__.py +14 -9
  283. flowfile_worker/create/funcs.py +114 -77
  284. flowfile_worker/create/models.py +46 -43
  285. flowfile_worker/create/pl_types.py +14 -15
  286. flowfile_worker/create/read_excel_tables.py +34 -41
  287. flowfile_worker/create/utils.py +22 -19
  288. flowfile_worker/external_sources/s3_source/main.py +18 -51
  289. flowfile_worker/external_sources/s3_source/models.py +34 -27
  290. flowfile_worker/external_sources/sql_source/main.py +8 -5
  291. flowfile_worker/external_sources/sql_source/models.py +13 -9
  292. flowfile_worker/flow_logger.py +10 -8
  293. flowfile_worker/funcs.py +214 -155
  294. flowfile_worker/main.py +11 -17
  295. flowfile_worker/models.py +35 -28
  296. flowfile_worker/process_manager.py +2 -3
  297. flowfile_worker/routes.py +121 -90
  298. flowfile_worker/secrets.py +114 -21
  299. flowfile_worker/spawner.py +89 -54
  300. flowfile_worker/utils.py +3 -2
  301. shared/__init__.py +2 -7
  302. shared/storage_config.py +25 -13
  303. test_utils/postgres/commands.py +3 -2
  304. test_utils/postgres/fixtures.py +9 -9
  305. test_utils/s3/commands.py +1 -1
  306. test_utils/s3/data_generator.py +3 -4
  307. test_utils/s3/demo_data_generator.py +4 -7
  308. test_utils/s3/fixtures.py +7 -5
  309. tools/migrate/__init__.py +1 -1
  310. tools/migrate/__main__.py +16 -29
  311. tools/migrate/legacy_schemas.py +251 -190
  312. tools/migrate/migrate.py +193 -181
  313. tools/migrate/tests/conftest.py +1 -3
  314. tools/migrate/tests/test_migrate.py +36 -41
  315. tools/migrate/tests/test_migration_e2e.py +28 -29
  316. tools/migrate/tests/test_node_migrations.py +50 -20
  317. flowfile/web/static/assets/CloudConnectionManager-2dfdce2f.css +0 -86
  318. flowfile/web/static/assets/ContextMenu-23e909da.js +0 -41
  319. flowfile/web/static/assets/ContextMenu-4c74eef1.css +0 -26
  320. flowfile/web/static/assets/ContextMenu-63cfa99b.css +0 -26
  321. flowfile/web/static/assets/ContextMenu-70ae0c79.js +0 -41
  322. flowfile/web/static/assets/ContextMenu-c13f91d0.css +0 -26
  323. flowfile/web/static/assets/ContextMenu-f149cf7c.js +0 -41
  324. flowfile/web/static/assets/CustomNode-74a37f74.css +0 -32
  325. flowfile/web/static/assets/DatabaseManager-30fa27e5.css +0 -64
  326. flowfile/web/static/assets/Filter-9b6d08db.js +0 -164
  327. flowfile/web/static/assets/Filter-f62091b3.css +0 -20
  328. flowfile/web/static/assets/GroupBy-b9505323.css +0 -51
  329. flowfile/web/static/assets/ManualInput-3246a08d.css +0 -96
  330. flowfile/web/static/assets/Output-283fe388.css +0 -37
  331. flowfile/web/static/assets/PivotValidation-891ddfb0.css +0 -13
  332. flowfile/web/static/assets/PivotValidation-c46cd420.css +0 -13
  333. flowfile/web/static/assets/SQLQueryComponent-36cef432.css +0 -27
  334. flowfile/web/static/assets/SliderInput-b8fb6a8c.css +0 -4
  335. flowfile/web/static/assets/Sort-3643d625.css +0 -51
  336. flowfile/web/static/assets/Unique-f9fb0809.css +0 -51
  337. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +0 -13
  338. flowfile/web/static/assets/nodeInput-5d0d6b79.js +0 -41
  339. flowfile/web/static/assets/outputCsv-9cc59e0b.css +0 -2499
  340. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +0 -4
  341. flowfile/web/static/assets/secretApi-68435402.js +0 -46
  342. flowfile/web/static/assets/vue-codemirror-bccfde04.css +0 -32
  343. flowfile-0.5.1.dist-info/RECORD +0 -388
  344. {flowfile-0.5.1.dist-info → flowfile-0.5.4.dist-info}/WHEEL +0 -0
  345. {flowfile-0.5.1.dist-info → flowfile-0.5.4.dist-info}/entry_points.txt +0 -0
  346. {flowfile-0.5.1.dist-info → flowfile-0.5.4.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,939 @@
1
+ import { z as defineStore, k as axios, a4 as shallowRef, r as ref, d as defineComponent, an as useCssVars, F as onMounted, o as openBlock, c as createElementBlock, a as createBaseVNode, T as renderSlot, y as createBlock, t as toDisplayString, e as createCommentVNode, a0 as normalizeStyle, n as normalizeClass, ag as Teleport, Z as nextTick, g as _export_sfc } from "./index-387a6f18.js";
2
+ const FLOW_ID_STORAGE_KEY = "last_flow_id";
3
+ const useFlowStore = defineStore("flow", {
4
+ state: () => {
5
+ const savedFlowId = sessionStorage.getItem(FLOW_ID_STORAGE_KEY);
6
+ const initialFlowId = savedFlowId ? parseInt(savedFlowId) : -1;
7
+ return {
8
+ flowId: initialFlowId,
9
+ vueFlowInstance: null
10
+ };
11
+ },
12
+ getters: {
13
+ currentFlowId: (state) => state.flowId
14
+ },
15
+ actions: {
16
+ setFlowId(flowId) {
17
+ this.flowId = flowId;
18
+ try {
19
+ sessionStorage.setItem(FLOW_ID_STORAGE_KEY, flowId.toString());
20
+ } catch (error) {
21
+ console.warn("Failed to store flow ID in session storage:", error);
22
+ }
23
+ },
24
+ setVueFlowInstance(vueFlowInstance) {
25
+ this.vueFlowInstance = vueFlowInstance;
26
+ },
27
+ getVueFlowInstance() {
28
+ return this.vueFlowInstance;
29
+ }
30
+ }
31
+ });
32
+ class NodeApi {
33
+ /**
34
+ * Get node data for a specific node
35
+ */
36
+ static async getNodeData(flowId, nodeId) {
37
+ const response = await axios.get("/node", {
38
+ params: { flow_id: flowId, node_id: nodeId },
39
+ headers: { accept: "application/json" }
40
+ });
41
+ return response.data;
42
+ }
43
+ /**
44
+ * Get table example/preview data for a node
45
+ */
46
+ static async getTableExample(flowId, nodeId) {
47
+ const response = await axios.get("/node/data", {
48
+ params: { flow_id: flowId, node_id: nodeId },
49
+ headers: { accept: "application/json" }
50
+ });
51
+ return response.data;
52
+ }
53
+ /**
54
+ * Get downstream node IDs for a given node
55
+ */
56
+ static async getDownstreamNodeIds(flowId, nodeId) {
57
+ const response = await axios.get("/node/downstream_node_ids", {
58
+ params: { flow_id: flowId, node_id: nodeId },
59
+ headers: { accept: "application/json" }
60
+ });
61
+ return response.data;
62
+ }
63
+ /**
64
+ * Get node description
65
+ */
66
+ static async getNodeDescription(flowId, nodeId) {
67
+ const response = await axios.get("/node/description", {
68
+ params: { node_id: nodeId, flow_id: flowId }
69
+ });
70
+ return response.data;
71
+ }
72
+ /**
73
+ * Set/update node description
74
+ */
75
+ static async setNodeDescription(flowId, nodeId, description) {
76
+ const response = await axios.post("/node/description/", JSON.stringify(description), {
77
+ params: { flow_id: flowId, node_id: nodeId },
78
+ headers: { "Content-Type": "application/json" }
79
+ });
80
+ return response.data;
81
+ }
82
+ /**
83
+ * Update node settings directly
84
+ */
85
+ static async updateSettingsDirectly(nodeType, inputData) {
86
+ const response = await axios.post("/update_settings/", inputData, {
87
+ params: { node_type: nodeType }
88
+ });
89
+ return response.data;
90
+ }
91
+ /**
92
+ * Update user-defined node settings
93
+ */
94
+ static async updateUserDefinedSettings(nodeType, inputData) {
95
+ const response = await axios.post(
96
+ "/user_defined_components/update_user_defined_node/",
97
+ inputData,
98
+ {
99
+ params: { node_type: nodeType }
100
+ }
101
+ );
102
+ return response.data;
103
+ }
104
+ }
105
+ class ExpressionsApi {
106
+ /**
107
+ * Fetch all available expressions overview/documentation
108
+ */
109
+ static async getExpressionsOverview() {
110
+ const response = await axios.get("/editor/expression_doc");
111
+ return response.data;
112
+ }
113
+ }
114
+ const useResultsStore = defineStore("results", {
115
+ state: () => ({
116
+ runResults: {},
117
+ runNodeResults: {},
118
+ runNodeValidations: {},
119
+ currentRunResult: null,
120
+ resultVersion: 0
121
+ }),
122
+ getters: {
123
+ getCurrentRunResult: (state) => state.currentRunResult
124
+ },
125
+ actions: {
126
+ // ========== Result Cache Management ==========
127
+ initializeResultCache(flowId) {
128
+ if (!this.runNodeResults[flowId]) {
129
+ this.runNodeResults[flowId] = {};
130
+ }
131
+ },
132
+ setNodeResult(flowId, nodeId, result) {
133
+ this.initializeResultCache(flowId);
134
+ this.runNodeResults[flowId][nodeId] = result;
135
+ },
136
+ getNodeResult(flowId, nodeId) {
137
+ var _a;
138
+ return (_a = this.runNodeResults[flowId]) == null ? void 0 : _a[nodeId];
139
+ },
140
+ resetNodeResult() {
141
+ console.log("Clearing node results");
142
+ this.runNodeResults = {};
143
+ },
144
+ clearFlowResults(flowId) {
145
+ if (this.runNodeResults[flowId]) {
146
+ delete this.runNodeResults[flowId];
147
+ }
148
+ },
149
+ // ========== Validation Cache Management ==========
150
+ initializeValidationCache(flowId) {
151
+ if (!this.runNodeValidations[flowId]) {
152
+ this.runNodeValidations[flowId] = {};
153
+ }
154
+ },
155
+ setNodeValidation(flowId, nodeId, nodeValidationInput) {
156
+ if (typeof nodeId === "string") {
157
+ nodeId = parseInt(nodeId);
158
+ }
159
+ this.initializeValidationCache(flowId);
160
+ const nodeValidation = {
161
+ ...nodeValidationInput,
162
+ validationTime: Date.now() / 1e3
163
+ };
164
+ this.runNodeValidations[flowId][nodeId] = nodeValidation;
165
+ },
166
+ resetNodeValidation() {
167
+ this.runNodeValidations = {};
168
+ },
169
+ getNodeValidation(flowId, nodeId) {
170
+ var _a;
171
+ return ((_a = this.runNodeValidations[flowId]) == null ? void 0 : _a[nodeId]) || {
172
+ isValid: true,
173
+ error: "",
174
+ validationTime: 0
175
+ };
176
+ },
177
+ // ========== Run Results Management ==========
178
+ insertRunResult(runResult) {
179
+ this.currentRunResult = runResult;
180
+ this.runResults[runResult.flow_id] = runResult;
181
+ this.initializeResultCache(runResult.flow_id);
182
+ runResult.node_step_result.forEach((nodeResult) => {
183
+ this.runNodeResults[runResult.flow_id][nodeResult.node_id] = nodeResult;
184
+ });
185
+ this.resultVersion++;
186
+ },
187
+ resetRunResults() {
188
+ this.runNodeResults = {};
189
+ this.runResults = {};
190
+ this.currentRunResult = null;
191
+ },
192
+ getRunResult(flowId) {
193
+ return this.runResults[flowId] || null;
194
+ }
195
+ }
196
+ });
197
+ const useEditorStore = defineStore("editor", {
198
+ state: () => ({
199
+ // Drawer state
200
+ isDrawerOpen: false,
201
+ isAnalysisOpen: false,
202
+ activeDrawerComponent: shallowRef(null),
203
+ drawerProps: ref({}),
204
+ drawCloseFunction: null,
205
+ // Editor state
206
+ initialEditorData: "",
207
+ inputCode: "",
208
+ // Log viewer state
209
+ hideLogViewerForThisRun: false,
210
+ isShowingLogViewer: false,
211
+ isStreamingLogs: false,
212
+ displayLogViewer: true,
213
+ // Code generator state
214
+ showCodeGenerator: false,
215
+ // Run state
216
+ isRunning: false,
217
+ showFlowResult: false,
218
+ tableVisible: false
219
+ }),
220
+ getters: {
221
+ drawerOpen() {
222
+ return !!this.activeDrawerComponent;
223
+ }
224
+ },
225
+ actions: {
226
+ // ========== Drawer Management ==========
227
+ async executeDrawCloseFunction() {
228
+ console.log("Executing draw close function");
229
+ if (this.drawCloseFunction) {
230
+ this.drawCloseFunction();
231
+ }
232
+ },
233
+ setCloseFunction(f) {
234
+ this.drawCloseFunction = f;
235
+ },
236
+ openDrawer(component, nodeTitleInfo, props = {}) {
237
+ this.activeDrawerComponent = component;
238
+ this.drawerProps = { ...nodeTitleInfo, ...props };
239
+ this.isDrawerOpen = true;
240
+ },
241
+ closeDrawer() {
242
+ this.activeDrawerComponent = null;
243
+ if (this.drawCloseFunction)
244
+ ;
245
+ },
246
+ toggleDrawer() {
247
+ if (this.isDrawerOpen && this.drawCloseFunction) {
248
+ this.pushNodeData();
249
+ }
250
+ this.isDrawerOpen = !this.isDrawerOpen;
251
+ },
252
+ pushNodeData() {
253
+ if (this.drawCloseFunction && !this.isRunning) {
254
+ this.drawCloseFunction();
255
+ this.drawCloseFunction = null;
256
+ }
257
+ },
258
+ openAnalysisDrawer(closeFunction) {
259
+ console.log("openAnalysisDrawer in editor-store.ts");
260
+ if (this.isAnalysisOpen) {
261
+ this.pushNodeData();
262
+ }
263
+ if (closeFunction) {
264
+ this.drawCloseFunction = closeFunction;
265
+ }
266
+ this.isAnalysisOpen = true;
267
+ },
268
+ closeAnalysisDrawer() {
269
+ this.isAnalysisOpen = false;
270
+ if (this.drawCloseFunction) {
271
+ console.log("closeDrawer in editor-store.ts");
272
+ this.pushNodeData();
273
+ }
274
+ },
275
+ // ========== Code Generator ==========
276
+ toggleCodeGenerator() {
277
+ this.showCodeGenerator = !this.showCodeGenerator;
278
+ },
279
+ setCodeGeneratorVisibility(visible) {
280
+ this.showCodeGenerator = visible;
281
+ },
282
+ // ========== Log Viewer ==========
283
+ showLogViewer() {
284
+ console.log("triggered show log viewer");
285
+ this.isShowingLogViewer = this.displayLogViewer;
286
+ },
287
+ hideLogViewer() {
288
+ this.isShowingLogViewer = false;
289
+ },
290
+ toggleLogViewer() {
291
+ console.log("triggered toggle log viewer");
292
+ this.isShowingLogViewer = !this.isShowingLogViewer;
293
+ },
294
+ updateLogViewerVisibility(showResult) {
295
+ this.isShowingLogViewer = this.displayLogViewer && showResult && !this.hideLogViewerForThisRun;
296
+ },
297
+ // ========== Editor Data ==========
298
+ setInitialEditorData(editorDataString) {
299
+ this.initialEditorData = editorDataString;
300
+ },
301
+ getInitialEditorData() {
302
+ return this.initialEditorData;
303
+ },
304
+ setInputCode(newCode) {
305
+ this.inputCode = newCode;
306
+ },
307
+ // ========== Flow Result Display ==========
308
+ setShowFlowResult(show) {
309
+ this.showFlowResult = show;
310
+ },
311
+ setTableVisible(visible) {
312
+ this.tableVisible = visible;
313
+ },
314
+ setIsRunning(running) {
315
+ this.isRunning = running;
316
+ }
317
+ }
318
+ });
319
+ const useNodeStore = defineStore("node", {
320
+ state: () => ({
321
+ nodeId: -1,
322
+ previousNodeId: -1,
323
+ nodeValidateFuncs: /* @__PURE__ */ new Map(),
324
+ nodeData: null,
325
+ nodeExists: false,
326
+ isLoaded: false,
327
+ sizeDataPreview: 300,
328
+ dataTypes: ["String", "Datetime", "Int64", "Int32", "Int16", "Float64", "Float32", "Boolean"],
329
+ nodeDescriptions: {},
330
+ allExpressions: null
331
+ }),
332
+ getters: {
333
+ currentNodeId: (state) => state.nodeId,
334
+ currentNodeData: (state) => state.nodeData,
335
+ // Backward compatibility: read-only getters (use snake_case for legacy)
336
+ /** @deprecated Use `nodeId` (camelCase) instead. This getter is read-only. */
337
+ node_id: (state) => state.nodeId,
338
+ /** @deprecated Use `isLoaded` (camelCase) instead. This getter is read-only. */
339
+ is_loaded: (state) => state.isLoaded,
340
+ // Proxy getters to other stores
341
+ /** @deprecated Use `useFlowStore().flowId` directly. This getter is read-only. */
342
+ flow_id() {
343
+ return useFlowStore().flowId;
344
+ },
345
+ /** @deprecated Use `useFlowStore().vueFlowInstance` directly. This getter is read-only. */
346
+ vueFlowInstance() {
347
+ return useFlowStore().vueFlowInstance;
348
+ },
349
+ /** @deprecated Use `useEditorStore().isRunning` directly. This getter is read-only. */
350
+ isRunning() {
351
+ var _a;
352
+ return ((_a = useEditorStore()) == null ? void 0 : _a.isRunning) || false;
353
+ },
354
+ /** @deprecated Use `useEditorStore().isDrawerOpen` directly. This getter is read-only. */
355
+ isDrawerOpen() {
356
+ var _a;
357
+ return ((_a = useEditorStore()) == null ? void 0 : _a.isDrawerOpen) || false;
358
+ },
359
+ /** @deprecated Use `useEditorStore().activeDrawerComponent` directly. This getter is read-only. */
360
+ activeDrawerComponent() {
361
+ var _a;
362
+ return (_a = useEditorStore()) == null ? void 0 : _a.activeDrawerComponent;
363
+ },
364
+ /** @deprecated Use `useEditorStore().drawerProps` directly. This getter is read-only. */
365
+ drawerProps() {
366
+ var _a;
367
+ return ((_a = useEditorStore()) == null ? void 0 : _a.drawerProps) || {};
368
+ },
369
+ /** @deprecated Use `useEditorStore().showCodeGenerator` directly. This getter is read-only. */
370
+ showCodeGenerator() {
371
+ var _a;
372
+ return ((_a = useEditorStore()) == null ? void 0 : _a.showCodeGenerator) || false;
373
+ },
374
+ /** @deprecated Use `useEditorStore().showFlowResult` directly. This getter is read-only. */
375
+ showFlowResult() {
376
+ var _a;
377
+ return ((_a = useEditorStore()) == null ? void 0 : _a.showFlowResult) || false;
378
+ },
379
+ /** @deprecated Use `useEditorStore().isShowingLogViewer` directly. This getter is read-only. */
380
+ isShowingLogViewer() {
381
+ var _a;
382
+ return ((_a = useEditorStore()) == null ? void 0 : _a.isShowingLogViewer) || false;
383
+ },
384
+ /** @deprecated Use `useEditorStore().hideLogViewerForThisRun` directly. This getter is read-only. */
385
+ hideLogViewerForThisRun() {
386
+ var _a;
387
+ return ((_a = useEditorStore()) == null ? void 0 : _a.hideLogViewerForThisRun) || false;
388
+ },
389
+ /** @deprecated Use `useEditorStore().displayLogViewer` directly. This getter is read-only. */
390
+ displayLogViewer() {
391
+ const editorStore = useEditorStore();
392
+ return (editorStore == null ? void 0 : editorStore.displayLogViewer) !== void 0 ? editorStore.displayLogViewer : true;
393
+ },
394
+ /** @deprecated Use `useEditorStore().inputCode` directly. This getter is read-only. */
395
+ inputCode() {
396
+ var _a;
397
+ return ((_a = useEditorStore()) == null ? void 0 : _a.inputCode) || "";
398
+ },
399
+ /** @deprecated Use `useResultsStore().currentRunResult` directly. This getter is read-only. */
400
+ currentRunResult() {
401
+ var _a;
402
+ return (_a = useResultsStore()) == null ? void 0 : _a.currentRunResult;
403
+ },
404
+ /** @deprecated Use `useResultsStore().runResults` directly. This getter is read-only. */
405
+ runResults() {
406
+ var _a;
407
+ return ((_a = useResultsStore()) == null ? void 0 : _a.runResults) || {};
408
+ }
409
+ },
410
+ actions: {
411
+ // ========== Node Data Management ==========
412
+ async getNodeData(nodeId, useCache = true) {
413
+ const flowStore = useFlowStore();
414
+ if (this.nodeId === nodeId && useCache) {
415
+ if (this.nodeData) {
416
+ this.isLoaded = true;
417
+ return this.nodeData;
418
+ }
419
+ }
420
+ try {
421
+ console.log("Getting node data");
422
+ const data = await NodeApi.getNodeData(flowStore.flowId, nodeId);
423
+ this.nodeData = data;
424
+ this.isLoaded = true;
425
+ this.nodeExists = true;
426
+ return this.nodeData;
427
+ } catch (error) {
428
+ console.error("Error fetching node data:", error);
429
+ this.nodeData = null;
430
+ this.isLoaded = false;
431
+ this.nodeExists = false;
432
+ return null;
433
+ }
434
+ },
435
+ async reloadCurrentNodeData() {
436
+ return this.getNodeData(this.nodeId, false);
437
+ },
438
+ getCurrentNodeData() {
439
+ return this.nodeData;
440
+ },
441
+ async getTableExample(flowId, nodeId) {
442
+ try {
443
+ return await NodeApi.getTableExample(flowId, nodeId);
444
+ } catch (error) {
445
+ console.error("Error fetching table example:", error);
446
+ return null;
447
+ }
448
+ },
449
+ // ========== Node ID Management ==========
450
+ setFlowIdAndNodeId(flowId, nodeId) {
451
+ const flowStore = useFlowStore();
452
+ if (this.nodeId === nodeId && flowStore.flowId === flowId) {
453
+ return;
454
+ }
455
+ console.log("Automatically pushing the node data");
456
+ if (flowStore.flowId !== flowId) {
457
+ flowStore.setFlowId(flowId);
458
+ }
459
+ this.nodeId = nodeId;
460
+ },
461
+ doReset() {
462
+ this.isLoaded = false;
463
+ },
464
+ // ========== Node Validation ==========
465
+ setNodeValidateFunc(nodeId, func) {
466
+ if (typeof nodeId === "string") {
467
+ nodeId = parseInt(nodeId);
468
+ }
469
+ this.nodeValidateFuncs.set(nodeId, func);
470
+ },
471
+ async validateNode(nodeId) {
472
+ if (typeof nodeId === "string") {
473
+ nodeId = parseInt(nodeId);
474
+ }
475
+ const func = this.nodeValidateFuncs.get(nodeId);
476
+ if (func) {
477
+ func();
478
+ }
479
+ },
480
+ // ========== Node Descriptions ==========
481
+ initializeDescriptionCache(flowId) {
482
+ if (!this.nodeDescriptions[flowId]) {
483
+ this.nodeDescriptions[flowId] = {};
484
+ }
485
+ },
486
+ cacheNodeDescriptionDict(flowId, nodeId, description) {
487
+ this.initializeDescriptionCache(flowId);
488
+ this.nodeDescriptions[flowId][nodeId] = description;
489
+ if (this.nodeData && this.nodeData.node_id === nodeId && this.nodeData.setting_input) {
490
+ this.nodeData.setting_input.description = description;
491
+ }
492
+ },
493
+ clearNodeDescriptionCache(flowId, nodeId) {
494
+ if (this.nodeDescriptions[flowId] && this.nodeDescriptions[flowId][nodeId]) {
495
+ delete this.nodeDescriptions[flowId][nodeId];
496
+ }
497
+ },
498
+ clearFlowDescriptionCache(flowId) {
499
+ if (this.nodeDescriptions[flowId]) {
500
+ delete this.nodeDescriptions[flowId];
501
+ }
502
+ },
503
+ clearAllDescriptionCaches() {
504
+ this.nodeDescriptions = {};
505
+ },
506
+ async getNodeDescription(nodeId, forceRefresh = false) {
507
+ var _a, _b;
508
+ const flowStore = useFlowStore();
509
+ this.initializeDescriptionCache(flowStore.flowId);
510
+ if (!forceRefresh && ((_a = this.nodeDescriptions[flowStore.flowId]) == null ? void 0 : _a[nodeId])) {
511
+ return this.nodeDescriptions[flowStore.flowId][nodeId];
512
+ }
513
+ try {
514
+ const description = await NodeApi.getNodeDescription(flowStore.flowId, nodeId);
515
+ this.cacheNodeDescriptionDict(flowStore.flowId, nodeId, description);
516
+ return description;
517
+ } catch (error) {
518
+ console.info("Error fetching node description:", error);
519
+ if ((_b = this.nodeDescriptions[flowStore.flowId]) == null ? void 0 : _b[nodeId]) {
520
+ console.warn("Using cached description due to API error");
521
+ return this.nodeDescriptions[flowStore.flowId][nodeId];
522
+ }
523
+ return "";
524
+ }
525
+ },
526
+ async setNodeDescription(nodeId, description) {
527
+ const flowStore = useFlowStore();
528
+ try {
529
+ this.cacheNodeDescriptionDict(flowStore.flowId, nodeId, description);
530
+ const result = await NodeApi.setNodeDescription(flowStore.flowId, nodeId, description);
531
+ if (result === true) {
532
+ console.log("Description updated successfully");
533
+ } else {
534
+ console.warn("Unexpected response:", result);
535
+ }
536
+ } catch (error) {
537
+ if (error.response) {
538
+ console.error("API error:", error.response.data.message);
539
+ } else if (error.request) {
540
+ console.error("The request was made but no response was received");
541
+ } else {
542
+ console.error("Error", error.message);
543
+ }
544
+ throw error;
545
+ }
546
+ },
547
+ updateNodeDescription(nodeId, description) {
548
+ const flowStore = useFlowStore();
549
+ this.cacheNodeDescriptionDict(flowStore.flowId, nodeId, description);
550
+ },
551
+ // ========== Node Settings Updates ==========
552
+ async updateSettingsDirectly(inputData) {
553
+ var _a, _b;
554
+ const flowStore = useFlowStore();
555
+ try {
556
+ const node = (_a = flowStore.vueFlowInstance) == null ? void 0 : _a.findNode(String(inputData.node_id));
557
+ inputData.pos_x = node.position.x;
558
+ inputData.pos_y = node.position.y;
559
+ const response = await NodeApi.updateSettingsDirectly(
560
+ node.data.nodeTemplate.item,
561
+ inputData
562
+ );
563
+ const downstreamNodeIds = await NodeApi.getDownstreamNodeIds(
564
+ flowStore.flowId,
565
+ inputData.node_id
566
+ );
567
+ downstreamNodeIds.map((nodeId) => {
568
+ this.validateNode(nodeId);
569
+ });
570
+ return response;
571
+ } catch (error) {
572
+ console.error("Error updating settings directly:", (_b = error.response) == null ? void 0 : _b.data);
573
+ throw error;
574
+ }
575
+ },
576
+ async updateUserDefinedSettings(inputData) {
577
+ var _a, _b;
578
+ const flowStore = useFlowStore();
579
+ try {
580
+ const node = (_a = flowStore.vueFlowInstance) == null ? void 0 : _a.findNode(String(inputData.value.node_id));
581
+ const nodeType = node.data.nodeTemplate.item;
582
+ inputData.value.pos_x = node.position.x;
583
+ inputData.value.pos_y = node.position.y;
584
+ const response = await NodeApi.updateUserDefinedSettings(nodeType, inputData.value);
585
+ const downstreamNodeIds = await NodeApi.getDownstreamNodeIds(
586
+ flowStore.flowId,
587
+ inputData.value.node_id
588
+ );
589
+ downstreamNodeIds.map((nodeId) => {
590
+ this.validateNode(nodeId);
591
+ });
592
+ return response;
593
+ } catch (error) {
594
+ console.error("Error updating settings:", (_b = error.response) == null ? void 0 : _b.data);
595
+ throw error;
596
+ }
597
+ },
598
+ async updateSettings(inputData, inputNodeType) {
599
+ var _a, _b;
600
+ const flowStore = useFlowStore();
601
+ try {
602
+ const node = (_a = flowStore.vueFlowInstance) == null ? void 0 : _a.findNode(String(inputData.value.node_id));
603
+ const nodeType = inputNodeType ?? node.data.nodeTemplate.item;
604
+ inputData.value.pos_x = node.position.x;
605
+ inputData.value.pos_y = node.position.y;
606
+ const response = await NodeApi.updateSettingsDirectly(nodeType, inputData.value);
607
+ const downstreamNodeIds = await NodeApi.getDownstreamNodeIds(
608
+ flowStore.flowId,
609
+ inputData.value.node_id
610
+ );
611
+ downstreamNodeIds.map((nodeId) => {
612
+ this.validateNode(nodeId);
613
+ });
614
+ return response;
615
+ } catch (error) {
616
+ console.error("Error updating settings:", (_b = error.response) == null ? void 0 : _b.data);
617
+ throw error;
618
+ }
619
+ },
620
+ // ========== Expressions ==========
621
+ async fetchExpressionsOverview() {
622
+ try {
623
+ const expressions = await ExpressionsApi.getExpressionsOverview();
624
+ this.allExpressions = expressions;
625
+ return this.allExpressions;
626
+ } catch (error) {
627
+ console.error("Error fetching expressions overview:", error);
628
+ return [];
629
+ }
630
+ },
631
+ async getExpressionsOverview() {
632
+ if (this.allExpressions) {
633
+ return this.allExpressions;
634
+ } else {
635
+ return await this.fetchExpressionsOverview();
636
+ }
637
+ },
638
+ // ========== Utilities ==========
639
+ getDataTypes() {
640
+ return this.dataTypes;
641
+ },
642
+ getSizeDataPreview() {
643
+ return this.sizeDataPreview;
644
+ },
645
+ setSizeDataPreview(newHeight) {
646
+ this.sizeDataPreview = newHeight;
647
+ },
648
+ getEditorNodeData() {
649
+ var _a;
650
+ const flowStore = useFlowStore();
651
+ if (this.nodeId) {
652
+ return (_a = flowStore.vueFlowInstance) == null ? void 0 : _a.findNode(String(this.nodeId));
653
+ }
654
+ return null;
655
+ },
656
+ // ========== Backward Compatibility Actions (Proxy to other stores) ==========
657
+ /** @deprecated Use `useFlowStore().setFlowId()` directly instead. */
658
+ setFlowId(flowId) {
659
+ const flowStore = useFlowStore();
660
+ flowStore.setFlowId(flowId);
661
+ },
662
+ /** @deprecated Use `useFlowStore().setVueFlowInstance()` directly instead. */
663
+ setVueFlowInstance(vueFlowInstance) {
664
+ const flowStore = useFlowStore();
665
+ flowStore.setVueFlowInstance(vueFlowInstance);
666
+ },
667
+ /** @deprecated Use `useFlowStore().getVueFlowInstance()` directly instead. */
668
+ getVueFlowInstance() {
669
+ const flowStore = useFlowStore();
670
+ return flowStore.getVueFlowInstance();
671
+ },
672
+ /** @deprecated Use `useResultsStore().setNodeResult()` directly instead. */
673
+ setNodeResult(nodeId, result) {
674
+ const flowStore = useFlowStore();
675
+ const resultsStore = useResultsStore();
676
+ resultsStore.setNodeResult(flowStore.flowId, nodeId, result);
677
+ },
678
+ /** @deprecated Use `useResultsStore().getNodeResult()` directly instead. */
679
+ getNodeResult(nodeId) {
680
+ const flowStore = useFlowStore();
681
+ const resultsStore = useResultsStore();
682
+ return resultsStore.getNodeResult(flowStore.flowId, nodeId);
683
+ },
684
+ /** @deprecated Use `useResultsStore().resetNodeResult()` directly instead. */
685
+ resetNodeResult() {
686
+ const resultsStore = useResultsStore();
687
+ resultsStore.resetNodeResult();
688
+ },
689
+ /** @deprecated Use `useResultsStore().clearFlowResults()` directly instead. */
690
+ clearFlowResults(flowId) {
691
+ const resultsStore = useResultsStore();
692
+ resultsStore.clearFlowResults(flowId);
693
+ },
694
+ /** @deprecated Use `useResultsStore().setNodeValidation()` directly instead. */
695
+ setNodeValidation(nodeId, nodeValidationInput) {
696
+ const flowStore = useFlowStore();
697
+ const resultsStore = useResultsStore();
698
+ resultsStore.setNodeValidation(flowStore.flowId, nodeId, nodeValidationInput);
699
+ },
700
+ /** @deprecated Use `useResultsStore().resetNodeValidation()` directly instead. */
701
+ resetNodeValidation() {
702
+ const resultsStore = useResultsStore();
703
+ resultsStore.resetNodeValidation();
704
+ },
705
+ /** @deprecated Use `useResultsStore().getNodeValidation()` directly instead. */
706
+ getNodeValidation(nodeId) {
707
+ const flowStore = useFlowStore();
708
+ const resultsStore = useResultsStore();
709
+ return resultsStore.getNodeValidation(flowStore.flowId, nodeId);
710
+ },
711
+ /** @deprecated Use `useResultsStore().insertRunResult()` directly instead. */
712
+ insertRunResult(runResult) {
713
+ const resultsStore = useResultsStore();
714
+ resultsStore.insertRunResult(runResult);
715
+ },
716
+ /** @deprecated Use `useResultsStore().resetRunResults()` directly instead. */
717
+ resetRunResults() {
718
+ const resultsStore = useResultsStore();
719
+ resultsStore.resetRunResults();
720
+ },
721
+ /** @deprecated Use `useResultsStore().getRunResult()` directly instead. */
722
+ getRunResult(flowId) {
723
+ const resultsStore = useResultsStore();
724
+ return resultsStore.getRunResult(flowId);
725
+ },
726
+ /** @deprecated Use `useEditorStore().openDrawer()` directly instead. */
727
+ openDrawer(component, nodeTitleInfo, props = {}) {
728
+ const editorStore = useEditorStore();
729
+ editorStore.openDrawer(component, nodeTitleInfo, props);
730
+ },
731
+ /** @deprecated Use `useEditorStore().closeDrawer()` directly instead. */
732
+ closeDrawer() {
733
+ const editorStore = useEditorStore();
734
+ editorStore.closeDrawer();
735
+ this.nodeId = -1;
736
+ },
737
+ /** @deprecated Use `useEditorStore().toggleDrawer()` directly instead. */
738
+ toggleDrawer() {
739
+ const editorStore = useEditorStore();
740
+ editorStore.toggleDrawer();
741
+ },
742
+ /** @deprecated Use `useEditorStore().pushNodeData()` directly instead. */
743
+ pushNodeData() {
744
+ const editorStore = useEditorStore();
745
+ editorStore.pushNodeData();
746
+ },
747
+ /** @deprecated Use `useEditorStore().setCloseFunction()` directly instead. */
748
+ setCloseFunction(f) {
749
+ const editorStore = useEditorStore();
750
+ editorStore.setCloseFunction(f);
751
+ },
752
+ /** @deprecated Use `useEditorStore().executeDrawCloseFunction()` directly instead. */
753
+ executeDrawCloseFunction() {
754
+ const editorStore = useEditorStore();
755
+ return editorStore.executeDrawCloseFunction();
756
+ },
757
+ /** @deprecated Use `useEditorStore().toggleCodeGenerator()` directly instead. */
758
+ toggleCodeGenerator() {
759
+ const editorStore = useEditorStore();
760
+ editorStore.toggleCodeGenerator();
761
+ },
762
+ /** @deprecated Use `useEditorStore().setCodeGeneratorVisibility()` directly instead. */
763
+ setCodeGeneratorVisibility(visible) {
764
+ const editorStore = useEditorStore();
765
+ editorStore.setCodeGeneratorVisibility(visible);
766
+ },
767
+ /** @deprecated Use `useEditorStore().showLogViewer()` directly instead. */
768
+ showLogViewer() {
769
+ const editorStore = useEditorStore();
770
+ editorStore.showLogViewer();
771
+ },
772
+ /** @deprecated Use `useEditorStore().hideLogViewer()` directly instead. */
773
+ hideLogViewer() {
774
+ const editorStore = useEditorStore();
775
+ editorStore.hideLogViewer();
776
+ },
777
+ /** @deprecated Use `useEditorStore().toggleLogViewer()` directly instead. */
778
+ toggleLogViewer() {
779
+ const editorStore = useEditorStore();
780
+ editorStore.toggleLogViewer();
781
+ },
782
+ /** @deprecated Use `useEditorStore().setInputCode()` directly instead. */
783
+ setInputCode(newCode) {
784
+ const editorStore = useEditorStore();
785
+ editorStore.setInputCode(newCode);
786
+ },
787
+ /** @deprecated Use `useEditorStore().setInitialEditorData()` directly instead. */
788
+ setInitialEditorData(editorDataString) {
789
+ const editorStore = useEditorStore();
790
+ editorStore.setInitialEditorData(editorDataString);
791
+ },
792
+ /** @deprecated Use `useEditorStore().getInitialEditorData()` directly instead. */
793
+ getInitialEditorData() {
794
+ const editorStore = useEditorStore();
795
+ return editorStore.getInitialEditorData();
796
+ }
797
+ }
798
+ });
799
+ const _hoisted_1 = { class: "popover-container" };
800
+ const _hoisted_2 = { key: 0 };
801
+ const _hoisted_3 = ["innerHTML"];
802
+ const _sfc_main = /* @__PURE__ */ defineComponent({
803
+ __name: "PopOver",
804
+ props: {
805
+ content: {
806
+ type: String,
807
+ required: true
808
+ },
809
+ title: {
810
+ type: String,
811
+ default: ""
812
+ },
813
+ placement: {
814
+ type: String,
815
+ default: "top"
816
+ },
817
+ minWidth: {
818
+ type: Number,
819
+ default: 100
820
+ },
821
+ zIndex: {
822
+ type: Number,
823
+ default: 9999
824
+ }
825
+ },
826
+ setup(__props) {
827
+ useCssVars((_ctx) => ({
828
+ "355ab648": props.minWidth + "px"
829
+ }));
830
+ const visible = ref(false);
831
+ const referenceEl = ref(null);
832
+ const popoverEl = ref(null);
833
+ const props = __props;
834
+ const popoverStyle = ref({
835
+ top: "0px",
836
+ left: "0px",
837
+ zIndex: props.zIndex.toString()
838
+ });
839
+ const showPopover = () => {
840
+ visible.value = true;
841
+ nextTick(() => {
842
+ updatePosition();
843
+ });
844
+ };
845
+ const hidePopover = () => {
846
+ visible.value = false;
847
+ };
848
+ const updatePosition = () => {
849
+ if (!referenceEl.value || !popoverEl.value)
850
+ return;
851
+ const referenceRect = referenceEl.value.getBoundingClientRect();
852
+ const popoverRect = popoverEl.value.getBoundingClientRect();
853
+ const offset = 20;
854
+ let top = 0;
855
+ let left = 0;
856
+ switch (props.placement) {
857
+ case "top":
858
+ top = referenceRect.top - popoverRect.height - offset;
859
+ left = referenceRect.left + referenceRect.width / 2 - popoverRect.width / 2;
860
+ break;
861
+ case "bottom":
862
+ top = referenceRect.bottom + offset;
863
+ left = referenceRect.left + referenceRect.width / 2 - popoverRect.width / 2;
864
+ break;
865
+ case "left":
866
+ top = referenceRect.top + referenceRect.height / 2 - popoverRect.height / 2;
867
+ left = referenceRect.left - popoverRect.width - offset;
868
+ break;
869
+ case "right":
870
+ top = referenceRect.top + referenceRect.height / 2 - popoverRect.height / 2;
871
+ left = referenceRect.right + offset;
872
+ break;
873
+ }
874
+ const viewportWidth = window.innerWidth;
875
+ const viewportHeight = window.innerHeight;
876
+ if (left < 10)
877
+ left = 10;
878
+ if (left + popoverRect.width > viewportWidth - 10) {
879
+ left = viewportWidth - popoverRect.width - 10;
880
+ }
881
+ if (top < 10)
882
+ top = 10;
883
+ if (top + popoverRect.height > viewportHeight - 10) {
884
+ top = viewportHeight - popoverRect.height - 10;
885
+ }
886
+ popoverStyle.value = {
887
+ top: `${top}px`,
888
+ left: `${left}px`,
889
+ zIndex: props.zIndex.toString()
890
+ };
891
+ };
892
+ onMounted(() => {
893
+ window.addEventListener("resize", () => {
894
+ if (visible.value) {
895
+ updatePosition();
896
+ }
897
+ });
898
+ });
899
+ return (_ctx, _cache) => {
900
+ return openBlock(), createElementBlock("div", _hoisted_1, [
901
+ createBaseVNode("div", {
902
+ ref_key: "referenceEl",
903
+ ref: referenceEl,
904
+ class: "popover-reference",
905
+ onMouseenter: showPopover,
906
+ onMouseleave: hidePopover
907
+ }, [
908
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
909
+ ], 544),
910
+ visible.value ? (openBlock(), createBlock(Teleport, {
911
+ key: 0,
912
+ to: "body"
913
+ }, [
914
+ createBaseVNode("div", {
915
+ ref_key: "popoverEl",
916
+ ref: popoverEl,
917
+ style: normalizeStyle(popoverStyle.value),
918
+ class: normalizeClass(["popover", { "popover--left": props.placement === "left" }])
919
+ }, [
920
+ props.title !== "" ? (openBlock(), createElementBlock("h3", _hoisted_2, toDisplayString(props.title), 1)) : createCommentVNode("", true),
921
+ createBaseVNode("p", {
922
+ class: "content",
923
+ innerHTML: props.content
924
+ }, null, 8, _hoisted_3)
925
+ ], 6)
926
+ ])) : createCommentVNode("", true)
927
+ ]);
928
+ };
929
+ }
930
+ });
931
+ const PopOver_vue_vue_type_style_index_0_scoped_8b5d0b86_lang = "";
932
+ const PopOver = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8b5d0b86"]]);
933
+ export {
934
+ PopOver as P,
935
+ useEditorStore as a,
936
+ useResultsStore as b,
937
+ useFlowStore as c,
938
+ useNodeStore as u
939
+ };