@geode/opengeodeweb-front 10.34.0-rc.2 → 10.34.0-rc.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 (402) hide show
  1. package/README.md +8 -0
  2. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  3. package/app/components/ActionButton.vue +28 -12
  4. package/app/components/Basic/Slider.vue +2 -2
  5. package/app/components/Basic/Switch.vue +2 -2
  6. package/app/components/CameraManager/List.vue +9 -9
  7. package/app/components/CameraManager/Saver.vue +8 -2
  8. package/app/components/CameraManager.vue +20 -10
  9. package/app/components/CameraOrientation.vue +29 -15
  10. package/app/components/ClippingPlaneCard.vue +11 -12
  11. package/app/components/ClippingPlanes.vue +25 -15
  12. package/app/components/CrsSelector.vue +24 -15
  13. package/app/components/DeleteDialog.vue +16 -16
  14. package/app/components/DragAndDrop.vue +53 -33
  15. package/app/components/DragAndDropInternal/DragAndDropInline.vue +29 -16
  16. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  17. package/app/components/ExtensionSelector.vue +32 -16
  18. package/app/components/FeedBack/ErrorBanner.vue +1 -2
  19. package/app/components/FeedBack/Snackers.vue +3 -3
  20. package/app/components/FetchingData.vue +8 -12
  21. package/app/components/FileSelector.vue +20 -12
  22. package/app/components/FileUploader.vue +45 -24
  23. package/app/components/GlassCard.vue +16 -12
  24. package/app/components/HybridRenderingView.vue +22 -11
  25. package/app/components/HybridViewerTooltip.vue +24 -22
  26. package/app/components/InfraConnected.vue +1 -1
  27. package/app/components/Launcher.vue +11 -9
  28. package/app/components/Loading/EcoMessages.vue +16 -11
  29. package/app/components/Loading/Header.vue +6 -7
  30. package/app/components/Loading/Progress.vue +6 -7
  31. package/app/components/Loading.vue +8 -12
  32. package/app/components/MissingFilesSelector.vue +29 -15
  33. package/app/components/ObjectSelector.vue +33 -18
  34. package/app/components/PackagesVersions.vue +14 -7
  35. package/app/components/Recaptcha.vue +16 -22
  36. package/app/components/RemoteRenderingView.vue +16 -9
  37. package/app/components/Ruler.vue +8 -6
  38. package/app/components/Screenshot.vue +19 -13
  39. package/app/components/SearchBar.vue +10 -6
  40. package/app/components/ShrinkFilter.vue +12 -7
  41. package/app/components/Step.vue +30 -11
  42. package/app/components/Stepper.vue +18 -7
  43. package/app/components/ToolPanel.vue +25 -12
  44. package/app/components/ViewToolbar.vue +33 -21
  45. package/app/components/Viewer/ContextMenu/CenterButton.vue +14 -9
  46. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  47. package/app/components/Viewer/ContextMenu/ContextMenu.vue +25 -20
  48. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +21 -9
  49. package/app/components/Viewer/ContextMenu/InfoCard.vue +31 -14
  50. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  51. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +59 -36
  52. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +67 -39
  53. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +61 -38
  54. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +43 -27
  55. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +84 -40
  56. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +67 -38
  57. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +101 -35
  58. package/app/components/Viewer/Generic/Model/CornersOptions.vue +67 -27
  59. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +14 -8
  60. package/app/components/Viewer/Generic/Model/LinesOptions.vue +96 -43
  61. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +24 -12
  62. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +10 -5
  63. package/app/components/Viewer/Generic/Model/PointsOptions.vue +16 -10
  64. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +105 -31
  65. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  66. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  67. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  68. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  69. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  70. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  71. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  72. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +63 -37
  73. package/app/components/Viewer/ObjectTree/Base/Controls.vue +24 -9
  74. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +25 -8
  75. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  76. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +26 -11
  77. package/app/components/Viewer/ObjectTree/Box.vue +30 -15
  78. package/app/components/Viewer/ObjectTree/Layout.vue +29 -22
  79. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +54 -28
  80. package/app/components/Viewer/ObjectTree/Views/ModelCollections.vue +76 -30
  81. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +86 -34
  82. package/app/components/Viewer/Options/AttributeColorBar.vue +12 -6
  83. package/app/components/Viewer/Options/AttributeRangeSelector.vue +6 -4
  84. package/app/components/Viewer/Options/AttributeSelector.vue +61 -28
  85. package/app/components/Viewer/Options/ColorMapList.vue +44 -18
  86. package/app/components/Viewer/Options/ColorMapPicker.vue +12 -8
  87. package/app/components/Viewer/Options/ColorPicker.vue +20 -13
  88. package/app/components/Viewer/Options/ColoringTypeSelector.vue +77 -57
  89. package/app/components/Viewer/Options/ColormapQuickPicker.vue +10 -8
  90. package/app/components/Viewer/Options/OptionsSection.vue +6 -4
  91. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  92. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  93. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  94. package/app/components/Viewer/Options/TextureItem.vue +24 -19
  95. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  96. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  97. package/app/components/Viewer/OverlappingObjectsPicker.vue +28 -12
  98. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +41 -25
  99. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  100. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  101. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  102. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +66 -37
  103. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  104. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  105. package/app/components/Viewer/Surface/PolygonsOptions.vue +72 -38
  106. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  107. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  108. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  109. package/app/components/Viewer/Ui.vue +18 -13
  110. package/app/components/Wrapper.vue +18 -9
  111. package/app/components/ZScaling.vue +15 -9
  112. package/app/components/csv-preview/CsvPreviewer.vue +38 -17
  113. package/app/components/csv-preview/CsvSettings.vue +26 -48
  114. package/app/components/csv-preview/CsvTable.vue +34 -14
  115. package/app/composables/{batch_style.js → batch_style.ts} +4 -1
  116. package/app/composables/{clipping_planes_widget.js → clipping_planes_widget.ts} +105 -42
  117. package/app/composables/{global_attribute_style.js → global_attribute_style.ts} +72 -30
  118. package/app/composables/{hover_highlight.js → hover_highlight.ts} +16 -12
  119. package/app/composables/{model_collections.js → model_collections.ts} +10 -4
  120. package/app/composables/{model_components.js → model_components.ts} +10 -4
  121. package/app/composables/{project_manager.js → project_manager.ts} +1 -1
  122. package/app/composables/{responsive_middle_truncate.js → responsive_middle_truncate.ts} +15 -1
  123. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  124. package/app/composables/{stepper_tree.js → stepper_tree.ts} +10 -10
  125. package/app/composables/{tree_filter.js → tree_filter.ts} +49 -15
  126. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +44 -16
  127. package/app/composables/{tree_scroll.js → tree_scroll.ts} +26 -7
  128. package/app/composables/{use_adaptive_styles.js → use_adaptive_styles.ts} +39 -15
  129. package/app/composables/{use_overlapping_picker.js → use_overlapping_picker.ts} +58 -14
  130. package/app/composables/{use_quick_colormap.js → use_quick_colormap.ts} +15 -3
  131. package/app/composables/{virtual_tree.js → virtual_tree.ts} +69 -21
  132. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +4 -1
  133. package/app/stores/{app.js → app.ts} +98 -37
  134. package/app/stores/{back.js → back.ts} +26 -16
  135. package/app/stores/camera_manager.ts +78 -0
  136. package/app/stores/{cloud.js → cloud.ts} +5 -4
  137. package/app/stores/{data.js → data.ts} +110 -37
  138. package/app/stores/data_helpers/collections.ts +140 -0
  139. package/app/stores/data_helpers/mesh.ts +160 -0
  140. package/app/stores/{data_style.js → data_style.ts} +39 -10
  141. package/app/stores/{feedback.js → feedback.ts} +16 -5
  142. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +29 -14
  143. package/app/stores/{infra.js → infra.ts} +18 -9
  144. package/app/stores/{menu.js → menu.ts} +54 -32
  145. package/app/stores/{treeview.js → treeview.ts} +108 -45
  146. package/app/stores/{viewer.js → viewer.ts} +45 -24
  147. package/app/utils/attributes.ts +40 -0
  148. package/app/utils/{clipping_planes.js → clipping_planes.ts} +30 -15
  149. package/app/utils/{colormap.js → colormap.ts} +29 -14
  150. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  151. package/app/utils/default_styles/{index.js → index.ts} +3 -2
  152. package/app/utils/default_styles/{meshes.js → meshes.ts} +27 -48
  153. package/app/utils/default_styles/{models.js → models.ts} +25 -40
  154. package/app/utils/{extension.js → extension.ts} +27 -10
  155. package/app/utils/{import_workflow.js → import_workflow.ts} +24 -17
  156. package/app/utils/{log.js → log.ts} +12 -2
  157. package/app/utils/{name_cleaner.js → name_cleaner.ts} +5 -5
  158. package/app/utils/status.ts +19 -0
  159. package/app/utils/{stores.js → stores.ts} +5 -5
  160. package/app/utils/{string.js → string.ts} +5 -5
  161. package/app/utils/{treeview.js → treeview.ts} +4 -1
  162. package/internal/database/{base_database.js → base_database.ts} +2 -2
  163. package/internal/database/{database.js → database.ts} +30 -18
  164. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  165. package/internal/database/tables/camera_positions.ts +6 -0
  166. package/internal/database/tables/{data.js → data.ts} +3 -1
  167. package/internal/database/tables/data_style.ts +6 -0
  168. package/internal/database/tables/model_component_datastyle.ts +6 -0
  169. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  170. package/internal/database/tables/model_components.ts +6 -0
  171. package/internal/database/tables/model_components_relation.ts +6 -0
  172. package/internal/database/tables/table_definition.ts +5 -0
  173. package/internal/stores/data_style/mesh/cells/{cell.js → cell.ts} +83 -36
  174. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +2 -2
  175. package/internal/stores/data_style/mesh/cells/{common.js → common.ts} +8 -7
  176. package/internal/stores/data_style/mesh/cells/{index.js → index.ts} +5 -5
  177. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +3 -3
  178. package/internal/stores/data_style/mesh/cells/{vertex.js → vertex.ts} +79 -28
  179. package/internal/stores/data_style/mesh/cells/{visibility.js → visibility.ts} +3 -3
  180. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +2 -2
  181. package/internal/stores/data_style/mesh/edges/{common.js → common.ts} +7 -6
  182. package/internal/stores/data_style/mesh/edges/{edge.js → edge.ts} +81 -29
  183. package/internal/stores/data_style/mesh/edges/{index.js → index.ts} +5 -6
  184. package/internal/stores/data_style/mesh/edges/{vertex.js → vertex.ts} +81 -29
  185. package/internal/stores/data_style/mesh/edges/{visibility.js → visibility.ts} +3 -3
  186. package/internal/stores/data_style/mesh/edges/{width.js → width.ts} +3 -3
  187. package/internal/stores/data_style/mesh/{index.js → index.ts} +9 -8
  188. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +2 -2
  189. package/internal/stores/data_style/mesh/points/{common.js → common.ts} +8 -7
  190. package/internal/stores/data_style/mesh/points/{index.js → index.ts} +5 -5
  191. package/internal/stores/data_style/mesh/points/{size.js → size.ts} +3 -3
  192. package/internal/stores/data_style/mesh/points/{vertex.js → vertex.ts} +79 -28
  193. package/internal/stores/data_style/mesh/points/{visibility.js → visibility.ts} +7 -5
  194. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +2 -2
  195. package/internal/stores/data_style/mesh/polygons/{common.js → common.ts} +7 -6
  196. package/internal/stores/data_style/mesh/polygons/{index.js → index.ts} +5 -5
  197. package/internal/stores/data_style/mesh/polygons/{polygon.js → polygon.ts} +81 -29
  198. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +3 -3
  199. package/internal/stores/data_style/mesh/polygons/{vertex.js → vertex.ts} +81 -29
  200. package/internal/stores/data_style/mesh/polygons/{visibility.js → visibility.ts} +3 -3
  201. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +2 -2
  202. package/internal/stores/data_style/mesh/polyhedra/{common.js → common.ts} +7 -6
  203. package/internal/stores/data_style/mesh/polyhedra/{index.js → index.ts} +5 -5
  204. package/internal/stores/data_style/mesh/polyhedra/{polyhedron.js → polyhedron.ts} +86 -29
  205. package/internal/stores/data_style/mesh/polyhedra/{vertex.js → vertex.ts} +81 -29
  206. package/internal/stores/data_style/mesh/polyhedra/{visibility.js → visibility.ts} +3 -3
  207. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +18 -6
  208. package/internal/stores/data_style/model/blocks/{common.js → common.ts} +9 -8
  209. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +26 -11
  210. package/internal/stores/data_style/model/blocks/{polyhedron.js → polyhedron.ts} +121 -30
  211. package/internal/stores/data_style/model/blocks/{vertex.js → vertex.ts} +110 -30
  212. package/internal/stores/data_style/model/blocks/{visibility.js → visibility.ts} +6 -2
  213. package/internal/stores/data_style/model/{color.js → color.ts} +70 -28
  214. package/internal/stores/data_style/model/common.ts +216 -0
  215. package/internal/stores/data_style/model/corners/{color.js → color.ts} +18 -6
  216. package/internal/stores/data_style/model/corners/{common.js → common.ts} +9 -8
  217. package/internal/stores/data_style/model/corners/{index.js → index.ts} +24 -10
  218. package/internal/stores/data_style/model/corners/{vertex.js → vertex.ts} +115 -35
  219. package/internal/stores/data_style/model/corners/{visibility.js → visibility.ts} +6 -2
  220. package/internal/stores/data_style/model/edges/{common.js → common.ts} +4 -3
  221. package/internal/stores/data_style/model/edges/{index.js → index.ts} +0 -6
  222. package/internal/stores/data_style/model/edges/{visibility.js → visibility.ts} +4 -4
  223. package/internal/stores/data_style/model/{index.js → index.ts} +4 -4
  224. package/internal/stores/data_style/model/lines/{color.js → color.ts} +18 -6
  225. package/internal/stores/data_style/model/lines/{common.js → common.ts} +9 -8
  226. package/internal/stores/data_style/model/lines/{edge.js → edge.ts} +107 -30
  227. package/internal/stores/data_style/model/lines/{index.js → index.ts} +26 -11
  228. package/internal/stores/data_style/model/lines/{vertex.js → vertex.ts} +107 -30
  229. package/internal/stores/data_style/model/lines/{visibility.js → visibility.ts} +6 -2
  230. package/internal/stores/data_style/model/points/{common.js → common.ts} +4 -3
  231. package/internal/stores/data_style/model/points/{index.js → index.ts} +6 -3
  232. package/internal/stores/data_style/model/points/{size.js → size.ts} +3 -3
  233. package/internal/stores/data_style/model/points/{visibility.js → visibility.ts} +3 -3
  234. package/internal/stores/data_style/model/selection.ts +116 -0
  235. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +18 -6
  236. package/internal/stores/data_style/model/surfaces/{common.js → common.ts} +9 -8
  237. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +28 -11
  238. package/internal/stores/data_style/model/surfaces/{polygon.js → polygon.ts} +122 -30
  239. package/internal/stores/data_style/model/surfaces/{vertex.js → vertex.ts} +122 -30
  240. package/internal/stores/data_style/model/surfaces/{visibility.js → visibility.ts} +6 -2
  241. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +38 -20
  242. package/internal/stores/data_style/state.ts +269 -0
  243. package/internal/stores/data_style/types.ts +30 -0
  244. package/internal/stores/hybrid_viewer/{brightness.js → brightness.ts} +35 -11
  245. package/internal/stores/hybrid_viewer/{camera.js → camera.ts} +90 -52
  246. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +27 -10
  247. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  248. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +9 -6
  249. package/internal/stores/hybrid_viewer/{highlight.js → highlight.ts} +81 -29
  250. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +38 -19
  251. package/internal/stores/hybrid_viewer/{scene.js → scene.ts} +39 -29
  252. package/internal/stores/hybrid_viewer/viewport.ts +168 -0
  253. package/internal/stores/hybrid_viewer/vtk_types.ts +74 -0
  254. package/internal/utils/api_fetch.ts +102 -0
  255. package/internal/utils/upload_file.ts +94 -0
  256. package/internal/utils/viewer_call.ts +90 -0
  257. package/internal/utils/ws_client.ts +43 -0
  258. package/{nuxt.config.js → nuxt.config.ts} +6 -1
  259. package/opengeodeweb_front_schemas.js +175 -0
  260. package/package.json +32 -8
  261. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +17 -9
  262. package/server/api/local/app/{project_folder_path.post.js → project_folder_path.post.ts} +7 -3
  263. package/server/api/local/app/{run_back.post.js → run_back.post.ts} +12 -4
  264. package/server/api/local/app/{run_viewer.post.js → run_viewer.post.ts} +12 -4
  265. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +12 -6
  266. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -9
  267. package/server/api/local/extensions/{upload.put.js → upload.put.ts} +13 -4
  268. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +4 -3
  269. package/server/api/microservice/app/{set_app_base_url.post.js → set_app_base_url.post.ts} +9 -4
  270. package/server/api/microservice/app/{set_back_base_url.post.js → set_back_base_url.post.ts} +9 -4
  271. package/server/api/microservice/app/{set_is_app_ready.post.js → set_is_app_ready.post.ts} +9 -4
  272. package/server/api/microservice/app/{set_viewer_base_url.post.js → set_viewer_base_url.post.ts} +9 -4
  273. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +9 -3
  274. package/server/api/serverless/{run_cloud.post.js → run_cloud.post.ts} +13 -7
  275. package/server/types/vendor.d.ts +64 -0
  276. package/server/utils/app_config.js +34 -64
  277. package/server/utils/app_config.ts +96 -0
  278. package/server/utils/cleanup.js +97 -148
  279. package/server/utils/cleanup.ts +189 -0
  280. package/server/utils/cloud.js +103 -148
  281. package/server/utils/cloud.ts +219 -0
  282. package/server/utils/{extension.js → extension.ts} +17 -4
  283. package/server/utils/microservices.js +126 -159
  284. package/server/utils/microservices.ts +206 -0
  285. package/server/utils/path.js +88 -134
  286. package/server/utils/path.ts +173 -0
  287. package/server/utils/scripts.js +116 -164
  288. package/server/utils/scripts.ts +195 -0
  289. package/server/utils/server.js +34 -50
  290. package/server/utils/server.ts +67 -0
  291. package/server/utils/server_config.js +23 -38
  292. package/server/utils/server_config.ts +60 -0
  293. package/server/utils/ws_client.js +81 -106
  294. package/server/utils/ws_client.ts +134 -0
  295. package/shared/app_mode.js +5 -4
  296. package/shared/app_mode.ts +7 -0
  297. package/shared/scripts.js +37 -32
  298. package/shared/scripts.ts +44 -0
  299. package/shared/utils/call_raw.js +25 -41
  300. package/shared/utils/call_raw.ts +66 -0
  301. package/shared/utils/call_schema.js +24 -41
  302. package/shared/utils/call_schema.ts +57 -0
  303. package/shared/utils/fetch_raw.js +36 -57
  304. package/shared/utils/fetch_raw.ts +85 -0
  305. package/shared/utils/fetch_schema.js +27 -44
  306. package/shared/utils/fetch_schema.ts +61 -0
  307. package/shared/utils/file.js +6 -10
  308. package/shared/utils/file.ts +16 -0
  309. package/shared/utils/parse_boolean.js +20 -13
  310. package/shared/utils/parse_boolean.ts +16 -0
  311. package/shared/utils/response_handlers/load.js +39 -66
  312. package/shared/utils/response_handlers/load.ts +94 -0
  313. package/shared/utils/types.js +1 -0
  314. package/shared/utils/types.ts +27 -0
  315. package/shared/utils/validate_schema.js +13 -9
  316. package/shared/utils/validate_schema.ts +15 -0
  317. package/.github/workflows/config.json +0 -5
  318. package/.github/workflows/deploy.yml +0 -15
  319. package/.github/workflows/manual_release.yml +0 -11
  320. package/.github/workflows/merge_request.yml +0 -9
  321. package/.github/workflows/pr_update.yml +0 -11
  322. package/.github/workflows/prepare_deploy.yml +0 -9
  323. package/.github/workflows/schedule.yml +0 -18
  324. package/.github/workflows/test.yml +0 -14
  325. package/.github/workflows/test_pr.yml +0 -12
  326. package/.oxlintrc.json +0 -150
  327. package/.releaserc +0 -11
  328. package/app/stores/camera_manager.js +0 -57
  329. package/app/stores/data_helpers/collections.js +0 -96
  330. package/app/stores/data_helpers/mesh.js +0 -122
  331. package/app/utils/attributes.js +0 -23
  332. package/app/utils/status.js +0 -10
  333. package/commitlint.config.js +0 -20
  334. package/internal/database/tables/camera_positions.js +0 -4
  335. package/internal/database/tables/data_style.js +0 -4
  336. package/internal/database/tables/model_component_datastyle.js +0 -4
  337. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  338. package/internal/database/tables/model_components.js +0 -4
  339. package/internal/database/tables/model_components_relation.js +0 -4
  340. package/internal/stores/data_style/model/common.js +0 -141
  341. package/internal/stores/data_style/model/selection.js +0 -89
  342. package/internal/stores/data_style/state.js +0 -197
  343. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  344. package/internal/utils/api_fetch.js +0 -52
  345. package/internal/utils/upload_file.js +0 -57
  346. package/internal/utils/viewer_call.js +0 -49
  347. package/internal/utils/ws_client.js +0 -29
  348. package/scripts/generate_geode_objects.js +0 -24
  349. package/tests/integration/data/uploads/test.og_brep +0 -0
  350. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  351. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  352. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  353. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  354. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  355. package/tests/integration/data/uploads/test.vtu +0 -22
  356. package/tests/integration/setup.js +0 -92
  357. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  358. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  359. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  360. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  361. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  362. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  363. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  364. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  365. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  366. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  367. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  368. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  369. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  370. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  371. package/tests/setup_indexeddb.js +0 -4
  372. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  373. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  374. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  375. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  376. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  377. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  378. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  379. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  380. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  381. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  382. package/tests/unit/components/Step.nuxt.test.js +0 -51
  383. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  384. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  385. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  386. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  387. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  388. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  389. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  390. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  391. package/tests/unit/stores/app.nuxt.test.js +0 -189
  392. package/tests/unit/stores/back.nuxt.test.js +0 -147
  393. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  394. package/tests/unit/stores/data.nuxt.test.js +0 -162
  395. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  396. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  397. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  398. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  399. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  400. package/tests/utils.js +0 -20
  401. package/tests/vitest.config.js +0 -67
  402. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
