@geode/opengeodeweb-front 10.6.2 → 10.6.3-rc.1

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 (235) hide show
  1. package/.eslintrc.cjs +1 -1
  2. package/.oxlintrc.json +3 -22
  3. package/app/assets/geode_objects.js +26 -26
  4. package/app/components/Carousel.vue +62 -66
  5. package/app/components/CrsSelector.vue +48 -52
  6. package/app/components/DeleteDialog.vue +21 -37
  7. package/app/components/DragAndDrop.vue +35 -41
  8. package/app/components/ExtensionSelector.vue +50 -63
  9. package/app/components/FeedBack/ErrorBanner.vue +7 -10
  10. package/app/components/FeedBack/Snackers.vue +12 -14
  11. package/app/components/FetchingData.vue +1 -6
  12. package/app/components/FileSelector.vue +41 -47
  13. package/app/components/FileUploader.vue +62 -79
  14. package/app/components/GlassCard.vue +19 -19
  15. package/app/components/HybridRenderingView.vue +37 -38
  16. package/app/components/InfraConnected.vue +3 -3
  17. package/app/components/Inspector/InspectionButton.vue +27 -31
  18. package/app/components/Inspector/ResultPanel.vue +13 -24
  19. package/app/components/Launcher.vue +13 -13
  20. package/app/components/Loading.vue +63 -69
  21. package/app/components/MissingFilesSelector.vue +53 -73
  22. package/app/components/ObjectSelector.vue +81 -99
  23. package/app/components/PackagesVersions.vue +27 -30
  24. package/app/components/Recaptcha.vue +60 -71
  25. package/app/components/RemoteRenderingView.vue +102 -108
  26. package/app/components/Screenshot.vue +36 -42
  27. package/app/components/SearchBar.vue +5 -5
  28. package/app/components/Step.vue +37 -44
  29. package/app/components/Stepper.vue +29 -35
  30. package/app/components/VeaseViewToolbar.vue +69 -78
  31. package/app/components/ViewToolbar.vue +41 -45
  32. package/app/components/Viewer/BreadCrumb.vue +18 -30
  33. package/app/components/Viewer/ContextMenu.vue +176 -179
  34. package/app/components/Viewer/ContextMenuItem.vue +105 -117
  35. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +6 -9
  36. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +82 -93
  37. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +84 -99
  38. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +83 -98
  39. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +62 -73
  40. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +84 -108
  41. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +82 -105
  42. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +19 -23
  43. package/app/components/Viewer/Generic/Model/PointsOptions.vue +26 -30
  44. package/app/components/Viewer/Grid/2D/CellsOptions.vue +5 -5
  45. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +6 -9
  46. package/app/components/Viewer/Grid/2D/PointsOptions.vue +6 -9
  47. package/app/components/Viewer/Grid/3D/CellsOptions.vue +5 -5
  48. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +6 -9
  49. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +5 -5
  50. package/app/components/Viewer/Grid/3D/PointsOptions.vue +6 -9
  51. package/app/components/Viewer/HybridSolid/EdgesOptions.vue +6 -9
  52. package/app/components/Viewer/HybridSolid/PointsOptions.vue +6 -9
  53. package/app/components/Viewer/HybridSolid/PolygonsOptions.vue +6 -9
  54. package/app/components/Viewer/HybridSolid/PolyhedraOptions.vue +6 -9
  55. package/app/components/Viewer/Options/AttributeColorBar.vue +8 -8
  56. package/app/components/Viewer/Options/AttributeSelector.vue +73 -78
  57. package/app/components/Viewer/Options/ColorMapList.vue +115 -140
  58. package/app/components/Viewer/Options/ColorMapPicker.vue +128 -142
  59. package/app/components/Viewer/Options/ColorPicker.vue +9 -9
  60. package/app/components/Viewer/Options/ColoringTypeSelector.vue +77 -91
  61. package/app/components/Viewer/Options/TextureItem.vue +54 -58
  62. package/app/components/Viewer/Options/TexturesSelector.vue +22 -26
  63. package/app/components/Viewer/Options/VisibilitySwitch.vue +1 -1
  64. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +61 -68
  65. package/app/components/Viewer/PolygonalSurface/EdgesOptions.vue +6 -9
  66. package/app/components/Viewer/PolygonalSurface/PointsOptions.vue +6 -9
  67. package/app/components/Viewer/PolygonalSurface/SpecificPolygonsOptions.vue +83 -103
  68. package/app/components/Viewer/Solid/EdgesOptions.vue +6 -9
  69. package/app/components/Viewer/Solid/PointsOptions.vue +6 -9
  70. package/app/components/Viewer/Solid/PolygonsOptions.vue +6 -9
  71. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +82 -105
  72. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +5 -5
  73. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +5 -5
  74. package/app/components/Viewer/Tree/ObjectTree.vue +80 -89
  75. package/app/components/Viewer/TreeComponent.vue +43 -49
  76. package/app/components/Viewer/TreeObject.vue +48 -50
  77. package/app/components/Viewer/TriangulatedSurface/EdgesOptions.vue +6 -9
  78. package/app/components/Viewer/TriangulatedSurface/PointsOptions.vue +5 -5
  79. package/app/components/Viewer/TriangulatedSurface/TrianglesOptions.vue +5 -5
  80. package/app/components/Wrapper.vue +8 -8
  81. package/app/components/ZScaling.vue +18 -27
  82. package/app/composables/project_manager.js +57 -67
  83. package/app/composables/run_function_when_microservices_connected.js +8 -8
  84. package/app/plugins/auto_store_register.js +11 -13
  85. package/app/stores/app.js +118 -138
  86. package/app/stores/data.js +52 -68
  87. package/app/stores/data_style.js +36 -36
  88. package/app/stores/feedback.js +17 -20
  89. package/app/stores/geode.js +54 -55
  90. package/app/stores/hybrid_viewer.js +164 -177
  91. package/app/stores/infra.js +45 -55
  92. package/app/stores/lambda.js +26 -26
  93. package/app/stores/menu.js +78 -85
  94. package/app/stores/treeview.js +57 -65
  95. package/app/stores/viewer.js +92 -104
  96. package/app/utils/colormap.js +3 -3
  97. package/app/utils/config.js +16 -22
  98. package/app/utils/default_styles.js +50 -62
  99. package/app/utils/extension.js +44 -44
  100. package/app/utils/file_import_workflow.js +50 -64
  101. package/app/utils/local/app_mode.js +2 -2
  102. package/app/utils/local/cleanup.js +66 -72
  103. package/app/utils/local/microservices.js +61 -71
  104. package/app/utils/local/path.js +16 -19
  105. package/app/utils/local/scripts.js +22 -22
  106. package/app/utils/recaptcha.js +6 -6
  107. package/app/utils/server.js +21 -24
  108. package/app/utils/status.js +2 -2
  109. package/app/utils/treeview.js +4 -4
  110. package/app/utils/validate_schema.js +7 -7
  111. package/commitlint.config.js +2 -2
  112. package/eslint.config.js +4 -4
  113. package/internal/database/database.js +38 -46
  114. package/internal/database/extended_database.js +9 -10
  115. package/internal/database/tables/data.js +2 -3
  116. package/internal/database/tables/model_components.js +1 -1
  117. package/internal/database/tables/model_components_relation.js +1 -1
  118. package/internal/stores/data_style/mesh/cells/cell.js +47 -63
  119. package/internal/stores/data_style/mesh/cells/color.js +11 -16
  120. package/internal/stores/data_style/mesh/cells/common.js +6 -6
  121. package/internal/stores/data_style/mesh/cells/index.js +37 -47
  122. package/internal/stores/data_style/mesh/cells/textures.js +11 -12
  123. package/internal/stores/data_style/mesh/cells/vertex.js +47 -58
  124. package/internal/stores/data_style/mesh/cells/visibility.js +11 -16
  125. package/internal/stores/data_style/mesh/edges/color.js +11 -16
  126. package/internal/stores/data_style/mesh/edges/common.js +6 -6
  127. package/internal/stores/data_style/mesh/edges/edge.js +47 -63
  128. package/internal/stores/data_style/mesh/edges/index.js +38 -52
  129. package/internal/stores/data_style/mesh/edges/vertex.js +47 -58
  130. package/internal/stores/data_style/mesh/edges/visibility.js +11 -16
  131. package/internal/stores/data_style/mesh/edges/width.js +11 -16
  132. package/internal/stores/data_style/mesh/index.js +34 -34
  133. package/internal/stores/data_style/mesh/points/color.js +11 -16
  134. package/internal/stores/data_style/mesh/points/common.js +6 -6
  135. package/internal/stores/data_style/mesh/points/index.js +35 -49
  136. package/internal/stores/data_style/mesh/points/size.js +11 -16
  137. package/internal/stores/data_style/mesh/points/vertex.js +47 -58
  138. package/internal/stores/data_style/mesh/points/visibility.js +11 -16
  139. package/internal/stores/data_style/mesh/polygons/color.js +11 -16
  140. package/internal/stores/data_style/mesh/polygons/common.js +6 -6
  141. package/internal/stores/data_style/mesh/polygons/index.js +36 -45
  142. package/internal/stores/data_style/mesh/polygons/polygon.js +45 -56
  143. package/internal/stores/data_style/mesh/polygons/textures.js +11 -16
  144. package/internal/stores/data_style/mesh/polygons/vertex.js +47 -58
  145. package/internal/stores/data_style/mesh/polygons/visibility.js +11 -16
  146. package/internal/stores/data_style/mesh/polyhedra/color.js +11 -16
  147. package/internal/stores/data_style/mesh/polyhedra/common.js +6 -6
  148. package/internal/stores/data_style/mesh/polyhedra/index.js +29 -42
  149. package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +43 -47
  150. package/internal/stores/data_style/mesh/polyhedra/vertex.js +47 -58
  151. package/internal/stores/data_style/mesh/polyhedra/visibility.js +11 -17
  152. package/internal/stores/data_style/model/blocks/color.js +21 -24
  153. package/internal/stores/data_style/model/blocks/common.js +6 -6
  154. package/internal/stores/data_style/model/blocks/index.js +13 -17
  155. package/internal/stores/data_style/model/blocks/visibility.js +21 -24
  156. package/internal/stores/data_style/model/corners/color.js +21 -24
  157. package/internal/stores/data_style/model/corners/common.js +6 -6
  158. package/internal/stores/data_style/model/corners/index.js +14 -18
  159. package/internal/stores/data_style/model/corners/visibility.js +21 -25
  160. package/internal/stores/data_style/model/edges/common.js +4 -4
  161. package/internal/stores/data_style/model/edges/index.js +7 -7
  162. package/internal/stores/data_style/model/edges/visibility.js +11 -15
  163. package/internal/stores/data_style/model/index.js +84 -100
  164. package/internal/stores/data_style/model/lines/color.js +21 -24
  165. package/internal/stores/data_style/model/lines/common.js +6 -6
  166. package/internal/stores/data_style/model/lines/index.js +13 -17
  167. package/internal/stores/data_style/model/lines/visibility.js +21 -24
  168. package/internal/stores/data_style/model/points/common.js +4 -4
  169. package/internal/stores/data_style/model/points/index.js +9 -9
  170. package/internal/stores/data_style/model/points/size.js +11 -11
  171. package/internal/stores/data_style/model/points/visibility.js +11 -15
  172. package/internal/stores/data_style/model/surfaces/color.js +21 -24
  173. package/internal/stores/data_style/model/surfaces/common.js +6 -6
  174. package/internal/stores/data_style/model/surfaces/index.js +14 -22
  175. package/internal/stores/data_style/model/surfaces/visibility.js +18 -22
  176. package/internal/stores/data_style/state.js +11 -11
  177. package/internal/utils/api_fetch.js +24 -34
  178. package/internal/utils/upload_file.js +19 -24
  179. package/internal/utils/viewer_call.js +23 -36
  180. package/nuxt.config.js +7 -11
  181. package/package.json +3 -3
  182. package/scripts/generate_geode_objects.js +14 -16
  183. package/server/api/app/kill.post.js +4 -4
  184. package/server/api/app/project_folder_path.post.js +11 -11
  185. package/server/api/app/run_back.post.js +12 -12
  186. package/server/api/app/run_viewer.post.js +12 -12
  187. package/server/api/extensions/run.post.js +34 -41
  188. package/server/api/extensions/upload.put.js +48 -62
  189. package/tests/integration/setup.js +43 -53
  190. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +90 -116
  191. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +81 -107
  192. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +38 -41
  193. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +85 -101
  194. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +89 -113
  195. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +81 -105
  196. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +56 -73
  197. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +59 -76
  198. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +39 -42
  199. package/tests/integration/stores/data_style/model/index.nuxt.test.js +31 -34
  200. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +60 -73
  201. package/tests/integration/stores/data_style/model/points.nuxt.test.js +52 -55
  202. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +59 -80
  203. package/tests/integration/stores/viewer.nuxt.test.js +35 -38
  204. package/tests/setup_indexeddb.js +2 -2
  205. package/tests/unit/components/CrsSelector.nuxt.test.js +28 -28
  206. package/tests/unit/components/ExtensionSelector.nuxt.test.js +33 -35
  207. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +23 -23
  208. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +18 -18
  209. package/tests/unit/components/FileSelector.nuxt.test.js +57 -59
  210. package/tests/unit/components/FileUploader.nuxt.test.js +35 -39
  211. package/tests/unit/components/Inspector/InspectionButton.nuxt.test.js +28 -28
  212. package/tests/unit/components/Inspector/ResultPanel.nuxt.test.js +22 -27
  213. package/tests/unit/components/Launcher.nuxt.test.js +20 -22
  214. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +37 -37
  215. package/tests/unit/components/ObjectSelector.nuxt.test.js +62 -62
  216. package/tests/unit/components/PackagesVersions.nuxt.test.js +16 -16
  217. package/tests/unit/components/Step.nuxt.test.js +18 -19
  218. package/tests/unit/components/Stepper.nuxt.test.js +18 -18
  219. package/tests/unit/composables/api_fetch.nuxt.test.js +34 -36
  220. package/tests/unit/composables/project_manager.nuxt.test.js +93 -112
  221. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +36 -36
  222. package/tests/unit/composables/upload_file.nuxt.test.js +27 -29
  223. package/tests/unit/plugins/project_load.nuxt.test.js +31 -33
  224. package/tests/unit/stores/app.nuxt.test.js +90 -92
  225. package/tests/unit/stores/feedback.nuxt.test.js +47 -57
  226. package/tests/unit/stores/geode.nuxt.test.js +111 -115
  227. package/tests/unit/stores/infra.nuxt.test.js +148 -148
  228. package/tests/unit/stores/lambda.nuxt.test.js +72 -74
  229. package/tests/unit/stores/treeview.nuxt.test.js +19 -21
  230. package/tests/unit/stores/viewer.nuxt.test.js +109 -122
  231. package/tests/unit/utils/recaptcha.nuxt.test.js +25 -29
  232. package/tests/unit/utils/validate_schema.nuxt.test.js +17 -17
  233. package/tests/utils.js +11 -11
  234. package/tests/vitest.config.js +9 -9
  235. package/vuetify_config.js +2 -2
