@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,108 @@
1
+ import { appMode } from "../../shared/app_mode.js";
2
+ import { commandExistsSync } from "./scripts.js";
3
+ import path from "node:path";
4
+ import fs from "node:fs";
5
+ import { setTimeout } from "node:timers/promises";
6
+ import os from "node:os";
7
+ import { v4 } from "uuid";
8
+ //#region server/utils/path.ts
9
+ function executableName(execName) {
10
+ if (process.platform === "win32") return `${execName}.exe`;
11
+ return execName;
12
+ }
13
+ function findExecutableInDir(baseDir, execName, osExecutableName) {
14
+ const oneFilePath = path.join(baseDir, osExecutableName);
15
+ if (fs.existsSync(oneFilePath) && fs.statSync(oneFilePath).isFile()) {
16
+ console.log(`[executablePath] Found OneFile executable: ${oneFilePath}`);
17
+ return oneFilePath;
18
+ }
19
+ const oneDirPath = path.join(baseDir, execName, osExecutableName);
20
+ if (fs.existsSync(oneDirPath) && fs.statSync(oneDirPath).isFile()) {
21
+ console.log(`[executablePath] Found OneDir executable: ${oneDirPath}`);
22
+ return oneDirPath;
23
+ }
24
+ console.log(`[executablePath] Executable not found in ${baseDir} (tried OneFile and OneDir): ${execName}`);
25
+ }
26
+ function executablePath(execPath, execName) {
27
+ const osExecutableName = executableName(execName);
28
+ const resourcesPath = process.env.RESOURCES_PATH;
29
+ const mode = process.env.MODE;
30
+ const nodeEnv = process.env.NODE_ENV;
31
+ console.log("[executablePath]", {
32
+ execPath,
33
+ execName,
34
+ mode,
35
+ nodeEnv,
36
+ resourcesPath
37
+ });
38
+ if (commandExistsSync(osExecutableName)) {
39
+ console.log(`[executablePath] Found executable in PATH: ${osExecutableName}`);
40
+ return osExecutableName;
41
+ }
42
+ const foundAtExecPath = findExecutableInDir(execPath, execName, osExecutableName);
43
+ if (foundAtExecPath !== void 0 && foundAtExecPath !== "") return foundAtExecPath;
44
+ if (mode === appMode.DESKTOP && nodeEnv === "production") {
45
+ if (resourcesPath !== void 0 && resourcesPath !== "") {
46
+ const foundInResources = findExecutableInDir(resourcesPath, execName, osExecutableName);
47
+ if (foundInResources !== void 0 && foundInResources !== "") return foundInResources;
48
+ }
49
+ throw new Error(`Executable not found in execPath (${execPath}) or resourcesPath (${resourcesPath}): ${osExecutableName}`);
50
+ }
51
+ throw new Error(`Executable not found: ${osExecutableName}`);
52
+ }
53
+ function createPath(dirPath) {
54
+ if (!fs.existsSync(dirPath)) {
55
+ fs.mkdirSync(dirPath, { recursive: true });
56
+ console.log(`${dirPath} directory created successfully!`);
57
+ }
58
+ return dirPath;
59
+ }
60
+ function generateProjectFolderPath(projectName) {
61
+ return path.join(os.tmpdir(), projectName.replaceAll("/", "_"), v4());
62
+ }
63
+ function extensionFolderPath(projectFolderPath, extensionId) {
64
+ return path.join(projectFolderPath, "extensions", extensionId);
65
+ }
66
+ async function lookForLocalExtensionDistPath(rootPath, extentionRepoName, frontendFile) {
67
+ const localExtensionPath = path.join(rootPath, "..", extentionRepoName);
68
+ const localExtensionDistPath = path.join(localExtensionPath, "dist");
69
+ if (!fs.existsSync(localExtensionDistPath)) return;
70
+ console.log(`[extensionFrontendPath] Found existing folder: ${localExtensionDistPath}, deleting it...`);
71
+ fs.rmSync(localExtensionDistPath, {
72
+ recursive: true,
73
+ force: true
74
+ });
75
+ const now = /* @__PURE__ */ new Date();
76
+ fs.utimesSync(path.join(localExtensionPath, "package.json"), now, now);
77
+ const rebuiltFilePath = path.join(localExtensionDistPath, frontendFile);
78
+ const MAX_DELETE_FOLDER_RETRIES = 10;
79
+ const MILLISECONDS_PER_RETRY = 1e3;
80
+ for (let i = 0; i <= MAX_DELETE_FOLDER_RETRIES; i += 1) {
81
+ if (fs.existsSync(rebuiltFilePath)) {
82
+ console.log(`Found rebuilt file: ${rebuiltFilePath}`);
83
+ return rebuiltFilePath;
84
+ }
85
+ console.log(`Waiting for rebuild... attempt ${i}/${MAX_DELETE_FOLDER_RETRIES}`);
86
+ await setTimeout(MILLISECONDS_PER_RETRY);
87
+ }
88
+ }
89
+ async function extensionFrontendPath(unzippedExtensionPath, frontendFile, rootPath, extensionId) {
90
+ console.log("[extensionFrontendPath]", {
91
+ unzippedExtensionPath,
92
+ frontendFile,
93
+ rootPath,
94
+ extensionId
95
+ });
96
+ const localFilePath = await lookForLocalExtensionDistPath(rootPath, extensionId.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("-"), frontendFile);
97
+ if (localFilePath !== void 0 && localFilePath !== "") return localFilePath;
98
+ const unzippedfrontendFilePath = path.join(unzippedExtensionPath, frontendFile);
99
+ if (fs.existsSync(unzippedfrontendFilePath)) return unzippedfrontendFilePath;
100
+ throw new Error(`Failed to find ${unzippedfrontendFilePath}`);
101
+ }
102
+ function extensionBackendPath(unzippedExtensionPath, backendExecutableName) {
103
+ const backendExecutablePath = path.join(unzippedExtensionPath, executableName(backendExecutableName));
104
+ console.log("runExtensions", { backendExecutablePath });
105
+ return backendExecutablePath;
106
+ }
107
+ //#endregion
108
+ export { createPath, executableName, executablePath, extensionBackendPath, extensionFolderPath, extensionFrontendPath, generateProjectFolderPath };
@@ -0,0 +1,134 @@
1
+ import { appMode } from "../../shared/app_mode.js";
2
+ import { setAppBaseUrl } from "../../shared/scripts.js";
3
+ import path from "node:path";
4
+ import fs from "node:fs";
5
+ import child_process from "node:child_process";
6
+ import { on } from "node:events";
7
+ import readline from "node:readline";
8
+ import { getPort } from "get-port-please";
9
+ //#region server/utils/scripts.ts
10
+ const MAX_ERROR_BUFFER_BYTES = 65536;
11
+ async function getAvailablePort() {
12
+ return await getPort({
13
+ host: "localhost",
14
+ random: true
15
+ });
16
+ }
17
+ function commandExistsSync(execName) {
18
+ return (process.env.PATH ?? "").split(path.delimiter).some((directory) => {
19
+ const filePath = path.join(directory, execName);
20
+ return fs.existsSync(filePath) && fs.statSync(filePath).isFile();
21
+ });
22
+ }
23
+ const encoder = new TextEncoder();
24
+ function byteLength(str) {
25
+ return encoder.encode(str).byteLength;
26
+ }
27
+ async function waitForReady(child, expectedResponse, signal) {
28
+ return new Promise((resolve, reject) => {
29
+ const readlineStdout = readline.createInterface({ input: child.stdout });
30
+ const readlineStderr = readline.createInterface({ input: child.stderr });
31
+ let recentOutput = "";
32
+ function recordOutput(lineOutput) {
33
+ const safeLine = byteLength(lineOutput) > MAX_ERROR_BUFFER_BYTES / 2 ? `${lineOutput.slice(0, MAX_ERROR_BUFFER_BYTES / 2)}…[truncated]` : lineOutput;
34
+ recentOutput = `${recentOutput} ${safeLine}\n`;
35
+ while (byteLength(recentOutput) > MAX_ERROR_BUFFER_BYTES) {
36
+ const newline = recentOutput.indexOf("\n");
37
+ if (newline === -1) {
38
+ recentOutput = "";
39
+ break;
40
+ }
41
+ recentOutput = recentOutput.slice(newline + 1);
42
+ }
43
+ }
44
+ let onLine = void 0;
45
+ let onErrLine = void 0;
46
+ let onError = void 0;
47
+ let onClose = void 0;
48
+ let onAbort = void 0;
49
+ function cleanup() {
50
+ if (onLine) readlineStdout.removeListener("line", onLine);
51
+ if (onErrLine) readlineStderr.removeListener("line", onErrLine);
52
+ if (onError) child.removeListener("error", onError);
53
+ if (onClose) child.removeListener("close", onClose);
54
+ if (signal && onAbort) signal.removeEventListener("abort", onAbort);
55
+ }
56
+ function becomeReady() {
57
+ cleanup();
58
+ readlineStdout.on("line", (line) => {
59
+ console.log(`[${child.name}] ${line}`);
60
+ });
61
+ readlineStderr.on("line", (line) => {
62
+ console.log(`[${child.name}] ${line}`);
63
+ });
64
+ child.once("close", (code) => {
65
+ console.log(`[${child.name}] exited with code ${code}`);
66
+ });
67
+ resolve(child);
68
+ }
69
+ onLine = (lineOutput) => {
70
+ console.log(`[${child.name}] ${lineOutput}`);
71
+ recordOutput(lineOutput);
72
+ if (lineOutput.includes(expectedResponse)) becomeReady();
73
+ };
74
+ onErrLine = (line) => {
75
+ console.log(`[${child.name}] ${line}`);
76
+ recordOutput(line);
77
+ if (line.includes(expectedResponse)) becomeReady();
78
+ };
79
+ onError = (err) => {
80
+ cleanup();
81
+ reject(err);
82
+ };
83
+ onClose = (code) => {
84
+ console.log(`[${child.name}] exited with code ${code}`);
85
+ cleanup();
86
+ reject(/* @__PURE__ */ new Error(`[${child.name}] exited with code ${code} before becoming ready.${recentOutput ? `\nRecent output:\n${recentOutput}` : ""}`));
87
+ };
88
+ onAbort = () => {
89
+ cleanup();
90
+ reject(/* @__PURE__ */ new Error(`[${child.name}] timed out waiting for "${expectedResponse}"`));
91
+ };
92
+ readlineStdout.on("line", onLine);
93
+ readlineStderr.on("line", onErrLine);
94
+ child.once("error", onError);
95
+ child.once("close", onClose);
96
+ if (signal) signal.addEventListener("abort", onAbort, { once: true });
97
+ });
98
+ }
99
+ async function waitNuxt(nuxtProcess) {
100
+ nuxtProcess.stderr.on("data", (data) => {
101
+ console.log("Nuxt STDERR:", data.toString().trim());
102
+ });
103
+ nuxtProcess.on("close", (code) => {
104
+ console.log(`Nuxt process closed with code ${code}`);
105
+ });
106
+ for await (const [data] of on(nuxtProcess.stdout, "data")) {
107
+ const output = String(data);
108
+ console.log("Nuxt STDOUT:", output.trim());
109
+ const port = /Listening on http:\/\/\[::\]:(?<port>\d+)/u.exec(output)?.groups?.port;
110
+ if (port !== void 0) {
111
+ console.log("Nuxt listening on port", port);
112
+ nuxtProcess.stdout.on("data", (newData) => {
113
+ console.log("Nuxt STDOUT:", newData.toString().trim());
114
+ });
115
+ return port;
116
+ }
117
+ }
118
+ throw new Error("Nuxt process closed");
119
+ }
120
+ async function runBrowser(scriptName) {
121
+ process.env.MODE = appMode.BROWSER;
122
+ const port = await getAvailablePort();
123
+ await waitNuxt(child_process.spawn("npm", ["run", scriptName], {
124
+ shell: true,
125
+ env: {
126
+ ...process.env,
127
+ PORT: String(port)
128
+ }
129
+ }));
130
+ await setAppBaseUrl(`http://localhost:${port}`);
131
+ return port;
132
+ }
133
+ //#endregion
134
+ export { commandExistsSync, getAvailablePort, runBrowser, waitForReady };
@@ -0,0 +1,44 @@
1
+ import path from "node:path";
2
+ import fs from "node:fs";
3
+ import JSZip from "jszip";
4
+ import { extract } from "tar";
5
+ //#region server/utils/server.ts
6
+ const TAR_ARCHIVE_PATTERN = /\.(?<ext>tar\.gz|tgz|tar)$/u;
7
+ async function extractZipArchive(zipFilePath, outputDir) {
8
+ const data = await fs.promises.readFile(zipFilePath);
9
+ const zip = await JSZip.loadAsync(data);
10
+ const promises = [];
11
+ for (const [relativePath, zipEntry] of Object.entries(zip.files)) {
12
+ const outputPath = path.join(outputDir, relativePath);
13
+ if (zipEntry.dir) promises.push((async () => {
14
+ await fs.promises.mkdir(outputPath, { recursive: true });
15
+ })());
16
+ else promises.push((async () => {
17
+ const content = await zipEntry.async("nodebuffer");
18
+ await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });
19
+ await fs.promises.writeFile(outputPath, content);
20
+ })());
21
+ }
22
+ await Promise.all(promises);
23
+ }
24
+ async function extractTarArchive(archivePath, outputDir) {
25
+ await extract({
26
+ file: archivePath,
27
+ cwd: outputDir
28
+ });
29
+ }
30
+ async function unzipFile(zipFilePath, outputDir = zipFilePath.replace(/\.[^/.]+$/u, "")) {
31
+ console.log("Unzipping file...", zipFilePath, outputDir);
32
+ try {
33
+ await fs.promises.mkdir(outputDir, { recursive: true });
34
+ if (TAR_ARCHIVE_PATTERN.test(zipFilePath)) await extractTarArchive(zipFilePath, outputDir);
35
+ else await extractZipArchive(zipFilePath, outputDir);
36
+ console.log("Extraction complete!");
37
+ return outputDir;
38
+ } catch (error) {
39
+ console.error("Error unzipping file:", error);
40
+ throw error;
41
+ }
42
+ }
43
+ //#endregion
44
+ export { unzipFile };
@@ -0,0 +1,51 @@
1
+ import { createServerWsRpcClient } from "./ws_client.js";
2
+ //#region server/utils/server_config.ts
3
+ const stringStorage = /* @__PURE__ */ new Map();
4
+ const booleanStorage = /* @__PURE__ */ new Map();
5
+ const clientStorage = /* @__PURE__ */ new Map();
6
+ function getAppBaseUrl() {
7
+ const value = stringStorage.get("APP_BASE_URL");
8
+ if (value === void 0) throw new Error("APP_BASE_URL is not set");
9
+ return value;
10
+ }
11
+ function setAppBaseUrl(baseUrl) {
12
+ stringStorage.set("APP_BASE_URL", baseUrl);
13
+ }
14
+ function getBackBaseUrl() {
15
+ const value = stringStorage.get("BACK_BASE_URL");
16
+ if (value === void 0) throw new Error("BACK_BASE_URL is not set");
17
+ return value;
18
+ }
19
+ function setBackBaseUrl(baseUrl) {
20
+ stringStorage.set("BACK_BASE_URL", baseUrl);
21
+ }
22
+ function getViewerBaseUrl() {
23
+ const value = stringStorage.get("VIEWER_BASE_URL");
24
+ if (value === void 0) throw new Error("VIEWER_BASE_URL is not set");
25
+ return value;
26
+ }
27
+ function setViewerBaseUrl(baseUrl) {
28
+ stringStorage.set("VIEWER_BASE_URL", baseUrl);
29
+ }
30
+ function getIsAppReady() {
31
+ return booleanStorage.get("IS_APP_READY") ?? false;
32
+ }
33
+ function setIsAppReady(isAppReady) {
34
+ booleanStorage.set("IS_APP_READY", isAppReady);
35
+ }
36
+ async function setViewerWebSocketClient(baseUrl) {
37
+ const client = createServerWsRpcClient(baseUrl);
38
+ client.onConnectionClose(() => {
39
+ if (clientStorage.get("VIEWER_CLIENT") === client) clientStorage.delete("VIEWER_CLIENT");
40
+ });
41
+ await client.ready;
42
+ clientStorage.set("VIEWER_CLIENT", client);
43
+ return client;
44
+ }
45
+ async function getViewerWebSocketClient() {
46
+ const viewerClient = clientStorage.get("VIEWER_CLIENT");
47
+ if (viewerClient !== void 0 && viewerClient.isOpen()) return viewerClient;
48
+ return await setViewerWebSocketClient(getViewerBaseUrl());
49
+ }
50
+ //#endregion
51
+ export { getAppBaseUrl, getBackBaseUrl, getIsAppReady, getViewerBaseUrl, getViewerWebSocketClient, setAppBaseUrl, setBackBaseUrl, setIsAppReady, setViewerBaseUrl, setViewerWebSocketClient };
@@ -0,0 +1,6 @@
1
+ //#region server/utils/stream.ts
2
+ function toNodeWebStream(stream) {
3
+ return stream;
4
+ }
5
+ //#endregion
6
+ export { toNodeWebStream };
@@ -0,0 +1,100 @@
1
+ import { WebSocket } from "ws";
2
+ import { v4 } from "uuid";
3
+ //#region server/utils/ws_client.ts
4
+ const HELLO_ID = "system:hello";
5
+ const HELLO_SECRET = "wslink-secret";
6
+ function isWsRpcMessage(value) {
7
+ return typeof value === "object" && value !== null;
8
+ }
9
+ function rawDataToString(raw) {
10
+ if (Buffer.isBuffer(raw)) return raw.toString();
11
+ if (Array.isArray(raw)) return Buffer.concat(raw).toString();
12
+ return Buffer.from(raw).toString();
13
+ }
14
+ function createServerWsRpcClient(baseUrl) {
15
+ const socket = new WebSocket(baseUrl);
16
+ const pending = /* @__PURE__ */ new Map();
17
+ let onCloseCallback = void 0;
18
+ let onErrorCallback = void 0;
19
+ const ready = new Promise((resolve, reject) => {
20
+ socket.on("open", () => {
21
+ socket.send(JSON.stringify({
22
+ id: HELLO_ID,
23
+ method: "wslink.hello",
24
+ args: [{ secret: HELLO_SECRET }]
25
+ }));
26
+ });
27
+ socket.on("message", (raw) => {
28
+ let message = void 0;
29
+ try {
30
+ const parsed = JSON.parse(rawDataToString(raw));
31
+ if (!isWsRpcMessage(parsed)) return;
32
+ message = parsed;
33
+ } catch {
34
+ return;
35
+ }
36
+ if (message.id === HELLO_ID) {
37
+ resolve();
38
+ return;
39
+ }
40
+ if (typeof message.id === "string" && message.id.startsWith("publish:")) return;
41
+ const entry = message.id === void 0 ? void 0 : pending.get(message.id);
42
+ if (!entry || message.id === void 0) return;
43
+ pending.delete(message.id);
44
+ if (message.error) entry.reject(new Error(message.error.message ?? "wslink RPC error"));
45
+ else entry.resolve(message.result);
46
+ });
47
+ socket.on("error", (error) => {
48
+ onErrorCallback?.(error);
49
+ reject(error);
50
+ });
51
+ socket.on("close", () => {
52
+ onCloseCallback?.();
53
+ for (const { reject: rejectPending } of pending.values()) rejectPending(/* @__PURE__ */ new Error("WebSocket closed"));
54
+ pending.clear();
55
+ });
56
+ });
57
+ async function call(rpc, params = {}) {
58
+ await ready;
59
+ const id = v4();
60
+ return new Promise((resolve, reject) => {
61
+ pending.set(id, {
62
+ resolve,
63
+ reject
64
+ });
65
+ socket.send(JSON.stringify({
66
+ wslink: "1.0",
67
+ id,
68
+ method: rpc,
69
+ args: [params],
70
+ kwargs: { stream: true }
71
+ }));
72
+ });
73
+ }
74
+ function close() {
75
+ socket.close();
76
+ }
77
+ function getConnection() {
78
+ return { getSession: () => ({ call: (rpc, [params]) => call(rpc, params) }) };
79
+ }
80
+ function isOpen() {
81
+ return socket.readyState === WebSocket.OPEN;
82
+ }
83
+ function onConnectionClose(callback) {
84
+ onCloseCallback = callback;
85
+ }
86
+ function onConnectionError(callback) {
87
+ onErrorCallback = callback;
88
+ }
89
+ return {
90
+ call,
91
+ close,
92
+ getConnection,
93
+ isOpen,
94
+ onConnectionClose,
95
+ onConnectionError,
96
+ ready
97
+ };
98
+ }
99
+ //#endregion
100
+ export { createServerWsRpcClient };
@@ -0,0 +1,8 @@
1
+ //#region shared/app_mode.ts
2
+ const appMode = {
3
+ DESKTOP: "DESKTOP",
4
+ BROWSER: "BROWSER",
5
+ CLOUD: "CLOUD"
6
+ };
7
+ //#endregion
8
+ export { appMode };
@@ -0,0 +1,49 @@
1
+ import { fetchSchema } from "./utils/fetch_schema.js";
2
+ import { api } from "../opengeodeweb_front_schemas.js";
3
+ //#region shared/scripts.ts
4
+ async function setAppBaseUrl(appBaseUrl) {
5
+ console.log("[API] setAppBaseUrl", appBaseUrl);
6
+ const schema = api.microservice.app.set_app_base_url;
7
+ return await fetchSchema({
8
+ schema,
9
+ params: { baseUrl: appBaseUrl },
10
+ baseURL: appBaseUrl
11
+ });
12
+ }
13
+ async function setBackBaseUrl(appBaseUrl, backBaseUrl) {
14
+ console.log("[API] setBackBaseUrl", appBaseUrl, backBaseUrl);
15
+ const schema = api.microservice.app.set_back_base_url;
16
+ return await fetchSchema({
17
+ schema,
18
+ params: { baseUrl: backBaseUrl },
19
+ baseURL: appBaseUrl
20
+ });
21
+ }
22
+ async function setViewerBaseUrl(appBaseUrl, viewerBaseUrl) {
23
+ console.log("[API] setViewerBaseUrl", appBaseUrl, viewerBaseUrl);
24
+ const schema = api.microservice.app.set_viewer_base_url;
25
+ return await fetchSchema({
26
+ schema,
27
+ params: { baseUrl: viewerBaseUrl },
28
+ baseURL: appBaseUrl
29
+ });
30
+ }
31
+ async function setIsAppReady(appBaseUrl, isReady) {
32
+ console.log("[API] setIsAppReady", isReady);
33
+ const schema = api.microservice.app.set_is_app_ready;
34
+ return await fetchSchema({
35
+ schema,
36
+ params: { isReady },
37
+ baseURL: appBaseUrl
38
+ });
39
+ }
40
+ async function getIsAppReady(appBaseUrl) {
41
+ console.log("[API] getIsAppReady");
42
+ const schema = api.microservice.app.get_is_app_ready;
43
+ return await fetchSchema({
44
+ schema,
45
+ baseURL: appBaseUrl
46
+ });
47
+ }
48
+ //#endregion
49
+ export { getIsAppReady, setAppBaseUrl, setBackBaseUrl, setIsAppReady, setViewerBaseUrl };
@@ -0,0 +1,31 @@
1
+ import pTimeout from "p-timeout";
2
+ import "lodash";
3
+ //#region shared/utils/call_raw.ts
4
+ async function callClient({ rpc, params = {}, client }) {
5
+ if (globalThis.window !== void 0) return await client.getConnection().getSession().call(rpc, [params]);
6
+ return await client.call(rpc, params);
7
+ }
8
+ async function callRaw({ rpc, params = {}, client, timeout }, { request_error_function, response_function, response_error_function } = {}) {
9
+ async function performCall() {
10
+ try {
11
+ const response = await callClient({
12
+ rpc,
13
+ params,
14
+ client
15
+ });
16
+ if (response_function) await response_function(response);
17
+ return response;
18
+ } catch (error) {
19
+ if (request_error_function) request_error_function(error);
20
+ if (response_error_function) response_error_function(error);
21
+ throw error;
22
+ }
23
+ }
24
+ if (timeout !== void 0 && timeout > 0) return await pTimeout(performCall(), {
25
+ milliseconds: timeout,
26
+ message: `${rpc}: Timed out after ${timeout}ms`
27
+ });
28
+ return await performCall();
29
+ }
30
+ //#endregion
31
+ export { callRaw };
@@ -0,0 +1,28 @@
1
+ import { validateSchema } from "./validate_schema.js";
2
+ import { callRaw } from "./call_raw.js";
3
+ //#region shared/utils/call_schema.ts
4
+ const ERROR_400 = 400;
5
+ async function callSchema({ schema, params = {}, client, timeout }, { request_error_function, response_function, response_error_function, validation_error_function } = {}) {
6
+ const { valid, error: schema_error } = validateSchema(schema, params);
7
+ if (!valid) {
8
+ if (process.env.NODE_ENV !== "production") console.log("Bad request", schema_error, schema, params);
9
+ if (validation_error_function) validation_error_function({
10
+ code: ERROR_400,
11
+ name: "Bad request",
12
+ error: schema_error
13
+ });
14
+ throw new Error(`${schema.$id}: ${schema_error}`);
15
+ }
16
+ return await callRaw({
17
+ rpc: schema.$id,
18
+ params,
19
+ client,
20
+ timeout
21
+ }, {
22
+ request_error_function,
23
+ response_function,
24
+ response_error_function
25
+ });
26
+ }
27
+ //#endregion
28
+ export { callSchema };
@@ -0,0 +1,52 @@
1
+ import { hasBody } from "./file.js";
2
+ import pTimeout from "p-timeout";
3
+ import { $fetch } from "ofetch";
4
+ import _ from "lodash";
5
+ //#region shared/utils/fetch_raw.ts
6
+ function resolveHeaders(headers, expectEvent) {
7
+ const resolvedHeaders = { ...headers };
8
+ if (expectEvent) {
9
+ const value = "text/event-stream";
10
+ if (_.isEmpty(resolvedHeaders)) resolvedHeaders.Accept = value;
11
+ else resolvedHeaders.Accept = `${resolvedHeaders.Accept}, ${value}`;
12
+ }
13
+ return resolvedHeaders;
14
+ }
15
+ async function performFetch({ route, method, params, baseURL, headers, max_retry, request_error_function, response_function, response_error_function }) {
16
+ return await $fetch(route, {
17
+ baseURL,
18
+ method,
19
+ headers,
20
+ ...hasBody(params) ? { body: params } : {},
21
+ ...max_retry === void 0 ? {} : { retry: max_retry },
22
+ async onRequestError({ error }) {
23
+ if (request_error_function) await request_error_function(error);
24
+ },
25
+ async onResponse({ response }) {
26
+ if (response.ok && response_function) await response_function(response._data);
27
+ },
28
+ async onResponseError({ response }) {
29
+ if (response_error_function) await response_error_function(response);
30
+ }
31
+ });
32
+ }
33
+ async function fetchRaw({ route, method, params = {}, baseURL, headers = {}, max_retry, timeout, expectEvent = false }, { request_error_function, response_function, response_error_function } = {}) {
34
+ const fetchOptions = {
35
+ route,
36
+ method,
37
+ params,
38
+ baseURL,
39
+ headers: resolveHeaders(headers, expectEvent),
40
+ max_retry,
41
+ request_error_function,
42
+ response_function,
43
+ response_error_function
44
+ };
45
+ if (timeout !== void 0 && timeout > 0) return await pTimeout(performFetch(fetchOptions), {
46
+ milliseconds: timeout,
47
+ message: `${route}: Timed out after ${timeout}ms`
48
+ });
49
+ return await performFetch(fetchOptions);
50
+ }
51
+ //#endregion
52
+ export { fetchRaw };
@@ -0,0 +1,32 @@
1
+ import { fetchRaw } from "./fetch_raw.js";
2
+ import { validateSchema } from "./validate_schema.js";
3
+ //#region shared/utils/fetch_schema.ts
4
+ const ERROR_400 = 400;
5
+ async function fetchSchema({ schema, params = {}, baseURL, headers, timeout, expectEvent = false }, { request_error_function, response_function, response_error_function, validation_error_function } = {}) {
6
+ const { valid, error: schema_error } = validateSchema(schema, params);
7
+ if (!valid) {
8
+ if (process.env.NODE_ENV !== "production") console.log("Bad request", schema_error, schema, params);
9
+ if (validation_error_function) validation_error_function({
10
+ code: ERROR_400,
11
+ name: "Bad request",
12
+ error: schema_error
13
+ });
14
+ throw new Error(`${schema.$id}: ${schema_error}`);
15
+ }
16
+ return await fetchRaw({
17
+ route: schema.$id,
18
+ method: schema.methods.find((method) => method !== "OPTIONS"),
19
+ params,
20
+ baseURL,
21
+ headers,
22
+ max_retry: schema.max_retry,
23
+ timeout,
24
+ expectEvent
25
+ }, {
26
+ request_error_function,
27
+ response_function,
28
+ response_error_function
29
+ });
30
+ }
31
+ //#endregion
32
+ export { fetchSchema };
@@ -0,0 +1,14 @@
1
+ import _ from "lodash";
2
+ //#region shared/utils/file.ts
3
+ const BYTES_PER_KIBIBYTE = 1024;
4
+ const CHUNK_SIZE_BYTES = 8192 * BYTES_PER_KIBIBYTE;
5
+ function assertFile(file) {
6
+ console.log("[ASSERT_FILE] Asserting file", { file });
7
+ if (!(file instanceof File)) throw new Error("file must be an instance of File");
8
+ }
9
+ function hasBody(params) {
10
+ if (params instanceof FormData || params instanceof Blob) return true;
11
+ return !_.isEmpty(params);
12
+ }
13
+ //#endregion
14
+ export { BYTES_PER_KIBIBYTE, CHUNK_SIZE_BYTES, assertFile, hasBody };