@@ -1,174 +1,141 @@
1
- // Node imports
2
- import child_process from "node:child_process";
3
- import fs from "node:fs";
4
- import path from "node:path";
5
-
6
- // Third party imports
7
- import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json" with { type: "json" };
8
-
9
- // Local imports
1
+ import { microservicesMetadatasPath, projectMicroservices } from "./cleanup.js";
10
2
  import { addNginxLocation, addSupervisorProgram } from "./cloud.js";
11
3
  import { getAvailablePort, waitForReady } from "./scripts.js";
12
- import { microservicesMetadatasPath, projectMicroservices } from "./cleanup.js";
13
4
  import { executablePath } from "./path.js";
14
-
15
- const MILLISECONDS_PER_SECOND = 1000;
5
+ import path from "node:path";
6
+ import fs from "node:fs";
7
+ import child_process from "node:child_process";
8
+ import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json" with { type: "json" };
9
+ //#region server/utils/microservices.ts
10
+ const MILLISECONDS_PER_SECOND = 1e3;
16
11
  const DEFAULT_TIMEOUT_SECONDS = 45;
17
12
  const MAX_PORT_RETRIES = 1;
18
- async function runScript(
19
- execPath,
20
- execName,
21
- args,
22
- expectedResponse,
23
- timeoutSeconds = DEFAULT_TIMEOUT_SECONDS,
24
- ) {
25
- const command = executablePath(execPath, execName);
26
- console.log("runScript", command, args);
27
- const child = child_process.spawn(command, args, {
28
- stdio: ["ignore", "pipe", "pipe"],
29
- });
30
- child.name = command.replace(/^.*[\\/]/u, "");
31
- child.on("spawn", () => {
32
- console.log(`[${child.name}] spawned, pid=${child.pid}`);
33
- });
34
- const controller = new AbortController();
35
- const timer = setTimeout(() => controller.abort(), timeoutSeconds * MILLISECONDS_PER_SECOND);
36
- if (typeof timer.unref === "function") {
37
- timer.unref();
38
- }
39
- try {
40
- const result = await waitForReady(child, expectedResponse, controller.signal);
41
- clearTimeout(timer);
42
- return result;
43
- } catch (error) {
44
- clearTimeout(timer);
45
- child.kill();
46
- throw error;
47
- }
13
+ const DEFAULT_RUN_ARGS = { projectFolderPath: "" };
14
+ async function runScript(execPath, execName, args, expectedResponse, timeoutSeconds = DEFAULT_TIMEOUT_SECONDS) {
15
+ const command = executablePath(execPath, execName);
16
+ console.log("runScript", command, args);
17
+ const child = child_process.spawn(command, args, { stdio: [
18
+ "ignore",
19
+ "pipe",
20
+ "pipe"
21
+ ] });
22
+ child.name = command.replace(/^.*[\\/]/u, "");
23
+ child.on("spawn", () => {
24
+ console.log(`[${child.name}] spawned, pid=${child.pid}`);
25
+ });
26
+ const controller = new AbortController();
27
+ const timer = setTimeout(() => controller.abort(), timeoutSeconds * MILLISECONDS_PER_SECOND);
28
+ if (typeof timer.unref === "function") timer.unref();
29
+ try {
30
+ const result = await waitForReady(child, expectedResponse, controller.signal);
31
+ clearTimeout(timer);
32
+ return result;
33
+ } catch (error) {
34
+ clearTimeout(timer);
35
+ child.kill();
36
+ throw error;
37
+ }
48
38
  }
49
- function isPortInUseError(errorMessage) {
50
- return /EADDRINUSE|address already in use|port already in use/iu.test(errorMessage);
39
+ function isPortInUseError(error) {
40
+ return /EADDRINUSE|address already in use|port already in use/iu.test(String(error));
51
41
  }
52
-
53
42
  function backArgs(args, port) {
54
- const { projectFolderPath } = args;
55
- if (!projectFolderPath) {
56
- throw new Error("projectFolderPath is required");
57
- }
58
- const uploadFolderPath = args.uploadFolderPath || path.join(projectFolderPath, "uploads");
59
- const executableArgs = [
60
- "--port",
61
- String(port),
62
- "--project_folder_path",
63
- projectFolderPath,
64
- "--upload_folder_path",
65
- uploadFolderPath,
66
- "--allowed_origins",
67
- "http://localhost:*",
68
- "--timeout",
69
- "0",
70
- ];
71
- if (process.env.NODE_ENV === "development" || !process.env.NODE_ENV) {
72
- executableArgs.push("--debug");
73
- }
74
- return executableArgs;
43
+ const { projectFolderPath } = args;
44
+ if (!projectFolderPath) throw new Error("projectFolderPath is required");
45
+ const uploadFolderPath = args.uploadFolderPath || path.join(projectFolderPath, "uploads");
46
+ const executableArgs = [
47
+ "--port",
48
+ String(port),
49
+ "--project_folder_path",
50
+ projectFolderPath,
51
+ "--upload_folder_path",
52
+ uploadFolderPath,
53
+ "--allowed_origins",
54
+ "http://localhost:*",
55
+ "--timeout",
56
+ "0"
57
+ ];
58
+ if (process.env.NODE_ENV === "development" || !process.env.NODE_ENV) executableArgs.push("--debug");
59
+ return executableArgs;
75
60
  }
76
-
77
- async function runBack(execName, execPath, args = {}, attempts = 0) {
78
- let port = undefined;
79
- try {
80
- port = await getAvailablePort();
81
- const executableArgs = backArgs(args, port);
82
- console.log("runBack", execPath, execName, executableArgs);
83
- await runScript(execPath, execName, executableArgs, "Serving Flask app");
84
- return port;
85
- } catch (error) {
86
- if (!isPortInUseError(error)) {
87
- console.log("runBack error", error);
88
- throw error;
89
- }
90
- if (attempts <= MAX_PORT_RETRIES) {
91
- console.log("Retrying runBack on conflicting port", port);
92
- const newPort = await runBack(execName, execPath, args, attempts + 1);
93
- return newPort;
94
- }
95
- }
61
+ async function runBack(execName, execPath, args = DEFAULT_RUN_ARGS, attempts = 0) {
62
+ let port = void 0;
63
+ try {
64
+ port = await getAvailablePort();
65
+ const executableArgs = backArgs(args, port);
66
+ console.log("runBack", execPath, execName, executableArgs);
67
+ await runScript(execPath, execName, executableArgs, "Serving Flask app");
68
+ return port;
69
+ } catch (error) {
70
+ if (!isPortInUseError(error)) {
71
+ console.log("runBack error", error);
72
+ throw error;
73
+ }
74
+ if (attempts <= MAX_PORT_RETRIES) {
75
+ console.log("Retrying runBack on conflicting port", port);
76
+ return await runBack(execName, execPath, args, attempts + 1);
77
+ }
78
+ }
96
79
  }
97
-
98
- async function runViewer(execName, execPath, args = {}, attempts = 0) {
99
- const { projectFolderPath } = args;
100
- if (!projectFolderPath) {
101
- throw new Error("projectFolderPath is required");
102
- }
103
- let port = undefined;
104
- try {
105
- port = await getAvailablePort();
106
- const viewerArgs = [
107
- "--port",
108
- String(port),
109
- "--project_folder_path",
110
- projectFolderPath,
111
- "--timeout",
112
- "0",
113
- ];
114
- console.log("runViewer", execPath, execName, viewerArgs);
115
- await runScript(execPath, execName, viewerArgs, "Starting factory");
116
- return port;
117
- } catch (error) {
118
- if (!isPortInUseError(error)) {
119
- console.log("runBack error", error);
120
- throw error;
121
- }
122
- if (attempts <= MAX_PORT_RETRIES) {
123
- console.log("Retrying runViewer on conflicting port", port);
124
- const newPort = await runViewer(execName, execPath, args, attempts + 1);
125
- return newPort;
126
- }
127
- }
80
+ async function runViewer(execName, execPath, args = DEFAULT_RUN_ARGS, attempts = 0) {
81
+ const { projectFolderPath } = args;
82
+ if (!projectFolderPath) throw new Error("projectFolderPath is required");
83
+ let port = void 0;
84
+ try {
85
+ port = await getAvailablePort();
86
+ const viewerArgs = [
87
+ "--port",
88
+ String(port),
89
+ "--project_folder_path",
90
+ projectFolderPath,
91
+ "--timeout",
92
+ "0"
93
+ ];
94
+ console.log("runViewer", execPath, execName, viewerArgs);
95
+ await runScript(execPath, execName, viewerArgs, "Starting factory");
96
+ return port;
97
+ } catch (error) {
98
+ if (!isPortInUseError(error)) {
99
+ console.log("runBack error", error);
100
+ throw error;
101
+ }
102
+ if (attempts <= MAX_PORT_RETRIES) {
103
+ console.log("Retrying runViewer on conflicting port", port);
104
+ return await runViewer(execName, execPath, args, attempts + 1);
105
+ }
106
+ }
128
107
  }
129
-
130
- async function runExtension(extensionId, execName, execPath, args = {}, attempts = 0) {
131
- let port = undefined;
132
- try {
133
- port = await getAvailablePort();
134
- const executableArgs = backArgs(args, port);
135
- const command = executablePath(execPath, execName);
136
- console.log("runExtension", execPath, execName, executableArgs);
137
- addSupervisorProgram(extensionId, command, executableArgs);
138
- addNginxLocation(extensionId, port);
139
- return port;
140
- } catch (error) {
141
- if (!isPortInUseError(error)) {
142
- console.log("runBack error", error);
143
- throw error;
144
- }
145
- if (attempts <= MAX_PORT_RETRIES) {
146
- console.log("Retrying runExtension on conflicting port", port);
147
- const newPort = await runExtension(extensionId, execName, execPath, args, attempts + 1);
148
- return newPort;
149
- }
150
- }
108
+ async function runExtension(extensionId, execName, execPath, args = DEFAULT_RUN_ARGS, attempts = 0) {
109
+ let port = void 0;
110
+ try {
111
+ port = await getAvailablePort();
112
+ const executableArgs = backArgs(args, port);
113
+ const command = executablePath(execPath, execName);
114
+ console.log("runExtension", execPath, execName, executableArgs);
115
+ addSupervisorProgram(extensionId, command, executableArgs);
116
+ addNginxLocation(extensionId, port);
117
+ return port;
118
+ } catch (error) {
119
+ if (!isPortInUseError(error)) {
120
+ console.log("runBack error", error);
121
+ throw error;
122
+ }
123
+ if (attempts <= MAX_PORT_RETRIES) {
124
+ console.log("Retrying runExtension on conflicting port", port);
125
+ return await runExtension(extensionId, execName, execPath, args, attempts + 1);
126
+ }
127
+ }
151
128
  }
152
129
  function addMicroserviceMetadatas(projectFolderPath, serviceObj) {
153
- const microservices = projectMicroservices(projectFolderPath);
154
- if (serviceObj.type === "back") {
155
- const schema = back_schemas.opengeodeweb_back.kill;
156
- serviceObj.url = `http://localhost:${serviceObj.port}/${schema.$id}`;
157
- const [method] = schema.methods;
158
- serviceObj.method = method;
159
- } else if (serviceObj.type === "viewer") {
160
- serviceObj.url = `ws://localhost:${serviceObj.port}/ws`;
161
- }
162
- microservices.push(serviceObj);
163
- fs.writeFileSync(
164
- microservicesMetadatasPath(projectFolderPath),
165
- JSON.stringify(
166
- {
167
- microservices,
168
- },
169
- undefined,
170
- 2,
171
- ),
172
- );
130
+ const microservices = projectMicroservices(projectFolderPath);
131
+ if (serviceObj.type === "back") {
132
+ const schema = back_schemas.opengeodeweb_back.kill;
133
+ serviceObj.url = `http://localhost:${serviceObj.port}/${schema.$id}`;
134
+ const [method] = schema.methods;
135
+ serviceObj.method = method;
136
+ } else if (serviceObj.type === "viewer") serviceObj.url = `ws://localhost:${serviceObj.port}/ws`;
137
+ microservices.push(serviceObj);
138
+ fs.writeFileSync(microservicesMetadatasPath(projectFolderPath), JSON.stringify({ microservices }, void 0, 2));
173
139
  }
140
+ //#endregion
174
141
  export { addMicroserviceMetadatas, runBack, runExtension, runViewer };
@@ -0,0 +1,206 @@
1
+ // Not auto-fixable (eslint's sort-imports core rule has no autofixer) and this file's import order doesn't match its syntax-kind-then-alphabetical requirement - left as-is rather than manually reordered across the codebase for a purely cosmetic rule.
2
+ // oxlint-disable eslint/sort-imports
3
+ // Node imports
4
+ import child_process from "node:child_process";
5
+ import fs from "node:fs";
6
+ import path from "node:path";
7
+
8
+ // Third party imports
9
+ import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json" with { type: "json" };
10
+
11
+ // Local imports
12
+ import { addNginxLocation, addSupervisorProgram } from "./cloud.js";
13
+ import { getAvailablePort, waitForReady } from "./scripts.js";
14
+ // oxlint-disable-next-line eslint/no-duplicate-imports
15
+ import type { NamedChildProcess } from "./scripts.js";
16
+ import { microservicesMetadatasPath, projectMicroservices } from "./cleanup.js";
17
+ // oxlint-disable-next-line eslint/no-duplicate-imports
18
+ import type { Microservice } from "./cleanup.js";
19
+ import { executablePath } from "./path.js";
20
+
21
+ interface RunArgs {
22
+ projectFolderPath: string;
23
+ uploadFolderPath?: string;
24
+ [key: string]: unknown;
25
+ }
26
+
27
+ const MILLISECONDS_PER_SECOND = 1000;
28
+ const DEFAULT_TIMEOUT_SECONDS = 45;
29
+ const MAX_PORT_RETRIES = 1;
30
+ const DEFAULT_RUN_ARGS: RunArgs = { projectFolderPath: "" };
31
+ async function runScript(
32
+ execPath: string,
33
+ execName: string,
34
+ args: string[],
35
+ expectedResponse: string,
36
+ timeoutSeconds = DEFAULT_TIMEOUT_SECONDS,
37
+ ): Promise<NamedChildProcess> {
38
+ const command = executablePath(execPath, execName);
39
+ console.log("runScript", command, args);
40
+ const child = child_process.spawn(command, args, {
41
+ stdio: ["ignore", "pipe", "pipe"],
42
+ }) as NamedChildProcess;
43
+ child.name = command.replace(/^.*[\\/]/u, "");
44
+ child.on("spawn", () => {
45
+ console.log(`[${child.name}] spawned, pid=${child.pid}`);
46
+ });
47
+ const controller = new AbortController();
48
+ const timer = setTimeout(() => controller.abort(), timeoutSeconds * MILLISECONDS_PER_SECOND);
49
+ if (typeof timer.unref === "function") {
50
+ timer.unref();
51
+ }
52
+ try {
53
+ const result = await waitForReady(child, expectedResponse, controller.signal);
54
+ clearTimeout(timer);
55
+ return result;
56
+ } catch (error) {
57
+ clearTimeout(timer);
58
+ child.kill();
59
+ throw error;
60
+ }
61
+ }
62
+ function isPortInUseError(error: unknown): boolean {
63
+ return /EADDRINUSE|address already in use|port already in use/iu.test(String(error));
64
+ }
65
+
66
+ function backArgs(args: RunArgs, port: number): string[] {
67
+ const { projectFolderPath } = args;
68
+ if (!projectFolderPath) {
69
+ throw new Error("projectFolderPath is required");
70
+ }
71
+ const uploadFolderPath = args.uploadFolderPath || path.join(projectFolderPath, "uploads");
72
+ const executableArgs = [
73
+ "--port",
74
+ String(port),
75
+ "--project_folder_path",
76
+ projectFolderPath,
77
+ "--upload_folder_path",
78
+ uploadFolderPath,
79
+ "--allowed_origins",
80
+ "http://localhost:*",
81
+ "--timeout",
82
+ "0",
83
+ ];
84
+ if (process.env.NODE_ENV === "development" || !process.env.NODE_ENV) {
85
+ executableArgs.push("--debug");
86
+ }
87
+ return executableArgs;
88
+ }
89
+
90
+ async function runBack(
91
+ execName: string,
92
+ execPath: string,
93
+ args: RunArgs = DEFAULT_RUN_ARGS,
94
+ attempts = 0,
95
+ ): Promise<number | undefined> {
96
+ let port: number | undefined = undefined;
97
+ try {
98
+ port = await getAvailablePort();
99
+ const executableArgs = backArgs(args, port);
100
+ console.log("runBack", execPath, execName, executableArgs);
101
+ await runScript(execPath, execName, executableArgs, "Serving Flask app");
102
+ return port;
103
+ } catch (error) {
104
+ if (!isPortInUseError(error)) {
105
+ console.log("runBack error", error);
106
+ throw error;
107
+ }
108
+ if (attempts <= MAX_PORT_RETRIES) {
109
+ console.log("Retrying runBack on conflicting port", port);
110
+ const newPort = await runBack(execName, execPath, args, attempts + 1);
111
+ return newPort;
112
+ }
113
+ }
114
+ return undefined;
115
+ }
116
+
117
+ async function runViewer(
118
+ execName: string,
119
+ execPath: string,
120
+ args: RunArgs = DEFAULT_RUN_ARGS,
121
+ attempts = 0,
122
+ ): Promise<number | undefined> {
123
+ const { projectFolderPath } = args;
124
+ if (!projectFolderPath) {
125
+ throw new Error("projectFolderPath is required");
126
+ }
127
+ let port: number | undefined = undefined;
128
+ try {
129
+ port = await getAvailablePort();
130
+ const viewerArgs = [
131
+ "--port",
132
+ String(port),
133
+ "--project_folder_path",
134
+ projectFolderPath,
135
+ "--timeout",
136
+ "0",
137
+ ];
138
+ console.log("runViewer", execPath, execName, viewerArgs);
139
+ await runScript(execPath, execName, viewerArgs, "Starting factory");
140
+ return port;
141
+ } catch (error) {
142
+ if (!isPortInUseError(error)) {
143
+ console.log("runBack error", error);
144
+ throw error;
145
+ }
146
+ if (attempts <= MAX_PORT_RETRIES) {
147
+ console.log("Retrying runViewer on conflicting port", port);
148
+ const newPort = await runViewer(execName, execPath, args, attempts + 1);
149
+ return newPort;
150
+ }
151
+ }
152
+ return undefined;
153
+ }
154
+
155
+ async function runExtension(
156
+ extensionId: string,
157
+ execName: string,
158
+ execPath: string,
159
+ args: RunArgs = DEFAULT_RUN_ARGS,
160
+ attempts = 0,
161
+ ): Promise<number | undefined> {
162
+ let port: number | undefined = undefined;
163
+ try {
164
+ port = await getAvailablePort();
165
+ const executableArgs = backArgs(args, port);
166
+ const command = executablePath(execPath, execName);
167
+ console.log("runExtension", execPath, execName, executableArgs);
168
+ addSupervisorProgram(extensionId, command, executableArgs);
169
+ addNginxLocation(extensionId, port);
170
+ return port;
171
+ } catch (error) {
172
+ if (!isPortInUseError(error)) {
173
+ console.log("runBack error", error);
174
+ throw error;
175
+ }
176
+ if (attempts <= MAX_PORT_RETRIES) {
177
+ console.log("Retrying runExtension on conflicting port", port);
178
+ const newPort = await runExtension(extensionId, execName, execPath, args, attempts + 1);
179
+ return newPort;
180
+ }
181
+ }
182
+ return undefined;
183
+ }
184
+ function addMicroserviceMetadatas(projectFolderPath: string, serviceObj: Microservice): void {
185
+ const microservices = projectMicroservices(projectFolderPath);
186
+ if (serviceObj.type === "back") {
187
+ const schema = back_schemas.opengeodeweb_back.kill;
188
+ serviceObj.url = `http://localhost:${serviceObj.port}/${schema.$id}`;
189
+ const [method] = schema.methods;
190
+ serviceObj.method = method;
191
+ } else if (serviceObj.type === "viewer") {
192
+ serviceObj.url = `ws://localhost:${serviceObj.port}/ws`;
193
+ }
194
+ microservices.push(serviceObj);
195
+ fs.writeFileSync(
196
+ microservicesMetadatasPath(projectFolderPath),
197
+ JSON.stringify(
198
+ {
199
+ microservices,
200
+ },
201
+ undefined,
202
+ 2,
203
+ ),
204
+ );
205
+ }
206
+ export { addMicroserviceMetadatas, runBack, runExtension, runViewer };