@@ -1,110 +1,100 @@
1
- import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json"
2
- import fileDownload from "js-file-download"
3
- import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json"
1
+ import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json";
2
+ import fileDownload from "js-file-download";
3
+ import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
4
4
 
5
- import { importWorkflowFromSnapshot } from "@ogw_front/utils/file_import_workflow"
5
+ import { importWorkflowFromSnapshot } from "@ogw_front/utils/file_import_workflow";
6
6
 
7
- import { useAppStore } from "@ogw_front/stores/app"
8
- import { useDataStore } from "@ogw_front/stores/data"
9
- import { useDataStyleStore } from "@ogw_front/stores/data_style"
10
- import { useGeodeStore } from "@ogw_front/stores/geode"
11
- import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer"
12
- import { useTreeviewStore } from "@ogw_front/stores/treeview"
13
- import { useViewerStore } from "@ogw_front/stores/viewer"
7
+ import { useAppStore } from "@ogw_front/stores/app";
8
+ import { useDataStore } from "@ogw_front/stores/data";
9
+ import { useDataStyleStore } from "@ogw_front/stores/data_style";
10
+ import { useGeodeStore } from "@ogw_front/stores/geode";
11
+ import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
12
+ import { useTreeviewStore } from "@ogw_front/stores/treeview";
13
+ import { useViewerStore } from "@ogw_front/stores/viewer";
14
14
 
