@geode/opengeodeweb-front 10.34.0-rc.2 → 10.34.0-rc.21

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 (499) hide show
  1. package/.build/opengeodeweb_front_schemas.js +175 -0
  2. package/.build/server/utils/app_config.js +57 -0
  3. package/.build/server/utils/cleanup.js +135 -0
  4. package/.build/server/utils/cloud.js +156 -0
  5. package/.build/server/utils/microservices.js +153 -0
  6. package/.build/server/utils/path.js +108 -0
  7. package/.build/server/utils/scripts.js +134 -0
  8. package/.build/server/utils/server.js +44 -0
  9. package/.build/server/utils/server_config.js +51 -0
  10. package/.build/server/utils/stream.js +6 -0
  11. package/.build/server/utils/ws_client.js +100 -0
  12. package/.build/shared/app_mode.js +8 -0
  13. package/.build/shared/scripts.js +49 -0
  14. package/.build/shared/utils/call_raw.js +31 -0
  15. package/.build/shared/utils/call_schema.js +28 -0
  16. package/.build/shared/utils/fetch_raw.js +52 -0
  17. package/.build/shared/utils/fetch_schema.js +32 -0
  18. package/.build/shared/utils/file.js +14 -0
  19. package/.build/shared/utils/parse_boolean.js +23 -0
  20. package/.build/shared/utils/response_handlers/load.js +50 -0
  21. package/.build/shared/utils/types.js +1 -0
  22. package/.build/shared/utils/validate_schema.js +17 -0
  23. package/README.md +8 -0
  24. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  25. package/app/components/ActionButton.vue +28 -12
  26. package/app/components/Basic/Slider.vue +2 -2
  27. package/app/components/Basic/Switch.vue +2 -2
  28. package/app/components/CameraManager/List.vue +11 -11
  29. package/app/components/CameraManager/Saver.vue +8 -4
  30. package/app/components/CameraManager.vue +24 -12
  31. package/app/components/CameraOrientation.vue +31 -17
  32. package/app/components/ClippingPlaneCard.vue +13 -12
  33. package/app/components/ClippingPlanes.vue +31 -21
  34. package/app/components/CrsSelector.vue +26 -18
  35. package/app/components/DeleteDialog.vue +18 -16
  36. package/app/components/DragAndDrop.vue +55 -37
  37. package/app/components/DragAndDropInternal/DragAndDropInline.vue +31 -16
  38. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  39. package/app/components/ExtensionSelector.vue +34 -18
  40. package/app/components/FeedBack/ErrorBanner.vue +4 -3
  41. package/app/components/FeedBack/Snackers.vue +6 -5
  42. package/app/components/FetchingData.vue +8 -12
  43. package/app/components/FileSelector.vue +27 -17
  44. package/app/components/FileUploader.vue +51 -30
  45. package/app/components/GlassCard.vue +17 -13
  46. package/app/components/HybridRenderingView.vue +25 -12
  47. package/app/components/HybridViewerTooltip.vue +28 -26
  48. package/app/components/InfraConnected.vue +1 -1
  49. package/app/components/Launcher.vue +12 -10
  50. package/app/components/Loading/EcoMessages.vue +24 -13
  51. package/app/components/Loading/Header.vue +6 -7
  52. package/app/components/Loading/Progress.vue +6 -7
  53. package/app/components/Loading.vue +10 -14
  54. package/app/components/MissingFilesSelector.vue +35 -19
  55. package/app/components/ObjectSelector.vue +37 -21
  56. package/app/components/PackagesVersions.vue +16 -8
  57. package/app/components/Recaptcha.vue +17 -23
  58. package/app/components/RemoteRenderingView.vue +21 -15
  59. package/app/components/Ruler.vue +11 -9
  60. package/app/components/Screenshot.vue +25 -19
  61. package/app/components/SearchBar.vue +12 -6
  62. package/app/components/ShrinkFilter.vue +19 -14
  63. package/app/components/Step.vue +32 -12
  64. package/app/components/Stepper.vue +19 -7
  65. package/app/components/ToolPanel.vue +29 -13
  66. package/app/components/ViewToolbar.vue +53 -44
  67. package/app/components/Viewer/ContextMenu/CenterButton.vue +16 -9
  68. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  69. package/app/components/Viewer/ContextMenu/ContextMenu.vue +40 -32
  70. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +31 -17
  71. package/app/components/Viewer/ContextMenu/InfoCard.vue +38 -22
  72. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  73. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +67 -48
  74. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +74 -50
  75. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +69 -50
  76. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +47 -35
  77. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +91 -51
  78. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +74 -49
  79. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +115 -53
  80. package/app/components/Viewer/Generic/Model/CornersOptions.vue +75 -37
  81. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +13 -9
  82. package/app/components/Viewer/Generic/Model/LinesOptions.vue +110 -61
  83. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +32 -21
  84. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +9 -5
  85. package/app/components/Viewer/Generic/Model/PointsOptions.vue +19 -13
  86. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +119 -49
  87. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  88. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  89. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  90. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  91. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  92. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  93. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  94. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +120 -76
  95. package/app/components/Viewer/ObjectTree/Base/Controls.vue +25 -10
  96. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +42 -17
  97. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  98. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +29 -14
  99. package/app/components/Viewer/ObjectTree/Box.vue +32 -15
  100. package/app/components/Viewer/ObjectTree/Layout.vue +55 -35
  101. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +63 -34
  102. package/app/components/Viewer/ObjectTree/Views/{ModelCollections.vue → ModelTree.vue} +101 -39
  103. package/app/components/Viewer/Options/AttributeColorBar.vue +14 -6
  104. package/app/components/Viewer/Options/AttributeRangeSelector.vue +8 -4
  105. package/app/components/Viewer/Options/AttributeSelector.vue +64 -33
  106. package/app/components/Viewer/Options/ColorMapList.vue +52 -24
  107. package/app/components/Viewer/Options/ColorMapPicker.vue +15 -11
  108. package/app/components/Viewer/Options/ColorPicker.vue +239 -50
  109. package/app/components/Viewer/Options/ColoringTypeSelector.vue +87 -67
  110. package/app/components/Viewer/Options/ColormapQuickPicker.vue +16 -12
  111. package/app/components/Viewer/Options/OptionsSection.vue +7 -5
  112. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  113. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  114. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  115. package/app/components/Viewer/Options/TextureItem.vue +29 -22
  116. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  117. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  118. package/app/components/Viewer/OverlappingObjectsPicker.vue +27 -12
  119. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +38 -26
  120. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  121. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  122. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  123. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +73 -48
  124. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  125. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  126. package/app/components/Viewer/Surface/PolygonsOptions.vue +79 -49
  127. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  128. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  129. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  130. package/app/components/Viewer/Ui.vue +19 -14
  131. package/app/components/Wrapper.vue +16 -10
  132. package/app/components/ZScaling.vue +18 -10
  133. package/app/components/csv-preview/CsvPreviewer.vue +72 -50
  134. package/app/components/csv-preview/CsvSettings.vue +30 -50
  135. package/app/components/csv-preview/CsvTable.vue +34 -14
  136. package/app/composables/{batch_style.js → batch_style.ts} +9 -7
  137. package/app/composables/clipping_planes_widget.ts +204 -0
  138. package/app/composables/clipping_planes_widget_entries.ts +189 -0
  139. package/app/composables/copy_to_clipboard.ts +7 -0
  140. package/app/composables/global_attribute_style.ts +303 -0
  141. package/app/composables/hover_highlight.ts +127 -0
  142. package/app/composables/{model_collections.js → model_collections.ts} +28 -9
  143. package/app/composables/{model_components.js → model_components.ts} +28 -9
  144. package/app/composables/{project_manager.js → project_manager.ts} +77 -20
  145. package/app/composables/responsive_middle_truncate.ts +48 -0
  146. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  147. package/app/composables/stepper_tree.ts +79 -0
  148. package/app/composables/tree_filter.ts +194 -0
  149. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +62 -20
  150. package/app/composables/{tree_scroll.js → tree_scroll.ts} +61 -12
  151. package/app/composables/use_adaptive_styles.ts +186 -0
  152. package/app/composables/use_overlapping_picker.ts +263 -0
  153. package/app/composables/use_quick_colormap.ts +55 -0
  154. package/app/composables/virtual_tree.ts +271 -0
  155. package/app/composables/vtk_implicit_plane_widget.d.ts +2 -0
  156. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +3 -5
  157. package/app/plugins/click_outside_ignore_snackbars.client.ts +36 -0
  158. package/app/stores/app.ts +252 -0
  159. package/app/stores/app_helpers/extension.ts +179 -0
  160. package/app/stores/{back.js → back.ts} +54 -28
  161. package/app/stores/camera_manager.ts +80 -0
  162. package/app/stores/{cloud.js → cloud.ts} +18 -13
  163. package/app/stores/data.ts +392 -0
  164. package/app/stores/data_helpers/collections.ts +138 -0
  165. package/app/stores/data_helpers/mesh.ts +169 -0
  166. package/app/stores/data_style.ts +167 -0
  167. package/app/stores/{feedback.js → feedback.ts} +19 -8
  168. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +49 -45
  169. package/app/stores/infra.ts +106 -0
  170. package/app/stores/{menu.js → menu.ts} +67 -36
  171. package/app/stores/treeview.ts +383 -0
  172. package/app/stores/{viewer.js → viewer.ts} +75 -42
  173. package/app/utils/attributes.ts +40 -0
  174. package/app/utils/clipping_planes.ts +222 -0
  175. package/app/utils/color_picker.js +54 -0
  176. package/app/utils/colormap.ts +102 -0
  177. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  178. package/app/utils/default_styles/{index.js → index.ts} +4 -3
  179. package/app/utils/default_styles/meshes.ts +264 -0
  180. package/app/utils/default_styles/{models.js → models.ts} +106 -52
  181. package/app/utils/{extension.js → extension.ts} +63 -19
  182. package/app/utils/{import_workflow.js → import_workflow.ts} +39 -22
  183. package/app/utils/{log.js → log.ts} +12 -2
  184. package/app/utils/{name_cleaner.js → name_cleaner.ts} +6 -6
  185. package/app/utils/status.ts +19 -0
  186. package/app/utils/{stores.js → stores.ts} +5 -5
  187. package/app/utils/{string.js → string.ts} +6 -6
  188. package/app/utils/{treeview.js → treeview.ts} +4 -1
  189. package/internal/database/{base_database.js → base_database.ts} +7 -3
  190. package/internal/database/database.ts +102 -0
  191. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  192. package/internal/database/tables/camera_positions.ts +6 -0
  193. package/internal/database/tables/{data.js → data.ts} +3 -1
  194. package/internal/database/tables/data_style.ts +6 -0
  195. package/internal/database/tables/model_component_datastyle.ts +6 -0
  196. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  197. package/internal/database/tables/model_components.ts +6 -0
  198. package/internal/database/tables/model_components_relation.ts +6 -0
  199. package/internal/database/tables/table_definition.ts +5 -0
  200. package/internal/stores/data_style/mesh/cells/cell.ts +279 -0
  201. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +13 -7
  202. package/internal/stores/data_style/mesh/cells/common.ts +50 -0
  203. package/internal/stores/data_style/mesh/cells/index.ts +161 -0
  204. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +14 -8
  205. package/internal/stores/data_style/mesh/cells/vertex.ts +285 -0
  206. package/internal/stores/data_style/mesh/cells/visibility.ts +46 -0
  207. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +13 -7
  208. package/internal/stores/data_style/mesh/edges/common.ts +41 -0
  209. package/internal/stores/data_style/mesh/edges/edge.ts +279 -0
  210. package/internal/stores/data_style/mesh/edges/index.ts +155 -0
  211. package/internal/stores/data_style/mesh/edges/vertex.ts +285 -0
  212. package/internal/stores/data_style/mesh/edges/visibility.ts +45 -0
  213. package/internal/stores/data_style/mesh/edges/width.ts +42 -0
  214. package/internal/stores/data_style/mesh/{index.js → index.ts} +34 -14
  215. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +13 -7
  216. package/internal/stores/data_style/mesh/points/common.ts +51 -0
  217. package/internal/stores/data_style/mesh/points/index.ts +133 -0
  218. package/internal/stores/data_style/mesh/points/size.ts +43 -0
  219. package/internal/stores/data_style/mesh/points/vertex.ts +285 -0
  220. package/internal/stores/data_style/mesh/points/visibility.ts +49 -0
  221. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +13 -7
  222. package/internal/stores/data_style/mesh/polygons/common.ts +50 -0
  223. package/internal/stores/data_style/mesh/polygons/index.ts +167 -0
  224. package/internal/stores/data_style/mesh/polygons/polygon.ts +282 -0
  225. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +14 -8
  226. package/internal/stores/data_style/mesh/polygons/vertex.ts +288 -0
  227. package/internal/stores/data_style/mesh/polygons/visibility.ts +48 -0
  228. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +13 -7
  229. package/internal/stores/data_style/mesh/polyhedra/common.ts +41 -0
  230. package/internal/stores/data_style/mesh/polyhedra/index.ts +157 -0
  231. package/internal/stores/data_style/mesh/polyhedra/polyhedron.ts +294 -0
  232. package/internal/stores/data_style/mesh/polyhedra/vertex.ts +288 -0
  233. package/internal/stores/data_style/mesh/polyhedra/visibility.ts +48 -0
  234. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +50 -13
  235. package/internal/stores/data_style/model/blocks/common.ts +67 -0
  236. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +111 -66
  237. package/internal/stores/data_style/model/blocks/polyhedron.ts +363 -0
  238. package/internal/stores/data_style/model/blocks/vertex.ts +349 -0
  239. package/internal/stores/data_style/model/blocks/visibility.ts +37 -0
  240. package/internal/stores/data_style/model/color.ts +348 -0
  241. package/internal/stores/data_style/model/common.ts +262 -0
  242. package/internal/stores/data_style/model/corners/{color.js → color.ts} +49 -10
  243. package/internal/stores/data_style/model/corners/common.ts +71 -0
  244. package/internal/stores/data_style/model/corners/{index.js → index.ts} +86 -47
  245. package/internal/stores/data_style/model/corners/vertex.ts +315 -0
  246. package/internal/stores/data_style/model/corners/visibility.ts +39 -0
  247. package/internal/stores/data_style/model/edges/common.ts +29 -0
  248. package/internal/stores/data_style/model/edges/{index.js → index.ts} +2 -7
  249. package/internal/stores/data_style/model/edges/visibility.ts +55 -0
  250. package/internal/stores/data_style/model/{index.js → index.ts} +24 -11
  251. package/internal/stores/data_style/model/lines/{color.js → color.ts} +47 -10
  252. package/internal/stores/data_style/model/lines/common.ts +63 -0
  253. package/internal/stores/data_style/model/lines/edge.ts +343 -0
  254. package/internal/stores/data_style/model/lines/{index.js → index.ts} +108 -66
  255. package/internal/stores/data_style/model/lines/vertex.ts +344 -0
  256. package/internal/stores/data_style/model/lines/visibility.ts +37 -0
  257. package/internal/stores/data_style/model/points/common.ts +25 -0
  258. package/internal/stores/data_style/model/points/index.ts +35 -0
  259. package/internal/stores/data_style/model/points/size.ts +44 -0
  260. package/internal/stores/data_style/model/points/visibility.ts +46 -0
  261. package/internal/stores/data_style/model/selection.ts +138 -0
  262. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +47 -10
  263. package/internal/stores/data_style/model/surfaces/common.ts +69 -0
  264. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +113 -66
  265. package/internal/stores/data_style/model/surfaces/polygon.ts +347 -0
  266. package/internal/stores/data_style/model/surfaces/vertex.ts +351 -0
  267. package/internal/stores/data_style/model/surfaces/visibility.ts +37 -0
  268. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +112 -32
  269. package/internal/stores/data_style/state.ts +281 -0
  270. package/internal/stores/data_style/types.ts +30 -0
  271. package/internal/stores/hybrid_viewer/brightness.ts +124 -0
  272. package/internal/stores/hybrid_viewer/camera.ts +326 -0
  273. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +30 -12
  274. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  275. package/internal/stores/hybrid_viewer/core.ts +64 -0
  276. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +10 -13
  277. package/internal/stores/hybrid_viewer/highlight.ts +183 -0
  278. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +50 -22
  279. package/internal/stores/hybrid_viewer/scene.ts +125 -0
  280. package/internal/stores/hybrid_viewer/viewport.ts +177 -0
  281. package/internal/stores/hybrid_viewer/vtk_types.ts +58 -0
  282. package/internal/utils/api_fetch.ts +133 -0
  283. package/internal/utils/upload_file.ts +115 -0
  284. package/internal/utils/viewer_call.ts +99 -0
  285. package/internal/utils/ws_client.ts +54 -0
  286. package/nuxt.config.ts +168 -0
  287. package/opengeodeweb_front_schemas.json +2 -2
  288. package/package.json +49 -13
  289. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +16 -12
  290. package/server/api/local/app/project_folder_path.post.ts +33 -0
  291. package/server/api/local/app/run_back.post.ts +39 -0
  292. package/server/api/local/app/run_viewer.post.ts +39 -0
  293. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +15 -8
  294. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -12
  295. package/server/api/local/extensions/upload.put.ts +71 -0
  296. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +5 -5
  297. package/server/api/microservice/app/schemas/get_is_app_ready.json +1 -1
  298. package/server/api/microservice/app/set_app_base_url.post.ts +29 -0
  299. package/server/api/microservice/app/set_back_base_url.post.ts +26 -0
  300. package/server/api/microservice/app/set_is_app_ready.post.ts +29 -0
  301. package/server/api/microservice/app/set_viewer_base_url.post.ts +26 -0
  302. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +13 -6
  303. package/server/api/serverless/run_cloud.post.ts +92 -0
  304. package/server/utils/{app_config.js → app_config.ts} +40 -18
  305. package/server/utils/{cleanup.js → cleanup.ts} +76 -29
  306. package/server/utils/{cloud.js → cloud.ts} +33 -17
  307. package/server/utils/{extension.js → extension.ts} +31 -4
  308. package/server/utils/{microservices.js → microservices.ts} +68 -27
  309. package/server/utils/{path.js → path.ts} +36 -17
  310. package/server/utils/{scripts.js → scripts.ts} +49 -33
  311. package/server/utils/{server.js → server.ts} +13 -6
  312. package/server/utils/server_config.ts +74 -0
  313. package/server/utils/stream.ts +6 -0
  314. package/server/utils/ws_client.ts +165 -0
  315. package/shared/{scripts.js → scripts.ts} +15 -10
  316. package/shared/utils/call_raw.ts +73 -0
  317. package/shared/utils/{call_schema.js → call_schema.ts} +15 -6
  318. package/shared/utils/fetch_raw.ts +125 -0
  319. package/shared/utils/{fetch_schema.js → fetch_schema.ts} +16 -7
  320. package/shared/utils/file.ts +22 -0
  321. package/shared/utils/{parse_boolean.js → parse_boolean.ts} +1 -1
  322. package/shared/utils/response_handlers/load.ts +109 -0
  323. package/shared/utils/types.ts +27 -0
  324. package/shared/utils/{validate_schema.js → validate_schema.ts} +3 -1
  325. package/.github/workflows/config.json +0 -5
  326. package/.github/workflows/deploy.yml +0 -15
  327. package/.github/workflows/manual_release.yml +0 -11
  328. package/.github/workflows/merge_request.yml +0 -9
  329. package/.github/workflows/pr_update.yml +0 -11
  330. package/.github/workflows/prepare_deploy.yml +0 -9
  331. package/.github/workflows/schedule.yml +0 -18
  332. package/.github/workflows/test.yml +0 -14
  333. package/.github/workflows/test_pr.yml +0 -12
  334. package/.oxlintrc.json +0 -150
  335. package/.releaserc +0 -11
  336. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +0 -224
  337. package/app/composables/clipping_planes_widget.js +0 -249
  338. package/app/composables/global_attribute_style.js +0 -181
  339. package/app/composables/hover_highlight.js +0 -91
  340. package/app/composables/responsive_middle_truncate.js +0 -34
  341. package/app/composables/stepper_tree.js +0 -56
  342. package/app/composables/tree_filter.js +0 -138
  343. package/app/composables/use_adaptive_styles.js +0 -120
  344. package/app/composables/use_overlapping_picker.js +0 -169
  345. package/app/composables/use_quick_colormap.js +0 -32
  346. package/app/composables/virtual_tree.js +0 -191
  347. package/app/stores/app.js +0 -326
  348. package/app/stores/camera_manager.js +0 -57
  349. package/app/stores/data.js +0 -278
  350. package/app/stores/data_helpers/collections.js +0 -96
  351. package/app/stores/data_helpers/mesh.js +0 -122
  352. package/app/stores/data_style.js +0 -116
  353. package/app/stores/infra.js +0 -95
  354. package/app/stores/treeview.js +0 -290
  355. package/app/utils/attributes.js +0 -23
  356. package/app/utils/clipping_planes.js +0 -110
  357. package/app/utils/colormap.js +0 -64
  358. package/app/utils/default_styles/meshes.js +0 -191
  359. package/app/utils/status.js +0 -10
  360. package/commitlint.config.js +0 -20
  361. package/internal/database/database.js +0 -80
  362. package/internal/database/tables/camera_positions.js +0 -4
  363. package/internal/database/tables/data_style.js +0 -4
  364. package/internal/database/tables/model_component_datastyle.js +0 -4
  365. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  366. package/internal/database/tables/model_components.js +0 -4
  367. package/internal/database/tables/model_components_relation.js +0 -4
  368. package/internal/stores/data_style/mesh/cells/cell.js +0 -196
  369. package/internal/stores/data_style/mesh/cells/common.js +0 -39
  370. package/internal/stores/data_style/mesh/cells/index.js +0 -81
  371. package/internal/stores/data_style/mesh/cells/vertex.js +0 -193
  372. package/internal/stores/data_style/mesh/cells/visibility.js +0 -35
  373. package/internal/stores/data_style/mesh/edges/common.js +0 -32
  374. package/internal/stores/data_style/mesh/edges/edge.js +0 -195
  375. package/internal/stores/data_style/mesh/edges/index.js +0 -81
  376. package/internal/stores/data_style/mesh/edges/vertex.js +0 -196
  377. package/internal/stores/data_style/mesh/edges/visibility.js +0 -34
  378. package/internal/stores/data_style/mesh/edges/width.js +0 -34
  379. package/internal/stores/data_style/mesh/points/common.js +0 -37
  380. package/internal/stores/data_style/mesh/points/index.js +0 -82
  381. package/internal/stores/data_style/mesh/points/size.js +0 -35
  382. package/internal/stores/data_style/mesh/points/vertex.js +0 -193
  383. package/internal/stores/data_style/mesh/points/visibility.js +0 -37
  384. package/internal/stores/data_style/mesh/polygons/common.js +0 -32
  385. package/internal/stores/data_style/mesh/polygons/index.js +0 -107
  386. package/internal/stores/data_style/mesh/polygons/polygon.js +0 -196
  387. package/internal/stores/data_style/mesh/polygons/vertex.js +0 -196
  388. package/internal/stores/data_style/mesh/polygons/visibility.js +0 -38
  389. package/internal/stores/data_style/mesh/polyhedra/common.js +0 -32
  390. package/internal/stores/data_style/mesh/polyhedra/index.js +0 -98
  391. package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +0 -196
  392. package/internal/stores/data_style/mesh/polyhedra/vertex.js +0 -196
  393. package/internal/stores/data_style/mesh/polyhedra/visibility.js +0 -38
  394. package/internal/stores/data_style/model/blocks/common.js +0 -51
  395. package/internal/stores/data_style/model/blocks/polyhedron.js +0 -215
  396. package/internal/stores/data_style/model/blocks/vertex.js +0 -204
  397. package/internal/stores/data_style/model/blocks/visibility.js +0 -20
  398. package/internal/stores/data_style/model/color.js +0 -218
  399. package/internal/stores/data_style/model/common.js +0 -141
  400. package/internal/stores/data_style/model/corners/common.js +0 -51
  401. package/internal/stores/data_style/model/corners/vertex.js +0 -204
  402. package/internal/stores/data_style/model/corners/visibility.js +0 -20
  403. package/internal/stores/data_style/model/edges/common.js +0 -20
  404. package/internal/stores/data_style/model/edges/visibility.js +0 -38
  405. package/internal/stores/data_style/model/lines/common.js +0 -51
  406. package/internal/stores/data_style/model/lines/edge.js +0 -203
  407. package/internal/stores/data_style/model/lines/vertex.js +0 -204
  408. package/internal/stores/data_style/model/lines/visibility.js +0 -20
  409. package/internal/stores/data_style/model/points/common.js +0 -20
  410. package/internal/stores/data_style/model/points/index.js +0 -25
  411. package/internal/stores/data_style/model/points/size.js +0 -36
  412. package/internal/stores/data_style/model/points/visibility.js +0 -36
  413. package/internal/stores/data_style/model/selection.js +0 -89
  414. package/internal/stores/data_style/model/surfaces/common.js +0 -51
  415. package/internal/stores/data_style/model/surfaces/polygon.js +0 -215
  416. package/internal/stores/data_style/model/surfaces/vertex.js +0 -215
  417. package/internal/stores/data_style/model/surfaces/visibility.js +0 -20
  418. package/internal/stores/data_style/state.js +0 -197
  419. package/internal/stores/hybrid_viewer/brightness.js +0 -82
  420. package/internal/stores/hybrid_viewer/camera.js +0 -274
  421. package/internal/stores/hybrid_viewer/highlight.js +0 -170
  422. package/internal/stores/hybrid_viewer/scene.js +0 -136
  423. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  424. package/internal/utils/api_fetch.js +0 -52
  425. package/internal/utils/upload_file.js +0 -57
  426. package/internal/utils/viewer_call.js +0 -49
  427. package/internal/utils/ws_client.js +0 -29
  428. package/nuxt.config.js +0 -106
  429. package/scripts/generate_geode_objects.js +0 -24
  430. package/server/api/local/app/project_folder_path.post.js +0 -29
  431. package/server/api/local/app/run_back.post.js +0 -33
  432. package/server/api/local/app/run_viewer.post.js +0 -33
  433. package/server/api/local/extensions/upload.put.js +0 -72
  434. package/server/api/microservice/app/set_app_base_url.post.js +0 -25
  435. package/server/api/microservice/app/set_back_base_url.post.js +0 -22
  436. package/server/api/microservice/app/set_is_app_ready.post.js +0 -25
  437. package/server/api/microservice/app/set_viewer_base_url.post.js +0 -22
  438. package/server/api/serverless/run_cloud.post.js +0 -44
  439. package/server/utils/server_config.js +0 -58
  440. package/server/utils/ws_client.js +0 -112
  441. package/shared/utils/call_raw.js +0 -46
  442. package/shared/utils/fetch_raw.js +0 -61
  443. package/shared/utils/file.js +0 -16
  444. package/shared/utils/response_handlers/load.js +0 -74
  445. package/tests/integration/data/uploads/test.og_brep +0 -0
  446. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  447. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  448. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  449. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  450. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  451. package/tests/integration/data/uploads/test.vtu +0 -22
  452. package/tests/integration/setup.js +0 -92
  453. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  454. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  455. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  456. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  457. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  458. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  459. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  460. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  461. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  462. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  463. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  464. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  465. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  466. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  467. package/tests/setup_indexeddb.js +0 -4
  468. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  469. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  470. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  471. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  472. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  473. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  474. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  475. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  476. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  477. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  478. package/tests/unit/components/Step.nuxt.test.js +0 -51
  479. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  480. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  481. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  482. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  483. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  484. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  485. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  486. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  487. package/tests/unit/stores/app.nuxt.test.js +0 -189
  488. package/tests/unit/stores/back.nuxt.test.js +0 -147
  489. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  490. package/tests/unit/stores/data.nuxt.test.js +0 -162
  491. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  492. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  493. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  494. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  495. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  496. package/tests/utils.js +0 -20
  497. package/tests/vitest.config.js +0 -67
  498. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
  499. /package/shared/{app_mode.js → app_mode.ts} +0 -0