15
15
  export function useProjectManager() {
16
16
  async function exportProject() {
17
- console.log("[export triggered]")
18
- const appStore = useAppStore()
19
- const geodeStore = useGeodeStore()
20
- const snapshot = await appStore.exportStores()
21
- const schema = back_schemas.opengeodeweb_back.export_project
22
- const defaultName = "project.vease"
17
+ console.log("[export triggered]");
18
+ const appStore = useAppStore();
19
+ const geodeStore = useGeodeStore();
20
+ const snapshot = await appStore.exportStores();
21
+ const schema = back_schemas.opengeodeweb_back.export_project;
22
+ const defaultName = "project.vease";
23
23
 
24
24
  const result = await $fetch(schema.$id, {
25
25
  baseURL: geodeStore.base_url,
26
26
  method: schema.methods.find((method) => method !== "OPTIONS"),
27
27
  body: { snapshot, filename: defaultName },
28
- })
29
- fileDownload(result, defaultName)
30
- return { result }
28
+ });
29
+ fileDownload(result, defaultName);
30
+ return { result };
31
31
  }
32
32
 
33
33
  async function importProjectFile(file) {
34
- const geodeStore = useGeodeStore()
35
- const dataStyleStore = useDataStyleStore()
36
- const viewerStore = useViewerStore()
37
- const dataStore = useDataStore()
38
- const treeviewStore = useTreeviewStore()
39
- const hybridViewerStore = useHybridViewerStore()
34
+ const geodeStore = useGeodeStore();
35
+ const dataStyleStore = useDataStyleStore();
36
+ const viewerStore = useViewerStore();
37
+ const dataStore = useDataStore();
38
+ const treeviewStore = useTreeviewStore();
39
+ const hybridViewerStore = useHybridViewerStore();
40
40
 
41
- await viewerStore.ws_connect()
41
+ await viewerStore.ws_connect();
42
42
 
43
- const { client } = viewerStore
43
+ const { client } = viewerStore;
44
44
  if (client && client.getConnection && client.getConnection().getSession) {
45
- await client
46
- .getConnection()
47
- .getSession()
48
- .call("opengeodeweb_viewer.release_database", [{}])
45
+ await client.getConnection().getSession().call("opengeodeweb_viewer.release_database", [{}]);
49
46
  }
50
47
 
51
48
  await viewerStore.request(
52
49
  viewer_schemas.opengeodeweb_viewer.viewer.reset_visualization,
53
50
  {},
54
51
  undefined,
55
- )
52
+ );
56
53
 
57
- treeviewStore.clear()
58
- dataStore.clear()
59
- hybridViewerStore.clear()
54
+ treeviewStore.clear();
55
+ dataStore.clear();
56
+ hybridViewerStore.clear();
60
57
 
61
- const schemaImport = back_schemas.opengeodeweb_back.import_project
62
- const form = new FormData()
63
- const originalFileName = file && file.name ? file.name : "project.vease"
58
+ const schemaImport = back_schemas.opengeodeweb_back.import_project;
59
+ const form = new FormData();
60
+ const originalFileName = file && file.name ? file.name : "project.vease";
64
61
  if (!originalFileName.toLowerCase().endsWith(".vease")) {
65
- throw new Error("Uploaded file must be a .vease")
62
+ throw new Error("Uploaded file must be a .vease");
66
63
  }
67
- form.append("file", file, originalFileName)
64
+ form.append("file", file, originalFileName);
68
65
 
69
66
  const result = await $fetch(schemaImport.$id, {
70
67
  baseURL: geodeStore.base_url,
71
68
  method: "POST",
72
69
  body: form,
73
- })
74
- const snapshot = result && result.snapshot ? result.snapshot : {}
75
-
76
- treeviewStore.isImporting = true
77
-
78
- const { client: client2 } = viewerStore
79
- if (
80
- client2 &&
81
- client2.getConnection &&
82
- client2.getConnection().getSession
83
- ) {
84
- await client2
85
- .getConnection()
86
- .getSession()
87
- .call("opengeodeweb_viewer.import_project", [{}])
70
+ });
71
+ const snapshot = result && result.snapshot ? result.snapshot : {};
72
+
73
+ treeviewStore.isImporting = true;
74
+
75
+ const { client: client2 } = viewerStore;
76
+ if (client2 && client2.getConnection && client2.getConnection().getSession) {
77
+ await client2.getConnection().getSession().call("opengeodeweb_viewer.import_project", [{}]);
88
78
  }