@@ -0,0 +1,179 @@
1
+ import { killExtension } from "@ogw_front/utils/extension.js";
2
+ import { useInfraStore } from "@ogw_front/stores/infra";
3
+
4
+ import type { RegisterableStore } from "@ogw_front/stores/app";
5
+
6
+ interface ExtensionMetadata {
7
+ id: string;
8
+ store: () => RegisterableStore;
9
+ [key: string]: unknown;
10
+ }
11
+
12
+ interface ExtensionModule {
13
+ metadata: ExtensionMetadata;
14
+ install: (api: unknown, backendPath?: string) => Promise<void>;
15
+ [key: string]: unknown;
16
+ }
17
+
18
+ interface ExtensionData {
19
+ module: ExtensionModule;
20
+ id: string;
21
+ path: string;
22
+ backendPath: string | undefined;
23
+ loadedAt: string;
24
+ metadata: ExtensionMetadata;
25
+ enabled: boolean;
26
+ }
27
+
28
+ // oxlint-disable-next-line max-lines-per-function, max-statements
29
+ export function useAppExtensions(): {
30
+ loadedExtensions: typeof loadedExtensions;
31
+ extensionAPI: typeof extensionAPI;
32
+ setExtensionAPI: typeof setExtensionAPI;
33
+ setCodeTransformer: typeof setCodeTransformer;
34
+ getExtension: typeof getExtension;
35
+ loadExtension: typeof loadExtension;
36
+ getLoadedExtensions: typeof getLoadedExtensions;
37
+ unloadExtension: typeof unloadExtension;
38
+ toggleExtension: typeof toggleExtension;
39
+ setExtensionEnabled: typeof setExtensionEnabled;
40
+ getExtensionEnabled: typeof getExtensionEnabled;
41
+ } {
42
+ const loadedExtensions = ref<Map<string, ExtensionData>>(new Map());
43
+ const extensionAPI = ref<unknown>(undefined);
44
+ const codeTransformer = ref<((code: string) => string) | undefined>(undefined);
45
+
46
+ function setExtensionAPI(api: unknown): void {
47
+ extensionAPI.value = api;
48
+ }
49
+
50
+ function setCodeTransformer(transformer: (code: string) => string): void {
51
+ codeTransformer.value = transformer;
52
+ }
53
+
54
+ function getExtension(id: string): ExtensionData | undefined {
55
+ return loadedExtensions.value.get(id);
56
+ }
57
+
58
+ async function loadExtension(
59
+ path: string,
60
+ extensionPort: string,
61
+ backendPath?: string,
62
+ ): Promise<ExtensionModule> {
63
+ try {
64
+ let finalURL = path;
65
+
66
+ if (codeTransformer.value && path.startsWith("blob:")) {
67
+ const response = await fetch(path);
68
+ const code = await response.text();
69
+ const transformedCode = codeTransformer.value(code);
70
+
71
+ const newBlob = new Blob([transformedCode], {
72
+ type: "application/javascript",
73
+ });
74
+ finalURL = URL.createObjectURL(newBlob);
75
+ }
76
+ // oxlint-disable-next-line no-inline-comments, no-unsafe-assignment
77
+ const extensionModule: ExtensionModule = await import(/* @vite-ignore */ finalURL);
78
+ const store = extensionModule.metadata.store();
79
+ store.$patch?.({ default_local_port: extensionPort });
80
+
81
+ if (finalURL !== path && finalURL.startsWith("blob:")) {
82
+ URL.revokeObjectURL(finalURL);
83
+ }
84
+
85
+ if (!extensionModule.metadata?.id) {
86
+ throw new Error("Extension must have metadata.id");
87
+ }
88
+
89
+ const extensionId = extensionModule.metadata.id;
90
+
91
+ if (loadedExtensions.value.has(extensionId)) {
92
+ console.warn(`[AppStore] Extension "${extensionId}" is already loaded`);
93
+ throw new Error(`Extension "${extensionId}" is already loaded.`);
94
+ }
95
+
96
+ if (extensionAPI.value === undefined) {
97
+ throw new Error("Extension API not initialized");
98
+ }
99
+
100
+ if (typeof extensionModule.install !== "function") {
101
+ throw new TypeError("Extension must export an install function");
102
+ }
103
+
104
+ await extensionModule.install(extensionAPI.value, backendPath);
105
+
106
+ const extensionData: ExtensionData = {
107
+ module: extensionModule,
108
+ id: extensionId,
109
+ path,
110
+ backendPath,
111
+ loadedAt: new Date().toISOString(),
112
+ metadata: extensionModule.metadata,
113
+ enabled: true,
114
+ };
115
+ loadedExtensions.value.set(extensionId, extensionData);
116
+
117
+ console.log(`[AppStore] Extension loaded successfully: ${extensionId}`);
118
+ return extensionModule;
119
+ } catch (error) {
120
+ console.error(`[AppStore] Failed to load extension from ${path}:`, error);
121
+ throw error;
122
+ }
123
+ }
124
+
125
+ function getLoadedExtensions(): ExtensionData[] {
126
+ return [...loadedExtensions.value.values()];
127
+ }
128
+
129
+ async function unloadExtension(extensionId: string): Promise<boolean> {
130
+ console.log(`[AppStore] Unloading extension: ${extensionId}`);
131
+ const infraStore = useInfraStore();
132
+ infraStore.unregister_microservice(extensionId);
133
+ await killExtension(extensionId);
134
+
135
+ loadedExtensions.value.delete(extensionId);
136
+ console.log(`[AppStore] Extension unloaded: ${extensionId}`);
137
+ return true;
138
+ }
139
+
140
+ function toggleExtension(extensionId: string): boolean {
141
+ const extensionData = getExtension(extensionId);
142
+ if (!extensionData) {
143
+ return false;
144
+ }
145
+ extensionData.enabled = !extensionData.enabled;
146
+ console.log(
147
+ `[AppStore] Extension ${extensionData.enabled ? "enabled" : "disabled"}: ${extensionId}`,
148
+ );
149
+ return extensionData.enabled;
150
+ }
151
+
152
+ function setExtensionEnabled(extensionId: string, enabled: boolean): boolean {
153
+ const extensionData = getExtension(extensionId);
154
+ if (!extensionData) {
155
+ return false;
156
+ }
157
+ extensionData.enabled = enabled;
158
+ console.log(`[AppStore] Extension ${enabled ? "enabled" : "disabled"}: ${extensionId}`);
159
+ return true;
160
+ }
161
+
162
+ function getExtensionEnabled(extensionId: string): boolean {
163
+ return getExtension(extensionId)?.enabled ?? false;
164
+ }
165
+
166
+ return {
167
+ loadedExtensions,
168
+ extensionAPI,
169
+ setExtensionAPI,
170
+ setCodeTransformer,
171
+ getExtension,
172
+ loadExtension,
173
+ getLoadedExtensions,
174
+ unloadExtension,
175
+ toggleExtension,
176
+ setExtensionEnabled,
177
+ getExtensionEnabled,
178
+ };
179
+ }
@@ -7,6 +7,8 @@ import { useAppStore } from "@ogw_front/stores/app";
7
7
  import { useFeedbackStore } from "@ogw_front/stores/feedback";