89
79
 
90
- await treeviewStore.importStores(snapshot.treeview || {})
91
- await hybridViewerStore.initHybridViewer()
92
- await hybridViewerStore.importStores(snapshot.hybridViewer || {})
80
+ await treeviewStore.importStores(snapshot.treeview || {});
81
+ await hybridViewerStore.initHybridViewer();
82
+ await hybridViewerStore.importStores(snapshot.hybridViewer || {});
93
83
 
94
- const items = snapshot?.data?.items || []
84
+ const items = snapshot?.data?.items || [];
95
85
 
96
- await importWorkflowFromSnapshot(items)
97
- await hybridViewerStore.importStores(snapshot.hybridViewer || {})
86
+ await importWorkflowFromSnapshot(items);
87
+ await hybridViewerStore.importStores(snapshot.hybridViewer || {});
98
88
  {
99
- await dataStyleStore.importStores(snapshot.dataStyle || {})
89
+ await dataStyleStore.importStores(snapshot.dataStyle || {});
100
90
  }
101
91
  {
102
- await dataStyleStore.applyAllStylesFromState()
92
+ await dataStyleStore.applyAllStylesFromState();
103
93
  }
104
94
 
105
- treeviewStore.finalizeImportSelection()
106
- treeviewStore.isImporting = false
95
+ treeviewStore.finalizeImportSelection();
96
+ treeviewStore.isImporting = false;
107
97
  }
108
98
 
109
- return { exportProject, importProjectFile }
99
+ return { exportProject, importProjectFile };
110
100
  }
@@ -1,16 +1,16 @@
1
- import { useInfraStore } from "@ogw_front/stores/infra"
1
+ import { useInfraStore } from "@ogw_front/stores/infra";
2
2
  export function run_function_when_microservices_connected(function_to_run) {
3
- const infraStore = useInfraStore()
4
- const { microservices_connected } = storeToRefs(infraStore)
5
- console.log("inside microservices_connected", microservices_connected.value)
3
+ const infraStore = useInfraStore();
4
+ const { microservices_connected } = storeToRefs(infraStore);
5
+ console.log("inside microservices_connected", microservices_connected.value);
6
6
  if (microservices_connected.value) {
7
- function_to_run()
7
+ function_to_run();
8
8
  } else {
9
9
  watch(microservices_connected, (value) => {
10
10
  if (value) {
11
- console.log("watch microservices_connected", value)
12
- function_to_run()
11
+ console.log("watch microservices_connected", value);
12
+ function_to_run();
13
13
  }
14
- })
14
+ });
15
15
  }
16
16
  }
@@ -1,28 +1,26 @@
1
- import { useAppStore } from "@ogw_front/stores/app"
1
+ import { useAppStore } from "@ogw_front/stores/app";
2
2
 
3
3
  function autoStoreRegister({ store }) {
4
4
  if (store.$id === "app") {
5
- return
5
+ return;
6
6
  }
7
7
 
8
- const appStore = useAppStore()
9
- appStore.registerStore(store)
10
- console.log(`[AutoRegister] Store "${store.$id}" processed`)
8
+ const appStore = useAppStore();
9
+ appStore.registerStore(store);
10
+ console.log(`[AutoRegister] Store "${store.$id}" processed`);
11
11
  }
12
12
 
13
13
  export default defineNuxtPlugin({
14
14
  name: "auto-store-register",
15
15
  dependsOn: ["pinia"],
16
16
  setup(nuxtApp) {
17
- const { $pinia } = nuxtApp
17
+ const { $pinia } = nuxtApp;
18
18
  if (!$pinia) {
19
- console.warn("Pinia instance not available.")
20
- return
19
+ console.warn("Pinia instance not available.");
20
+ return;
21
21
  }
22
22
 
23
- $pinia.use(autoStoreRegister)
24
- console.log(
25
- "[AUTOREGISTER PLUGIN] Loaded automatically from OpenGeodeWeb-Front",
26
- )
23
+ $pinia.use(autoStoreRegister);
24
+ console.log("[AUTOREGISTER PLUGIN] Loaded automatically from OpenGeodeWeb-Front");
27
25
  },
28
- })
26
+ });
package/app/stores/app.js CHANGED
@@ -1,269 +1,249 @@
1
- import { api_fetch } from "@ogw_internal/utils/api_fetch.js"
2
- import { upload_file } from "@ogw_internal/utils/upload_file.js"
1
+ import { api_fetch } from "@ogw_internal/utils/api_fetch.js";
2
+ import { upload_file } from "@ogw_internal/utils/upload_file.js";
3
3
 
4
4
  export const useAppStore = defineStore("app", () => {
5
- const stores = []
5
+ const stores = [];
6
6
 
7
7
  function registerStore(store) {
8
- const isAlreadyRegistered = stores.some(
9
- (registeredStore) => registeredStore.$id === store.$id,
10
- )
8
+ const isAlreadyRegistered = stores.some((registeredStore) => registeredStore.$id === store.$id);
11
9
  if (isAlreadyRegistered) {
12
- console.log(
13
- `[AppStore] Store "${store.$id}" already registered, skipping`,
14
- )
15
- return
10
+ console.log(`[AppStore] Store "${store.$id}" already registered, skipping`);
11
+ return;
16
12
  }
17
- console.log("[AppStore] Registering store", store.$id)
18
- stores.push(store)
13
+ console.log("[AppStore] Registering store", store.$id);
14
+ stores.push(store);
19
15
  }
20
16
 
21
17
  async function exportStores(params = {}) {
22
- const snapshot = {}
23
- let exportCount = 0
18
+ const snapshot = {};
19
+ let exportCount = 0;
24
20
 
25
- console.log(
26
- `[AppStore] Exporting stores, total registered: ${stores.length}`,
27
- )
21
+ console.log(`[AppStore] Exporting stores, total registered: ${stores.length}`);
28
22
  await Promise.all(
29
23
  stores.map(async (store) => {
30
24
  if (!store.exportStores) {
31
- return
25
+ return;
32
26
  }
33
- const storeId = store.$id
27
+ const storeId = store.$id;
34
28
  try {
35
- snapshot[storeId] = await store.exportStores(params)
36
- exportCount += 1
29
+ snapshot[storeId] = await store.exportStores(params);
30
+ exportCount += 1;
37
31
  } catch (error) {
38
- console.error(`[AppStore] Error exporting store "${storeId}":`, error)
32
+ console.error(`[AppStore] Error exporting store "${storeId}":`, error);
39
33
  }
40
34
  }),
41
- )
42
- console.log(
43
- `[AppStore] Exported ${exportCount} stores; snapshot keys:`,
44
- Object.keys(snapshot),
45
- )
46
- return snapshot
35
+ );
36
+ console.log(`[AppStore] Exported ${exportCount} stores; snapshot keys:`, Object.keys(snapshot));
37
+ return snapshot;
47
38
  }
48
39
 
49
40
  async function importStores(snapshot) {
50
41
  if (!snapshot) {
51
- console.warn("[AppStore] import called with invalid snapshot")
52
- return
42
+ console.warn("[AppStore] import called with invalid snapshot");
43
+ return;
53
44
  }
54
- console.log("[AppStore] Import snapshot keys:", Object.keys(snapshot || {}))
45
+ console.log("[AppStore] Import snapshot keys:", Object.keys(snapshot || {}));
55
46
 
56
- let importedCount = 0
57
- const notFoundStores = []
47
+ let importedCount = 0;
48
+ const notFoundStores = [];
58
49
  await Promise.all(
59
50
  stores.map(async (store) => {
60
51
  if (!store.importStores) {
61
- return
52
+ return;
62
53
  }
63
- const storeId = store.$id
54
+ const storeId = store.$id;
64
55
  if (!snapshot[storeId]) {
65
- notFoundStores.push(storeId)
66
- return
56
+ notFoundStores.push(storeId);
57
+ return;
67
58
  }
68
59
  try {
69
- await store.importStores(snapshot[storeId])
70
- importedCount += 1
60
+ await store.importStores(snapshot[storeId]);
61
+ importedCount += 1;
71
62
  } catch (error) {
72
- console.error(`[AppStore] Error importing store "${storeId}":`, error)
63
+ console.error(`[AppStore] Error importing store "${storeId}":`, error);
73
64
  }
74
65
  }),
75
- )
66
+ );
76
67
  if (notFoundStores.length > 0) {
77
- console.warn(
78
- `[AppStore] Stores not found in snapshot: ${notFoundStores.join(", ")}`,
79
- )
68
+ console.warn(`[AppStore] Stores not found in snapshot: ${notFoundStores.join(", ")}`);
80
69
  }
81
- console.log(`[AppStore] Imported ${importedCount} stores`)
70
+ console.log(`[AppStore] Imported ${importedCount} stores`);
82
71
  }
83
72
 
84
- const loadedExtensions = ref(new Map())
85
- const extensionAPI = ref(undefined)
86
- const codeTransformer = ref(undefined)
73
+ const loadedExtensions = ref(new Map());
74
+ const extensionAPI = ref(undefined);
75
+ const codeTransformer = ref(undefined);
87
76
 
88
77
  function setExtensionAPI(api) {
89
- extensionAPI.value = api
78
+ extensionAPI.value = api;
90
79
  }
91
80
 
92
81
  function setCodeTransformer(transformer) {
93
- codeTransformer.value = transformer
82
+ codeTransformer.value = transformer;
94
83
  }
95
84
 
96
85
  function getExtension(id) {
97
- return loadedExtensions.value.get(id)
86
+ return loadedExtensions.value.get(id);
98
87
  }