8
8
  import { useInfraStore } from "@ogw_front/stores/infra";
9
9
 
10
+ import type { JsonRpcSchema, RequestHandlers } from "@ogw_shared/utils/types.js";
11
+
10
12
  import opengeodeweb_front_schemas from "@geode/opengeodeweb-front/opengeodeweb_front_schemas.json" with { type: "json" };
11
13
 
12
14
  const MILLISECONDS_IN_SECOND = 1000;
@@ -20,13 +22,13 @@ export const useBackStore = defineStore("back", {
20
22
  version: "0.0.0",
21
23
  }),
22
24
  getters: {
23
- protocol() {
25
+ protocol(): string {
24
26
  return getRestApiProtocol();
25
27
  },
26
- port() {
28
+ port(): string {
27
29
  return getRestApiPort(this.default_local_port);
28
30
  },
29
- base_url() {
31
+ base_url(): string {
30
32
  const infraStore = useInfraStore();
31
33
  let back_url = `${this.protocol}://${infraStore.domain_name}:${this.port}`;
32
34
  if (isCloudMode()) {
@@ -34,21 +36,23 @@ export const useBackStore = defineStore("back", {
34
36
  }
35
37
  return back_url;
36
38
  },
37
- is_busy() {
39
+ is_busy(): boolean {
38
40
  return this.request_counter > 0;
39
41
  },
40
42
  },
41
43
  actions: {
42
44
  set_ping() {
45
+ // oxlint-disable-next-line typescript/no-floating-promises
43
46
  this.ping();
44
47
  setInterval(() => {
48
+ // oxlint-disable-next-line typescript/no-floating-promises
45
49
  this.ping();
46
50
  }, DEFAULT_PING_INTERVAL_SECONDS * MILLISECONDS_IN_SECOND);
47
51
  },
48
- ping() {
52
+ async ping() {
49
53
  const feedbackStore = useFeedbackStore();
50
54
  const schema = back_schemas.opengeodeweb_back.ping;
51
- return this.request(
55
+ const result = await this.request(
52
56
  { schema },
53
57
  {
54
58
  request_error_function: () => {
@@ -65,6 +69,7 @@ export const useBackStore = defineStore("back", {
65
69
  },
66
70
  },
67
71
  );
72
+ return result;
68
73
  },
69
74
  start_request() {
70
75
  this.request_counter += 1;
@@ -72,46 +77,58 @@ export const useBackStore = defineStore("back", {
72
77
  stop_request() {
73
78
  this.request_counter -= 1;
74
79
  },
75
- launch(args) {
76
- console.log("[GEODE] Launching back microservice...", { args });
80
+ async launch(args: Record<string, unknown>) {
77
81
  const appStore = useAppStore();
78
82
  const { COMMAND_BACK, NUXT_ROOT_PATH } = useRuntimeConfig().public;
79
83
  const schema = opengeodeweb_front_schemas.api.local.app.run_back;
80
84
  const params = { COMMAND_BACK, NUXT_ROOT_PATH, args };
81
85
 
82
- console.log("[GEODE] params", params);
83
- return appStore.request(
86
+ const result = await appStore.request(
84
87
  { schema, params },
85
88
  {
86
- response_function: (response) => {
87
- console.log(`[GEODE] Back launched on port ${response.port}`);
88
- this.default_local_port = response.port;
89
+ response_function: (response: unknown) => {
90
+ if (
91
+ typeof response === "object" &&
92
+ response !== null &&
93
+ "port" in response &&
94
+ (typeof response.port === "string" || typeof response.port === "number")
95
+ ) {
96
+ this.default_local_port = String(response.port);
97
+ }
89
98
  },
90
99
  },
91
100
  );
101
+ return result;
92
102
  },
93
- connect() {
94
- console.log("[GEODE] Connecting to geode microservice...");
103
+ async connect(): Promise<void> {
95
104
  this.set_ping();
96
- return Promise.resolve();
105
+ await Promise.resolve();
97
106
  },
98
- request({ schema, params = {} }, callbacks = {}) {
99
- return api_fetch(
107
+ async request(
108
+ { schema, params = {} }: { schema: JsonRpcSchema; params?: Record<string, unknown> },
109
+ callbacks: RequestHandlers = {},
110
+ ) {
111
+ const result = await api_fetch(
100
112
  this,
101
- { schema, params, headers: {} },
113
+ // The back store is only ever used with HTTP ("front"/"back") schemas,
114
+ // Which always carry `methods`; the wider JsonRpcSchema param above is
115
+ // Kept as-is to match this action's public signature.
116
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion
117
+ { schema: schema as JsonRpcSchema & { methods: string[] }, params, headers: {} },
102
118
  {
103
119
  ...callbacks,
104
- response_function: async (response) => {
120
+ response_function: async (response: unknown) => {
105
121
  if (callbacks.response_function) {
106
122
  await callbacks.response_function(response);
107
123
  }
108
124
  },
109
125
  },
110
126
  );
127
+ return result;
111
128
  },
112
- upload(file, callbacks = {}) {
129
+ async upload(file: File, callbacks: RequestHandlers = {}) {
113
130
  const schema = back_schemas.opengeodeweb_back.upload_file;
114
- return upload_file(
131
+ const result = await upload_file(
115
132
  this,
116
133
  {
117
134
  schema,
@@ -119,26 +136,35 @@ export const useBackStore = defineStore("back", {
119
136
  },
120
137
  {
121
138
  ...callbacks,
122
- response_function: async (response) => {
139
+ response_function: async (response: unknown) => {
123
140
  if (callbacks.response_function) {
124
141
  await callbacks.response_function(response);
125
142
  }
126
143
  },
127
144
  },
128
145
  );
146
+ return result;
129
147
  },
130
- get_version(schema) {
148
+ async get_version(schema: JsonRpcSchema | undefined) {
131
149
  if (!schema) {
132
- return;
150
+ return undefined;
133
151
  }
134
- return this.request(
152
+ const result = await this.request(
135
153
  { schema },
136
154
  {
137
- response_function: (response) => {
138
- this.version = response.microservice_version;
155
+ response_function: (response: unknown) => {
156
+ if (
157
+ typeof response === "object" &&
158
+ response !== null &&
159
+ "microservice_version" in response &&
160
+ typeof response.microservice_version === "string"
161
+ ) {
162
+ this.version = response.microservice_version;
163
+ }
139
164
  },
140
165
  },
141
166
  );
167
+ return result;
142
168
  },
143
169
  },
144
170
  share: {
@@ -0,0 +1,80 @@
1
+ import { type Table, liveQuery } from "dexie";
2
+ import type { Observable } from "rxjs";
3
+ import { useObservable } from "@vueuse/rxjs";
4
+
5
+ // Local imports
6
+ import type { CameraOptions } from "@ogw_internal/stores/hybrid_viewer/vtk_types.js";
7
+ import { database } from "@ogw_internal/database/database.js";
8
+ import { useViewerStore } from "@ogw_front/stores/viewer";
9
+ import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
10
+
11
+ interface CameraPositionRecord {
12
+ id?: number;
13
+ name: string;
14
+ camera_options: CameraOptions;
15
+ }
16
+
17
+ // oxlint-disable-next-line max-lines-per-function
18
+ export const useCameraManagerStore = defineStore("camera_manager", () => {
19
+ const viewerStore = useViewerStore();
20
+ // Database's table map is assembled dynamically at runtime (see internal/database/database.ts),
21
+ // So it's typed as `{}`; this store's table is registered before use, hence the cast.
22
+ // oxlint-disable-next-line no-unsafe-type-assertion -- trusted database table boundary.
23
+ const camera_positions_db = database.camera_positions as unknown as Table<
24
+ CameraPositionRecord,
25
+ number
26
+ >;
27
+
28
+ function refAllCameraPositions(): Ref<CameraPositionRecord[]> {
29
+ // Dexie's liveQuery() returns Dexie's own minimal Observable shape, not an
30
+ // Actual rxjs Observable instance (useObservable's declared parameter type);
31
+ // The two are structurally close enough at runtime (vueuse only calls
32
+ // `.subscribe`) but not identical, hence the cast.
33
+ return useObservable(
34
+ liveQuery(async () => {
35
+ const positions = await camera_positions_db.toArray();
36
+ return positions;
37
+ // oxlint-disable-next-line no-unsafe-type-assertion -- trusted vueuse/Dexie Observable boundary; see comment above.
38
+ }) as unknown as Observable<CameraPositionRecord[]>,
39
+ { initialValue: [] as CameraPositionRecord[] },
40
+ );
41
+ }
42
+
43
+ async function getCameraPosition(id: number): Promise<CameraPositionRecord | undefined> {
44
+ const position = await camera_positions_db.get(id);
45
+ return position;
46
+ }
47
+
48
+ async function saveCameraPosition(name: string, camera_options: CameraOptions): Promise<void> {
49
+ await camera_positions_db.put({
50
+ name,
51
+ camera_options,
52
+ });
53
+ }
54
+
55
+ async function restoreCameraPosition(id: number): Promise<void> {
56
+ const position = await camera_positions_db.get(id);
57
+ if (position) {
58
+ const schema = viewer_schemas.opengeodeweb_viewer.viewer.update_camera;
59
+ const params = { camera_options: position.camera_options };
60
+ await viewerStore.request({ schema, params });
61
+ }
62
+ }
63
+
64
+ async function deleteCameraPosition(id: number): Promise<void> {
65
+ await camera_positions_db.delete(id);
66
+ }
67
+
68
+ async function renameCameraPosition(id: number, newName: string): Promise<void> {
69
+ await camera_positions_db.update(id, { name: newName });
70
+ }
71
+
72
+ return {
73
+ refAllCameraPositions,
74
+ getCameraPosition,
75
+ saveCameraPosition,
76
+ restoreCameraPosition,
77
+ deleteCameraPosition,
78
+ renameCameraPosition,
79
+ };
80
+ });
@@ -1,9 +1,6 @@
1
1
  import { Status } from "@ogw_front/utils/status";
2
2
  import { fetchSchema } from "@ogw_shared/utils/fetch_schema";
3
3
  import { setAppBaseUrl } from "@ogw_shared/scripts";
4
- import { useAppStore } from "./app";
5
- import { useFeedbackStore } from "./feedback";
6
- import { useInfraStore } from "./infra";
7
4
 
8
5
  import opengeodeweb_front_schemas from "@geode/opengeodeweb-front/opengeodeweb_front_schemas.json" with { type: "json" };
9
6
 
@@ -12,30 +9,39 @@ export const useCloudStore = defineStore("cloud", {
12
9
  status: Status.NOT_CONNECTED,
13
10
  }),
14
11
  actions: {
15
- launch(email) {
12
+ async launch(email: string) {
16
13
  this.status = Status.CONNECTING;
17
- console.log("[CLOUD] Launching cloud backend...");
18
14
  const schema = opengeodeweb_front_schemas.api.serverless.run_cloud;
19
15
  const params = { email };
20
- console.log("[CLOUD] params", params);
16
+ const { useAppStore } = await import("./app");
17
+ const { useFeedbackStore } = await import("./feedback");
21
18
  const appStore = useAppStore();
22
19
  const feedbackStore = useFeedbackStore();
23
- return fetchSchema(
20
+ const result = await fetchSchema(
24
21
  { schema, params },
25
22
  {
26
23
  request_error_function: () => {
27
24
  feedbackStore.$patch({ server_error: true });
28
25
  this.status = Status.NOT_CONNECTED;
29
26
  },
30
- response_function: (response) => {
27
+ response_function: async (response: unknown) => {
28
+ if (
29
+ typeof response !== "object" ||
30
+ response === null ||
31
+ !("url" in response) ||
32
+ typeof response.url !== "string"
33
+ ) {
34
+ return;
35
+ }
36
+ const { url } = response;
31
37
  feedbackStore.$patch({ server_error: false });
32
- console.log(`[CLOUD] Cloud launched on ${response.url}`);
33
38
  this.status = Status.CONNECTED;
39
+ const { useInfraStore } = await import("./infra");
34
40
  const infraStore = useInfraStore();
35
41
  infraStore.$patch({
36
- domain_name: response.url,
42
+ domain_name: url,
37
43
  });
38
- setAppBaseUrl(appStore.base_url);
44
+ setAppBaseUrl(appStore.base_url).catch(() => undefined);
39
45
  appStore.$patch({
40
46
  projectFolderPath: "/project",
41
47
  });
@@ -46,11 +52,10 @@ export const useCloudStore = defineStore("cloud", {
46
52
  },
47
53
  },
48
54
  );
55
+ return result;
49
56
  },
50
57
  connect() {
51
- console.log("[CLOUD] Cloud connected");
52
58
  this.status = Status.CONNECTED;
53
- return Promise.resolve();
54
59
  },
55
60
  },
56
61
  share: {