99
88
 
100
89
  async function loadExtension(path, backendPath = undefined) {
101
90
  try {
102
- let finalURL = path
91
+ let finalURL = path;
103
92
 
104
93
  if (codeTransformer.value && path.startsWith("blob:")) {
105
- const response = await fetch(path)
106
- const code = await response.text()
107
- const transformedCode = codeTransformer.value(code)
94
+ const response = await fetch(path);
95
+ const code = await response.text();
96
+ const transformedCode = codeTransformer.value(code);
108
97
 
109
98
  const newBlob = new Blob([transformedCode], {
110
99
  type: "application/javascript",
111
- })
112
- finalURL = URL.createObjectURL(newBlob)
100
+ });
101
+ finalURL = URL.createObjectURL(newBlob);
113
102
  }
114
- const extensionModule = await import(/* @vite-ignore */ finalURL)
103
+ // oxlint-disable-next-line no-inline-comments
104
+ const extensionModule = await import(/* @vite-ignore */ finalURL);
115
105
 
116
106
  if (finalURL !== path && finalURL.startsWith("blob:")) {
117
- URL.revokeObjectURL(finalURL)
107
+ URL.revokeObjectURL(finalURL);
118
108
  }
119
109
 
120
110
  if (!extensionModule.metadata?.id) {
121
- throw new Error("Extension must have metadata.id")
111
+ throw new Error("Extension must have metadata.id");
122
112
  }
123
113
 
124
- const extensionId = extensionModule.metadata.id
114
+ const extensionId = extensionModule.metadata.id;
125
115
 
126
116
  if (loadedExtensions.value.has(extensionId)) {
127
- console.warn(`[AppStore] Extension "${extensionId}" is already loaded`)
128
- throw new Error(`Extension "${extensionId}" is already loaded.`)
117
+ console.warn(`[AppStore] Extension "${extensionId}" is already loaded`);
118
+ throw new Error(`Extension "${extensionId}" is already loaded.`);
129
119
  }
130
120
 
131
121
  if (!extensionAPI.value) {
132
- throw new Error("Extension API not initialized")
122
+ throw new Error("Extension API not initialized");
133
123
  }
134
124
 
135
- if (typeof extensionModule.install === "function") {
136
- await extensionModule.install(extensionAPI.value, backendPath)
137
-
138
- const extensionData = {
139
- module: extensionModule,
140
- id: extensionId,
141
- path,
142
- backendPath,
143
- loadedAt: new Date().toISOString(),
144
- metadata: extensionModule.metadata,
145
- enabled: true,
146
- }
147
- loadedExtensions.value.set(extensionId, extensionData)
148
-
149
- console.log(`[AppStore] Extension loaded successfully: ${extensionId}`)
150
- return extensionModule
151
- } else {
152
- throw new Error("Extension must export an install function")
125
+ if (typeof extensionModule.install !== "function") {
126
+ throw new TypeError("Extension must export an install function");
153
127
  }
128
+
129
+ await extensionModule.install(extensionAPI.value, backendPath);
130
+
131
+ const extensionData = {
132
+ module: extensionModule,
133
+ id: extensionId,
134
+ path,
135
+ backendPath,
136
+ loadedAt: new Date().toISOString(),
137
+ metadata: extensionModule.metadata,
138
+ enabled: true,
139
+ };
140
+ loadedExtensions.value.set(extensionId, extensionData);
141
+
142
+ console.log(`[AppStore] Extension loaded successfully: ${extensionId}`);
143
+ return extensionModule;
154
144
  } catch (error) {
155
- console.error(`[AppStore] Failed to load extension from ${path}:`, error)
156
- throw error
145
+ console.error(`[AppStore] Failed to load extension from ${path}:`, error);
146
+ throw error;
157
147
  }
158
148
  }
159
149
 
160
150
  function getLoadedExtensions() {
161
- return [...loadedExtensions.value.values()]
151
+ return [...loadedExtensions.value.values()];
162
152
  }
163
153
 
164
154
  function unloadExtension(id) {
165
- const extensionData = getExtension(id)
155
+ const extensionData = getExtension(id);
166
156
  if (!extensionData) {
167
- return false
157
+ return false;
168
158
  }
169
- if (
170
- extensionData.module &&
171
- typeof extensionData.module.uninstall === "function"
172
- ) {
159
+ if (extensionData.module && typeof extensionData.module.uninstall === "function") {
173
160
  try {
174
- extensionData.module.uninstall(extensionAPI.value)
175
- console.log(`[AppStore] Extension uninstall called: ${id}`)
161
+ extensionData.module.uninstall(extensionAPI.value);
162
+ console.log(`[AppStore] Extension uninstall called: ${id}`);
176
163
  } catch (error) {
177
- console.error(`[AppStore] Error calling uninstall for ${id}:`, error)
164
+ console.error(`[AppStore] Error calling uninstall for ${id}:`, error);
178
165
  }
179
166
  }
180
167
 
181
- if (
182
- extensionAPI.value &&
183
- typeof extensionAPI.value.unregisterToolsByExtension === "function"
184
- ) {
185
- extensionAPI.value.unregisterToolsByExtension(id)
168
+ if (extensionAPI.value && typeof extensionAPI.value.unregisterToolsByExtension === "function") {
169
+ extensionAPI.value.unregisterToolsByExtension(id);
186
170
  }
187
171
 
188
- loadedExtensions.value.delete(id)
189
- console.log(`[AppStore] Extension unloaded: ${id}`)
190
- return true
172
+ loadedExtensions.value.delete(id);
173
+ console.log(`[AppStore] Extension unloaded: ${id}`);
174
+ return true;
191
175
  }
192
176
 
193
177
  function toggleExtension(id) {
194
- const extensionData = getExtension(id)
178
+ const extensionData = getExtension(id);
195
179
  if (!extensionData) {
196
- return false
180
+ return false;
197
181
  }
198
- extensionData.enabled = !extensionData.enabled
199
- console.log(
200
- `[AppStore] Extension ${extensionData.enabled ? "enabled" : "disabled"}: ${id}`,
201
- )
202
- return extensionData.enabled
182
+ extensionData.enabled = !extensionData.enabled;
183
+ console.log(`[AppStore] Extension ${extensionData.enabled ? "enabled" : "disabled"}: ${id}`);
184
+ return extensionData.enabled;
203
185
  }
204
186
 
205
187
  function setExtensionEnabled(id, enabled) {
206
- const extensionData = getExtension(id)
188
+ const extensionData = getExtension(id);
207
189
  if (!extensionData) {
208
- return false
190
+ return false;
209
191
  }
210
- extensionData.enabled = enabled
211
- console.log(
212
- `[AppStore] Extension ${enabled ? "enabled" : "disabled"}: ${id}`,
213
- )
214
- return true
192
+ extensionData.enabled = enabled;
193
+ console.log(`[AppStore] Extension ${enabled ? "enabled" : "disabled"}: ${id}`);
194
+ return true;
215
195
  }
216
196
 
217
197
  function getExtensionEnabled(id) {
218
- return getExtension(id)?.enabled ?? false
198
+ return getExtension(id)?.enabled ?? false;
219
199
  }
220
200
 
221
201
  function upload(file, callbacks = {}) {
222
- const route = "/api/extensions/upload"
223
- const store = useAppStore()
202
+ const route = "/api/extensions/upload";
203
+ const store = useAppStore();
224
204
  return upload_file(
225
205
  store,
226
206
  { route, file },
227
207
  {
228
208
  ...callbacks,
229
209
  response_function: async (response) => {
230
- console.log("[APP] Request completed:", route)
210
+ console.log("[APP] Request completed:", route);
231
211
  if (callbacks.response_function) {
232
- await callbacks.response_function(response)
212
+ await callbacks.response_function(response);
233
213
  }
234
214
  },
235
215
  },
236
- )
216
+ );
237
217
  }
238
218
 
239
219
  function request(schema, params, callbacks = {}) {
240
- console.log("[APP] Request:", schema.$id)
220
+ console.log("[APP] Request:", schema.$id);
241
221
 
242
- const store = useAppStore()
222
+ const store = useAppStore();
243
223
  return api_fetch(
244
224
  store,
245
225
  { schema, params },
246
226
  {
247
227
  ...callbacks,
248
228
  response_function: async (response) => {
249
- console.log("[APP] Request completed:", schema.$id)
229
+ console.log("[APP] Request completed:", schema.$id);
250
230
  if (callbacks.response_function) {
251
- await callbacks.response_function(response)
231
+ await callbacks.response_function(response);
252
232
  }
253
233
  },
254
234
  },
255
- )
235
+ );
256
236
  }
257
237
 
258
- const request_counter = ref(0)
238
+ const request_counter = ref(0);
259
239
  function start_request() {
260
- request_counter.value += 1
240
+ request_counter.value += 1;
261
241
  }
262
242
  function stop_request() {
263
- request_counter.value -= 1
243
+ request_counter.value -= 1;
264
244
  }
265
245
 
266
- const projectFolderPath = ref("")
246
+ const projectFolderPath = ref("");
267
247
  function createProjectFolder() {
268
248
  const schema = {
269
249
  $id: "/api/app/project_folder_path",
@@ -272,18 +252,18 @@ export const useAppStore = defineStore("app", () => {
272
252
  properties: {},
273
253
  required: [],
274
254
  additionalProperties: true,
275
- }
255
+ };
276
256
 
277
257
  return request(
278
258
  schema,
279
259
  {},
280
260
  {
281
- response_function: async (response) => {
282
- console.log(`[APP] ${response.projectFolderPath} created`)
283
- projectFolderPath.value = response.projectFolderPath
261
+ response_function: (response) => {
262
+ console.log(`[APP] ${response.projectFolderPath} created`);
263
+ projectFolderPath.value = response.projectFolderPath;
284
264
  },
285
265
  },
286
- )
266
+ );
287
267
  }
288
268
 
289
269
  return {
@@ -308,5 +288,5 @@ export const useAppStore = defineStore("app", () => {
308
288
  createProjectFolder,
309
289
  start_request,
310
290
  stop_request,
311
- }
312
- })
291
+ };
292
+ });