@solidxai/core 0.1.10-beta.21 → 0.1.10-beta.23

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 (476) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CLAUDE.md +18 -0
  3. package/CURRENT_PROMPT +6 -0
  4. package/dist/commands/info.command.d.ts.map +1 -1
  5. package/dist/commands/info.command.js +0 -2
  6. package/dist/commands/info.command.js.map +1 -1
  7. package/dist/controllers/dashboard-user-layout.controller.d.ts +43 -0
  8. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -0
  9. package/dist/controllers/{dashboard-variable.controller.js → dashboard-user-layout.controller.js} +30 -30
  10. package/dist/controllers/dashboard-user-layout.controller.js.map +1 -0
  11. package/dist/controllers/dashboard.controller.d.ts +12 -42
  12. package/dist/controllers/dashboard.controller.d.ts.map +1 -1
  13. package/dist/controllers/dashboard.controller.js +71 -141
  14. package/dist/controllers/dashboard.controller.js.map +1 -1
  15. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts +3 -0
  16. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts.map +1 -0
  17. package/dist/decorators/dashboard-widget-data-provider.decorator.js +8 -0
  18. package/dist/decorators/dashboard-widget-data-provider.decorator.js.map +1 -0
  19. package/dist/dtos/create-dashboard-user-layout.dto.d.ts +10 -0
  20. package/dist/dtos/create-dashboard-user-layout.dto.d.ts.map +1 -0
  21. package/dist/dtos/create-dashboard-user-layout.dto.js +66 -0
  22. package/dist/dtos/create-dashboard-user-layout.dto.js.map +1 -0
  23. package/dist/dtos/dashboard-variable-options-query.dto.d.ts +7 -0
  24. package/dist/dtos/dashboard-variable-options-query.dto.d.ts.map +1 -0
  25. package/dist/dtos/dashboard-variable-options-query.dto.js +40 -0
  26. package/dist/dtos/dashboard-variable-options-query.dto.js.map +1 -0
  27. package/dist/dtos/dashboard-widget-data-request.dto.d.ts +12 -0
  28. package/dist/dtos/dashboard-widget-data-request.dto.d.ts.map +1 -0
  29. package/dist/dtos/dashboard-widget-data-request.dto.js +65 -0
  30. package/dist/dtos/dashboard-widget-data-request.dto.js.map +1 -0
  31. package/dist/dtos/update-dashboard-user-layout.dto.d.ts +11 -0
  32. package/dist/dtos/update-dashboard-user-layout.dto.d.ts.map +1 -0
  33. package/dist/dtos/{update-dashboard-layout.dto.js → update-dashboard-user-layout.dto.js} +34 -16
  34. package/dist/dtos/update-dashboard-user-layout.dto.js.map +1 -0
  35. package/dist/entities/dashboard-user-layout.entity.d.ts +11 -0
  36. package/dist/entities/dashboard-user-layout.entity.d.ts.map +1 -0
  37. package/dist/entities/dashboard-user-layout.entity.js +52 -0
  38. package/dist/entities/dashboard-user-layout.entity.js.map +1 -0
  39. package/dist/helpers/bootstrap.helper.js +1 -1
  40. package/dist/helpers/bootstrap.helper.js.map +1 -1
  41. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  42. package/dist/helpers/module-metadata-helper.service.js +15 -4
  43. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  44. package/dist/helpers/solid-registry.d.ts +5 -9
  45. package/dist/helpers/solid-registry.d.ts.map +1 -1
  46. package/dist/helpers/solid-registry.js +13 -28
  47. package/dist/helpers/solid-registry.js.map +1 -1
  48. package/dist/index.d.ts +21 -5
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +21 -5
  51. package/dist/index.js.map +1 -1
  52. package/dist/interfaces.d.ts +24 -13
  53. package/dist/interfaces.d.ts.map +1 -1
  54. package/dist/interfaces.js.map +1 -1
  55. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +1 -3
  56. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  57. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +2 -25
  58. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  59. package/dist/{repository/dashboard-layout.repository.d.ts → repositories/dashboard-user-layout.repository.d.ts} +5 -5
  60. package/dist/repositories/dashboard-user-layout.repository.d.ts.map +1 -0
  61. package/dist/{repository/dashboard-layout.repository.js → repositories/dashboard-user-layout.repository.js} +15 -10
  62. package/dist/repositories/dashboard-user-layout.repository.js.map +1 -0
  63. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -6
  64. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  65. package/dist/seeders/module-metadata-seeder.service.js +1 -60
  66. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  67. package/dist/seeders/seed-data/solid-core-metadata.json +6236 -6645
  68. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts +13 -0
  69. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts.map +1 -0
  70. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js +55 -0
  71. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js.map +1 -0
  72. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts +13 -0
  73. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts.map +1 -0
  74. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js +52 -0
  75. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js.map +1 -0
  76. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts +13 -0
  77. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts.map +1 -0
  78. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js +52 -0
  79. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js.map +1 -0
  80. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts +10 -0
  81. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -0
  82. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +62 -0
  83. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -0
  84. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts +10 -0
  85. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -0
  86. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +82 -0
  87. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -0
  88. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +17 -0
  89. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -0
  90. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +130 -0
  91. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -0
  92. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts +37 -0
  93. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -0
  94. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +112 -0
  95. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -0
  96. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts +10 -0
  97. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts.map +1 -0
  98. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js +57 -0
  99. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js.map +1 -0
  100. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts +10 -0
  101. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts.map +1 -0
  102. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js +57 -0
  103. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js.map +1 -0
  104. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts +10 -0
  105. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts.map +1 -0
  106. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js +100 -0
  107. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js.map +1 -0
  108. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts +10 -0
  109. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts.map +1 -0
  110. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js +55 -0
  111. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js.map +1 -0
  112. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts +13 -0
  113. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts.map +1 -0
  114. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js +52 -0
  115. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js.map +1 -0
  116. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts +15 -0
  117. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts.map +1 -0
  118. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js +60 -0
  119. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js.map +1 -0
  120. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts +13 -0
  121. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts.map +1 -0
  122. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js +51 -0
  123. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js.map +1 -0
  124. package/dist/services/dashboard-runtime.service.d.ts +31 -0
  125. package/dist/services/dashboard-runtime.service.d.ts.map +1 -0
  126. package/dist/services/dashboard-runtime.service.js +408 -0
  127. package/dist/services/dashboard-runtime.service.js.map +1 -0
  128. package/dist/services/dashboard-user-layout.service.d.ts +12 -0
  129. package/dist/services/dashboard-user-layout.service.d.ts.map +1 -0
  130. package/dist/services/{dashboard-variable.service.js → dashboard-user-layout.service.js} +11 -12
  131. package/dist/services/dashboard-user-layout.service.js.map +1 -0
  132. package/dist/services/module-metadata.service.js +1 -1
  133. package/dist/services/module-metadata.service.js.map +1 -1
  134. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts +11 -0
  135. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -0
  136. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +59 -0
  137. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -0
  138. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts +11 -0
  139. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -0
  140. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +60 -0
  141. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -0
  142. package/dist/services/solid-introspect.service.d.ts +1 -2
  143. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  144. package/dist/services/solid-introspect.service.js +12 -24
  145. package/dist/services/solid-introspect.service.js.map +1 -1
  146. package/dist/solid-core.module.d.ts.map +1 -1
  147. package/dist/solid-core.module.js +43 -66
  148. package/dist/solid-core.module.js.map +1 -1
  149. package/dist/testing/adapters/ui/playwright-adapter.d.ts +1 -0
  150. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  151. package/dist/testing/adapters/ui/playwright-adapter.js +3 -0
  152. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  153. package/dist/testing/steps/ui/index.d.ts.map +1 -1
  154. package/dist/testing/steps/ui/index.js +2 -0
  155. package/dist/testing/steps/ui/index.js.map +1 -1
  156. package/dist/testing/steps/ui/manual.step.d.ts +3 -0
  157. package/dist/testing/steps/ui/manual.step.d.ts.map +1 -0
  158. package/dist/testing/steps/ui/manual.step.js +56 -0
  159. package/dist/testing/steps/ui/manual.step.js.map +1 -0
  160. package/package.json +1 -1
  161. package/src/commands/info.command.ts +0 -2
  162. package/src/controllers/{dashboard-variable.controller.ts → dashboard-user-layout.controller.ts} +10 -10
  163. package/src/controllers/dashboard.controller.ts +70 -89
  164. package/src/decorators/dashboard-widget-data-provider.decorator.ts +6 -0
  165. package/src/dtos/create-dashboard-user-layout.dto.ts +41 -0
  166. package/src/dtos/dashboard-variable-options-query.dto.ts +20 -0
  167. package/src/dtos/dashboard-widget-data-request.dto.ts +34 -0
  168. package/src/dtos/update-dashboard-user-layout.dto.ts +45 -0
  169. package/src/entities/dashboard-user-layout.entity.ts +27 -0
  170. package/src/helpers/bootstrap.helper.ts +1 -1
  171. package/src/helpers/field-crud-managers/field-quality-check-fixes.md +36 -6
  172. package/src/helpers/module-metadata-helper.service.ts +21 -6
  173. package/src/helpers/solid-registry.ts +15 -36
  174. package/src/index.ts +21 -5
  175. package/src/interfaces.ts +32 -19
  176. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -34
  177. package/src/repositories/dashboard-user-layout.repository.ts +19 -0
  178. package/src/seeders/module-metadata-seeder.service.ts +0 -67
  179. package/src/seeders/seed-data/solid-core-metadata.json +6237 -6646
  180. package/src/services/1.js +6 -0
  181. package/src/services/dashboard-providers/README.md +603 -0
  182. package/src/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.ts +49 -0
  183. package/src/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.ts +45 -0
  184. package/src/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.ts +45 -0
  185. package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +58 -0
  186. package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +79 -0
  187. package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +165 -0
  188. package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +155 -0
  189. package/src/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.ts +51 -0
  190. package/src/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.ts +51 -0
  191. package/src/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.ts +95 -0
  192. package/src/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.ts +49 -0
  193. package/src/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.ts +45 -0
  194. package/src/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.ts +55 -0
  195. package/src/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.ts +44 -0
  196. package/src/services/dashboard-runtime.service.ts +488 -0
  197. package/src/services/dashboard-user-layout.service.ts +20 -0
  198. package/src/services/module-metadata.service.ts +1 -1
  199. package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +52 -0
  200. package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +51 -0
  201. package/src/services/solid-introspect.service.ts +19 -34
  202. package/src/solid-core.module.ts +43 -72
  203. package/src/testing/README.md +42 -4
  204. package/src/testing/adapters/ui/playwright-adapter.ts +4 -0
  205. package/src/testing/steps/ui/index.ts +2 -0
  206. package/src/testing/steps/ui/manual.step.ts +80 -0
  207. package/dist/controllers/dashboard-layout.controller.d.ts +0 -47
  208. package/dist/controllers/dashboard-layout.controller.d.ts.map +0 -1
  209. package/dist/controllers/dashboard-layout.controller.js +0 -204
  210. package/dist/controllers/dashboard-layout.controller.js.map +0 -1
  211. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +0 -43
  212. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +0 -1
  213. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +0 -179
  214. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +0 -1
  215. package/dist/controllers/dashboard-question.controller.d.ts +0 -45
  216. package/dist/controllers/dashboard-question.controller.d.ts.map +0 -1
  217. package/dist/controllers/dashboard-question.controller.js +0 -194
  218. package/dist/controllers/dashboard-question.controller.js.map +0 -1
  219. package/dist/controllers/dashboard-variable.controller.d.ts +0 -43
  220. package/dist/controllers/dashboard-variable.controller.d.ts.map +0 -1
  221. package/dist/controllers/dashboard-variable.controller.js.map +0 -1
  222. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +0 -3
  223. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +0 -1
  224. package/dist/decorators/dashboard-question-data-provider.decorator.js +0 -11
  225. package/dist/decorators/dashboard-question-data-provider.decorator.js.map +0 -1
  226. package/dist/decorators/dashboard-selection-provider.decorator.d.ts +0 -3
  227. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +0 -1
  228. package/dist/decorators/dashboard-selection-provider.decorator.js +0 -11
  229. package/dist/decorators/dashboard-selection-provider.decorator.js.map +0 -1
  230. package/dist/dtos/create-dashboard-layout.dto.d.ts +0 -8
  231. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +0 -1
  232. package/dist/dtos/create-dashboard-layout.dto.js +0 -53
  233. package/dist/dtos/create-dashboard-layout.dto.js.map +0 -1
  234. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts +0 -12
  235. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  236. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +0 -77
  237. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  238. package/dist/dtos/create-dashboard-question.dto.d.ts +0 -17
  239. package/dist/dtos/create-dashboard-question.dto.d.ts.map +0 -1
  240. package/dist/dtos/create-dashboard-question.dto.js +0 -105
  241. package/dist/dtos/create-dashboard-question.dto.js.map +0 -1
  242. package/dist/dtos/create-dashboard-variable.dto.d.ts +0 -19
  243. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +0 -1
  244. package/dist/dtos/create-dashboard-variable.dto.js +0 -103
  245. package/dist/dtos/create-dashboard-variable.dto.js.map +0 -1
  246. package/dist/dtos/create-dashboard.dto.d.ts +0 -17
  247. package/dist/dtos/create-dashboard.dto.d.ts.map +0 -1
  248. package/dist/dtos/create-dashboard.dto.js +0 -102
  249. package/dist/dtos/create-dashboard.dto.js.map +0 -1
  250. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +0 -8
  251. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +0 -1
  252. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +0 -52
  253. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +0 -1
  254. package/dist/dtos/update-dashboard-layout.dto.d.ts +0 -8
  255. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +0 -1
  256. package/dist/dtos/update-dashboard-layout.dto.js.map +0 -1
  257. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts +0 -13
  258. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  259. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +0 -86
  260. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  261. package/dist/dtos/update-dashboard-question.dto.d.ts +0 -18
  262. package/dist/dtos/update-dashboard-question.dto.d.ts.map +0 -1
  263. package/dist/dtos/update-dashboard-question.dto.js +0 -112
  264. package/dist/dtos/update-dashboard-question.dto.js.map +0 -1
  265. package/dist/dtos/update-dashboard-variable.dto.d.ts +0 -16
  266. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +0 -1
  267. package/dist/dtos/update-dashboard-variable.dto.js +0 -101
  268. package/dist/dtos/update-dashboard-variable.dto.js.map +0 -1
  269. package/dist/dtos/update-dashboard.dto.d.ts +0 -18
  270. package/dist/dtos/update-dashboard.dto.d.ts.map +0 -1
  271. package/dist/dtos/update-dashboard.dto.js +0 -108
  272. package/dist/dtos/update-dashboard.dto.js.map +0 -1
  273. package/dist/entities/dashboard-layout.entity.d.ts +0 -9
  274. package/dist/entities/dashboard-layout.entity.d.ts.map +0 -1
  275. package/dist/entities/dashboard-layout.entity.js +0 -41
  276. package/dist/entities/dashboard-layout.entity.js.map +0 -1
  277. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +0 -14
  278. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +0 -1
  279. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +0 -66
  280. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +0 -1
  281. package/dist/entities/dashboard-question.entity.d.ts +0 -17
  282. package/dist/entities/dashboard-question.entity.d.ts.map +0 -1
  283. package/dist/entities/dashboard-question.entity.js +0 -77
  284. package/dist/entities/dashboard-question.entity.js.map +0 -1
  285. package/dist/entities/dashboard-variable.entity.d.ts +0 -16
  286. package/dist/entities/dashboard-variable.entity.d.ts.map +0 -1
  287. package/dist/entities/dashboard-variable.entity.js +0 -79
  288. package/dist/entities/dashboard-variable.entity.js.map +0 -1
  289. package/dist/entities/dashboard.entity.d.ts +0 -16
  290. package/dist/entities/dashboard.entity.d.ts.map +0 -1
  291. package/dist/entities/dashboard.entity.js +0 -64
  292. package/dist/entities/dashboard.entity.js.map +0 -1
  293. package/dist/mappers/dashboard-mapper.d.ts +0 -6
  294. package/dist/mappers/dashboard-mapper.d.ts.map +0 -1
  295. package/dist/mappers/dashboard-mapper.js +0 -62
  296. package/dist/mappers/dashboard-mapper.js.map +0 -1
  297. package/dist/repository/dashboard-layout.repository.d.ts.map +0 -1
  298. package/dist/repository/dashboard-layout.repository.js.map +0 -1
  299. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +0 -12
  300. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +0 -1
  301. package/dist/repository/dashboard-question-sql-dataset-config.repository.js +0 -34
  302. package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +0 -1
  303. package/dist/repository/dashboard-question.repository.d.ts +0 -12
  304. package/dist/repository/dashboard-question.repository.d.ts.map +0 -1
  305. package/dist/repository/dashboard-question.repository.js +0 -34
  306. package/dist/repository/dashboard-question.repository.js.map +0 -1
  307. package/dist/repository/dashboard-variable.repository.d.ts +0 -12
  308. package/dist/repository/dashboard-variable.repository.d.ts.map +0 -1
  309. package/dist/repository/dashboard-variable.repository.js +0 -34
  310. package/dist/repository/dashboard-variable.repository.js.map +0 -1
  311. package/dist/repository/dashboard.repository.d.ts +0 -13
  312. package/dist/repository/dashboard.repository.d.ts.map +0 -1
  313. package/dist/repository/dashboard.repository.js +0 -104
  314. package/dist/repository/dashboard.repository.js.map +0 -1
  315. package/dist/services/dashboard-layout.service.d.ts +0 -20
  316. package/dist/services/dashboard-layout.service.d.ts.map +0 -1
  317. package/dist/services/dashboard-layout.service.js +0 -120
  318. package/dist/services/dashboard-layout.service.js.map +0 -1
  319. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +0 -12
  320. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +0 -1
  321. package/dist/services/dashboard-question-sql-dataset-config.service.js +0 -38
  322. package/dist/services/dashboard-question-sql-dataset-config.service.js.map +0 -1
  323. package/dist/services/dashboard-question.service.d.ts +0 -23
  324. package/dist/services/dashboard-question.service.d.ts.map +0 -1
  325. package/dist/services/dashboard-question.service.js +0 -135
  326. package/dist/services/dashboard-question.service.js.map +0 -1
  327. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +0 -12
  328. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +0 -1
  329. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +0 -55
  330. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +0 -1
  331. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +0 -11
  332. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +0 -1
  333. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +0 -45
  334. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +0 -1
  335. package/dist/services/dashboard-variable.service.d.ts +0 -13
  336. package/dist/services/dashboard-variable.service.d.ts.map +0 -1
  337. package/dist/services/dashboard-variable.service.js.map +0 -1
  338. package/dist/services/dashboard.service.d.ts +0 -29
  339. package/dist/services/dashboard.service.d.ts.map +0 -1
  340. package/dist/services/dashboard.service.js +0 -171
  341. package/dist/services/dashboard.service.js.map +0 -1
  342. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +0 -12
  343. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  344. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js +0 -41
  345. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js.map +0 -1
  346. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +0 -12
  347. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  348. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js +0 -42
  349. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js.map +0 -1
  350. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +0 -25
  351. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts.map +0 -1
  352. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js +0 -116
  353. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js.map +0 -1
  354. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +0 -12
  355. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts.map +0 -1
  356. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js +0 -37
  357. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js.map +0 -1
  358. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +0 -12
  359. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts.map +0 -1
  360. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js +0 -38
  361. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js.map +0 -1
  362. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +0 -12
  363. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts.map +0 -1
  364. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js +0 -38
  365. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js.map +0 -1
  366. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +0 -34
  367. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +0 -1
  368. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +0 -90
  369. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +0 -1
  370. package/dist/services/question-data-providers/helpers.d.ts +0 -7
  371. package/dist/services/question-data-providers/helpers.d.ts.map +0 -1
  372. package/dist/services/question-data-providers/helpers.js +0 -25
  373. package/dist/services/question-data-providers/helpers.js.map +0 -1
  374. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +0 -14
  375. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +0 -1
  376. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +0 -71
  377. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +0 -1
  378. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +0 -16
  379. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +0 -1
  380. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +0 -93
  381. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +0 -1
  382. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +0 -11
  383. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +0 -1
  384. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +0 -49
  385. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +0 -1
  386. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +0 -11
  387. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +0 -1
  388. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +0 -47
  389. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +0 -1
  390. package/dist/services/sql-expression-resolver.service.d.ts +0 -12
  391. package/dist/services/sql-expression-resolver.service.d.ts.map +0 -1
  392. package/dist/services/sql-expression-resolver.service.js +0 -121
  393. package/dist/services/sql-expression-resolver.service.js.map +0 -1
  394. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +0 -16
  395. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +0 -1
  396. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +0 -72
  397. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +0 -1
  398. package/dist/subscribers/dashboard-question.subscriber.d.ts +0 -16
  399. package/dist/subscribers/dashboard-question.subscriber.d.ts.map +0 -1
  400. package/dist/subscribers/dashboard-question.subscriber.js +0 -72
  401. package/dist/subscribers/dashboard-question.subscriber.js.map +0 -1
  402. package/dist/subscribers/dashboard-variable.subscriber.d.ts +0 -16
  403. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +0 -1
  404. package/dist/subscribers/dashboard-variable.subscriber.js +0 -72
  405. package/dist/subscribers/dashboard-variable.subscriber.js.map +0 -1
  406. package/dist/subscribers/dashboard.subscriber.d.ts +0 -16
  407. package/dist/subscribers/dashboard.subscriber.d.ts.map +0 -1
  408. package/dist/subscribers/dashboard.subscriber.js +0 -71
  409. package/dist/subscribers/dashboard.subscriber.js.map +0 -1
  410. package/dist-tests/api/authenticate.spec.js +0 -119
  411. package/dist-tests/api/authenticate.spec.js.map +0 -1
  412. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  413. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  414. package/dist-tests/api/ping.spec.js +0 -21
  415. package/dist-tests/api/ping.spec.js.map +0 -1
  416. package/dist-tests/helpers/auth.js +0 -41
  417. package/dist-tests/helpers/auth.js.map +0 -1
  418. package/dist-tests/helpers/env.js +0 -11
  419. package/dist-tests/helpers/env.js.map +0 -1
  420. package/docs/grouping-enhancements.md +0 -89
  421. package/docs/java-spring/README.md +0 -3
  422. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  423. package/docs/seed-changes.md +0 -65
  424. package/docs/test-data-workflow.md +0 -200
  425. package/docs/type-declaration-import-issue.md +0 -24
  426. package/src/controllers/dashboard-layout.controller.ts +0 -106
  427. package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +0 -93
  428. package/src/controllers/dashboard-question.controller.ts +0 -104
  429. package/src/decorators/dashboard-question-data-provider.decorator.ts +0 -7
  430. package/src/decorators/dashboard-selection-provider.decorator.ts +0 -7
  431. package/src/dtos/create-dashboard-layout.dto.ts +0 -31
  432. package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +0 -42
  433. package/src/dtos/create-dashboard-question.dto.ts +0 -62
  434. package/src/dtos/create-dashboard-variable.dto.ts +0 -60
  435. package/src/dtos/create-dashboard.dto.ts +0 -61
  436. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +0 -29
  437. package/src/dtos/update-dashboard-layout.dto.ts +0 -30
  438. package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +0 -49
  439. package/src/dtos/update-dashboard-question.dto.ts +0 -67
  440. package/src/dtos/update-dashboard-variable.dto.ts +0 -58
  441. package/src/dtos/update-dashboard.dto.ts +0 -65
  442. package/src/entities/dashboard-layout.entity.ts +0 -18
  443. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +0 -37
  444. package/src/entities/dashboard-question.entity.ts +0 -46
  445. package/src/entities/dashboard-variable.entity.ts +0 -44
  446. package/src/entities/dashboard.entity.ts +0 -36
  447. package/src/mappers/dashboard-mapper.ts +0 -53
  448. package/src/repository/dashboard-layout.repository.ts +0 -17
  449. package/src/repository/dashboard-question-sql-dataset-config.repository.ts +0 -17
  450. package/src/repository/dashboard-question.repository.ts +0 -17
  451. package/src/repository/dashboard-variable.repository.ts +0 -17
  452. package/src/repository/dashboard.repository.ts +0 -101
  453. package/src/services/dashboard-layout.service.ts +0 -111
  454. package/src/services/dashboard-question-sql-dataset-config.service.ts +0 -25
  455. package/src/services/dashboard-question.service.ts +0 -150
  456. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +0 -56
  457. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +0 -37
  458. package/src/services/dashboard-variable.service.ts +0 -27
  459. package/src/services/dashboard.service.ts +0 -148
  460. package/src/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.ts +0 -43
  461. package/src/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.ts +0 -44
  462. package/src/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.ts +0 -114
  463. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.ts +0 -38
  464. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.ts +0 -40
  465. package/src/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.ts +0 -39
  466. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +0 -121
  467. package/src/services/question-data-providers/helpers.ts +0 -30
  468. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +0 -74
  469. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +0 -115
  470. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +0 -44
  471. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +0 -41
  472. package/src/services/sql-expression-resolver.service.ts +0 -140
  473. package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +0 -61
  474. package/src/subscribers/dashboard-question.subscriber.ts +0 -62
  475. package/src/subscribers/dashboard-variable.subscriber.ts +0 -63
  476. package/src/subscribers/dashboard.subscriber.ts +0 -62
@@ -1,104 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.DashboardRepository = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const dashboard_entity_1 = require("../entities/dashboard.entity");
15
- const module_metadata_entity_1 = require("../entities/module-metadata.entity");
16
- const request_context_service_1 = require("../services/request-context.service");
17
- const typeorm_1 = require("typeorm");
18
- const security_rule_repository_1 = require("./security-rule.repository");
19
- const solid_base_repository_1 = require("./solid-base.repository");
20
- let DashboardRepository = class DashboardRepository extends solid_base_repository_1.SolidBaseRepository {
21
- constructor(dataSource, requestContextService, securityRuleRepository) {
22
- super(dashboard_entity_1.Dashboard, dataSource, requestContextService, securityRuleRepository);
23
- this.dataSource = dataSource;
24
- this.requestContextService = requestContextService;
25
- this.securityRuleRepository = securityRuleRepository;
26
- }
27
- async upsertWithDto(createDto) {
28
- const moduleMetadataRepository = this.dataSource.getRepository(module_metadata_entity_1.ModuleMetadata);
29
- const module = await moduleMetadataRepository.findOneBy({ name: createDto.moduleUserKey });
30
- if (!module)
31
- throw new Error(`Module with key ${createDto.moduleUserKey} not found`);
32
- const existingDashboard = await this.findOne({
33
- where: { name: createDto.name },
34
- relations: ['dashboardVariables', 'questions', 'questions.questionSqlDatasetConfigs'],
35
- });
36
- if (existingDashboard) {
37
- existingDashboard.layoutJson = JSON.stringify(createDto.layoutJson ?? {});
38
- existingDashboard.module = module;
39
- existingDashboard.dashboardVariables = createDto.dashboardVariables?.map(variable => {
40
- const existingVar = existingDashboard.dashboardVariables.find(v => v.variableName === variable.variableName);
41
- if (existingVar) {
42
- return Object.assign(existingVar, {
43
- ...variable,
44
- selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),
45
- defaultValue: JSON.stringify(variable.defaultValue ?? []),
46
- });
47
- }
48
- return {
49
- ...variable,
50
- selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),
51
- defaultValue: JSON.stringify(variable.defaultValue ?? []),
52
- };
53
- }) ?? [];
54
- existingDashboard.questions = createDto.questions?.map(question => {
55
- const existingQuestion = existingDashboard.questions.find(q => q.name === question.name);
56
- const questionData = {
57
- ...question,
58
- questionSqlDatasetConfigs: question.questionSqlDatasetConfigs?.map(cfg => {
59
- const existingCfg = existingQuestion?.questionSqlDatasetConfigs.find(c => c.datasetName === cfg.datasetName);
60
- if (existingCfg) {
61
- return Object.assign(existingCfg, {
62
- ...cfg,
63
- options: JSON.stringify(cfg.options ?? {}),
64
- });
65
- }
66
- return {
67
- ...cfg,
68
- options: JSON.stringify(cfg.options ?? {}),
69
- };
70
- }) ?? [],
71
- };
72
- return existingQuestion ? Object.assign(existingQuestion, questionData) : questionData;
73
- }) ?? [];
74
- return this.save(existingDashboard);
75
- }
76
- const dashboardData = {
77
- ...createDto,
78
- module,
79
- layoutJson: JSON.stringify(createDto.layoutJson ?? {}),
80
- dashboardVariables: createDto.dashboardVariables?.map(variable => ({
81
- ...variable,
82
- selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),
83
- defaultValue: JSON.stringify(variable.defaultValue ?? []),
84
- })),
85
- questions: createDto.questions?.map(question => ({
86
- ...question,
87
- questionSqlDatasetConfigs: question.questionSqlDatasetConfigs?.map(cfg => ({
88
- ...cfg,
89
- options: JSON.stringify(cfg.options ?? {}),
90
- })),
91
- })),
92
- };
93
- const newDashboard = this.create(dashboardData);
94
- return this.save(newDashboard);
95
- }
96
- };
97
- exports.DashboardRepository = DashboardRepository;
98
- exports.DashboardRepository = DashboardRepository = __decorate([
99
- (0, common_1.Injectable)(),
100
- __metadata("design:paramtypes", [typeorm_1.DataSource,
101
- request_context_service_1.RequestContextService,
102
- security_rule_repository_1.SecurityRuleRepository])
103
- ], DashboardRepository);
104
- //# sourceMappingURL=dashboard.repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard.repository.js","sourceRoot":"","sources":["../../src/repository/dashboard.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { Dashboard } from \"src/entities/dashboard.entity\";\nimport { ModuleMetadata } from \"src/entities/module-metadata.entity\";\nimport { RequestContextService } from \"src/services/request-context.service\";\nimport { DataSource } from \"typeorm\";\nimport { SecurityRuleRepository } from \"./security-rule.repository\";\nimport { SolidBaseRepository } from \"./solid-base.repository\";\n\n@Injectable()\nexport class DashboardRepository extends SolidBaseRepository<Dashboard> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n ) {\n super(Dashboard, dataSource, requestContextService, securityRuleRepository);\n }\n\n\n async upsertWithDto(createDto: any) {\n const moduleMetadataRepository = this.dataSource.getRepository(ModuleMetadata);\n const module = await moduleMetadataRepository.findOneBy({ name: createDto.moduleUserKey });\n\n if (!module) throw new Error(`Module with key ${createDto.moduleUserKey} not found`);\n\n const existingDashboard = await this.findOne({\n where: { name: createDto.name },\n relations: ['dashboardVariables', 'questions', 'questions.questionSqlDatasetConfigs'],\n });\n\n if (existingDashboard) {\n // Update basic fields\n existingDashboard.layoutJson = JSON.stringify(createDto.layoutJson ?? {});\n existingDashboard.module = module;\n\n // Upsert dashboard variables\n existingDashboard.dashboardVariables = createDto.dashboardVariables?.map(variable => {\n const existingVar = existingDashboard.dashboardVariables.find(v => v.variableName === variable.variableName);\n if (existingVar) {\n return Object.assign(existingVar, {\n ...variable,\n selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),\n defaultValue: JSON.stringify(variable.defaultValue ?? []),\n });\n }\n return {\n ...variable,\n selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),\n defaultValue: JSON.stringify(variable.defaultValue ?? []),\n };\n }) ?? [];\n\n // Upsert questions and their configs\n existingDashboard.questions = createDto.questions?.map(question => {\n const existingQuestion = existingDashboard.questions.find(q => q.name === question.name);\n const questionData: any = {\n ...question,\n questionSqlDatasetConfigs: question.questionSqlDatasetConfigs?.map(cfg => {\n const existingCfg = existingQuestion?.questionSqlDatasetConfigs.find(c => c.datasetName === cfg.datasetName);\n if (existingCfg) {\n return Object.assign(existingCfg, {\n ...cfg,\n options: JSON.stringify(cfg.options ?? {}),\n });\n }\n return {\n ...cfg,\n options: JSON.stringify(cfg.options ?? {}),\n };\n }) ?? [],\n };\n\n return existingQuestion ? Object.assign(existingQuestion, questionData) : questionData;\n }) ?? [];\n\n return this.save(existingDashboard);\n }\n\n // Else: new dashboard\n const dashboardData = {\n ...createDto,\n module,\n layoutJson: JSON.stringify(createDto.layoutJson ?? {}),\n dashboardVariables: createDto.dashboardVariables?.map(variable => ({\n ...variable,\n selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),\n defaultValue: JSON.stringify(variable.defaultValue ?? []),\n })),\n questions: createDto.questions?.map(question => ({\n ...question,\n questionSqlDatasetConfigs: question.questionSqlDatasetConfigs?.map(cfg => ({\n ...cfg,\n options: JSON.stringify(cfg.options ?? {}),\n })),\n })),\n };\n\n const newDashboard = this.create(dashboardData);\n return this.save(newDashboard);\n }\n}"]}
@@ -1,20 +0,0 @@
1
- import { ModuleRef } from "@nestjs/core";
2
- import { EntityManager } from 'typeorm';
3
- import { CRUDService } from '../services/crud.service';
4
- import { DashboardLayout } from '../entities/dashboard-layout.entity';
5
- import { DashboardLayoutRepository } from '../repository/dashboard-layout.repository';
6
- import { CreateDashboardLayoutDto } from '../dtos/create-dashboard-layout.dto';
7
- import { RequestContextService } from './request-context.service';
8
- export declare class DashboardLayoutService extends CRUDService<DashboardLayout> {
9
- readonly entityManager: EntityManager;
10
- readonly repo: DashboardLayoutRepository;
11
- readonly requestContextService: RequestContextService;
12
- readonly moduleRef: ModuleRef;
13
- private readonly logger;
14
- constructor(entityManager: EntityManager, repo: DashboardLayoutRepository, requestContextService: RequestContextService, moduleRef: ModuleRef);
15
- upsertUserDashboardLayout(createDtos: CreateDashboardLayoutDto): Promise<DashboardLayout>;
16
- getUserDashboardLayoutByDashboardId(dashboardId: any): Promise<DashboardLayout | {
17
- layout: any;
18
- }>;
19
- }
20
- //# sourceMappingURL=dashboard-layout.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-layout.service.d.ts","sourceRoot":"","sources":["../../src/services/dashboard-layout.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,qBACa,sBAAuB,SAAQ,WAAW,CAAC,eAAe,CAAC;IAIpE,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,IAAI,EAAE,yBAAyB;IACxC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,SAAS,EAAE,SAAS;IAN/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGjD,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,yBAAyB,EAC/B,qBAAqB,EAAE,qBAAqB,EAC5C,SAAS,EAAE,SAAS;IAKzB,yBAAyB,CAAC,UAAU,EAAE,wBAAwB;IAsC9D,mCAAmC,CAAC,WAAW,EAAE,GAAG;;;CA+C3D"}
@@ -1,120 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.DashboardLayoutService = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const core_1 = require("@nestjs/core");
18
- const typeorm_1 = require("@nestjs/typeorm");
19
- const typeorm_2 = require("typeorm");
20
- const crud_service_1 = require("./crud.service");
21
- const dashboard_layout_repository_1 = require("../repository/dashboard-layout.repository");
22
- const request_context_service_1 = require("./request-context.service");
23
- let DashboardLayoutService = class DashboardLayoutService extends crud_service_1.CRUDService {
24
- constructor(entityManager, repo, requestContextService, moduleRef) {
25
- super(entityManager, repo, 'dashboardLayout', 'solid-core', moduleRef);
26
- this.entityManager = entityManager;
27
- this.repo = repo;
28
- this.requestContextService = requestContextService;
29
- this.moduleRef = moduleRef;
30
- this.logger = new common_1.Logger(this.constructor.name);
31
- }
32
- async upsertUserDashboardLayout(createDtos) {
33
- const activeUser = this.requestContextService.getActiveUser();
34
- if (!activeUser) {
35
- throw new Error('User not found');
36
- }
37
- let userId = null;
38
- if (activeUser.roles.includes('Admin')) {
39
- userId = null;
40
- }
41
- else {
42
- userId = activeUser?.sub;
43
- }
44
- const existingLayout = await this.repo.findOne({
45
- where: {
46
- user: { id: userId },
47
- dashboard: {
48
- id: createDtos.dashboardId
49
- }
50
- },
51
- relations: {
52
- user: true,
53
- dashboard: true,
54
- }
55
- });
56
- if (existingLayout) {
57
- return super.update(existingLayout.id, { layout: createDtos.layout }, [], true);
58
- }
59
- else {
60
- const createDto = {
61
- layout: createDtos.layout,
62
- dashboardId: createDtos.dashboardId,
63
- uesrId: userId
64
- };
65
- return super.create(createDto, []);
66
- }
67
- }
68
- async getUserDashboardLayoutByDashboardId(dashboardId) {
69
- const activeUser = this.requestContextService.getActiveUser();
70
- if (!activeUser) {
71
- throw new Error('User not found');
72
- }
73
- const userId = activeUser?.sub;
74
- const existingUserLayout = await this.repo.findOne({
75
- where: {
76
- user: { id: userId },
77
- dashboard: {
78
- id: dashboardId
79
- }
80
- },
81
- relations: {
82
- user: true,
83
- dashboard: true,
84
- }
85
- });
86
- if (existingUserLayout) {
87
- return existingUserLayout;
88
- }
89
- const defaultLayout = await this.repo.findOne({
90
- where: {
91
- user: { id: null },
92
- dashboard: {
93
- id: dashboardId
94
- }
95
- },
96
- relations: {
97
- user: true,
98
- dashboard: true,
99
- }
100
- });
101
- if (defaultLayout) {
102
- return defaultLayout;
103
- }
104
- else {
105
- return {
106
- layout: null
107
- };
108
- }
109
- }
110
- };
111
- exports.DashboardLayoutService = DashboardLayoutService;
112
- exports.DashboardLayoutService = DashboardLayoutService = __decorate([
113
- (0, common_1.Injectable)(),
114
- __param(0, (0, typeorm_1.InjectEntityManager)()),
115
- __metadata("design:paramtypes", [typeorm_2.EntityManager,
116
- dashboard_layout_repository_1.DashboardLayoutRepository,
117
- request_context_service_1.RequestContextService,
118
- core_1.ModuleRef])
119
- ], DashboardLayoutService);
120
- //# sourceMappingURL=dashboard-layout.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-layout.service.js","sourceRoot":"","sources":["../../src/services/dashboard-layout.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\nimport { DashboardLayout } from 'src/entities/dashboard-layout.entity';\nimport { DashboardLayoutRepository } from 'src/repository/dashboard-layout.repository';\nimport { CreateDashboardLayoutDto } from 'src/dtos/create-dashboard-layout.dto';\nimport { RequestContextService } from './request-context.service';\n\n\n@Injectable()\nexport class DashboardLayoutService extends CRUDService<DashboardLayout> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n readonly repo: DashboardLayoutRepository,\n readonly requestContextService: RequestContextService,\n readonly moduleRef: ModuleRef,\n ) {\n super(entityManager, repo, 'dashboardLayout', 'solid-core', moduleRef);\n }\n\n async upsertUserDashboardLayout(createDtos: CreateDashboardLayoutDto) {\n const activeUser = this.requestContextService.getActiveUser();\n\n if (!activeUser) {\n throw new Error('User not found');\n }\n\n let userId = null;\n if (activeUser.roles.includes('Admin')) {\n userId = null;\n } else {\n userId = activeUser?.sub;\n }\n const existingLayout = await this.repo.findOne({\n where: {\n user: { id: userId },\n dashboard: {\n id: createDtos.dashboardId\n }\n },\n relations: {\n user: true,\n dashboard: true,\n }\n });\n\n if (existingLayout) {\n return super.update(existingLayout.id, { layout: createDtos.layout }, [], true);\n } else {\n const createDto = {\n layout: createDtos.layout,\n dashboardId: createDtos.dashboardId,\n uesrId: userId\n }\n return super.create(createDto, []);\n }\n }\n\n async getUserDashboardLayoutByDashboardId(dashboardId: any) {\n const activeUser = this.requestContextService.getActiveUser();\n\n if (!activeUser) {\n throw new Error('User not found');\n }\n const userId = activeUser?.sub;\n const existingUserLayout = await this.repo.findOne({\n where: {\n user: { id: userId },\n dashboard: {\n id: dashboardId\n }\n },\n relations: {\n user: true,\n dashboard: true,\n }\n });\n if (existingUserLayout) {\n // if dahsboard for userid exists \n return existingUserLayout;\n }\n\n // if not then check for default dashboard\n const defaultLayout = await this.repo.findOne({\n where: {\n user: { id: null },\n dashboard: {\n id: dashboardId\n }\n },\n relations: {\n user: true,\n dashboard: true,\n }\n });\n if (defaultLayout) {\n // if default layout exists return it\n return defaultLayout;\n } else {\n // if default layout does not exist return empty layout \n return {\n layout: null\n }\n }\n }\n}\n"]}
@@ -1,12 +0,0 @@
1
- import { ModuleRef } from "@nestjs/core";
2
- import { EntityManager } from 'typeorm';
3
- import { CRUDService } from '../services/crud.service';
4
- import { DashboardQuestionSqlDatasetConfig } from '../entities/dashboard-question-sql-dataset-config.entity';
5
- import { DashboardQuestionSqlDatasetConfigRepository } from '../repository/dashboard-question-sql-dataset-config.repository';
6
- export declare class DashboardQuestionSqlDatasetConfigService extends CRUDService<DashboardQuestionSqlDatasetConfig> {
7
- readonly entityManager: EntityManager;
8
- readonly repo: DashboardQuestionSqlDatasetConfigRepository;
9
- readonly moduleRef: ModuleRef;
10
- constructor(entityManager: EntityManager, repo: DashboardQuestionSqlDatasetConfigRepository, moduleRef: ModuleRef);
11
- }
12
- //# sourceMappingURL=dashboard-question-sql-dataset-config.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-question-sql-dataset-config.service.d.ts","sourceRoot":"","sources":["../../src/services/dashboard-question-sql-dataset-config.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,iCAAiC,EAAE,MAAM,0DAA0D,CAAC;AAC7G,OAAO,EAAE,2CAA2C,EAAE,MAAM,iEAAiE,CAAC;AAE9H,qBACa,wCAAyC,SAAQ,WAAW,CAAC,iCAAiC,CAAC;IAGxG,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,2CAA2C;IAC1D,QAAQ,CAAC,SAAS,EAAE,SAAS;gBAJpB,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,2CAA2C,EACjD,SAAS,EAAE,SAAS;CAKhC"}
@@ -1,38 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.DashboardQuestionSqlDatasetConfigService = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const typeorm_1 = require("@nestjs/typeorm");
18
- const core_1 = require("@nestjs/core");
19
- const typeorm_2 = require("typeorm");
20
- const crud_service_1 = require("./crud.service");
21
- const dashboard_question_sql_dataset_config_repository_1 = require("../repository/dashboard-question-sql-dataset-config.repository");
22
- let DashboardQuestionSqlDatasetConfigService = class DashboardQuestionSqlDatasetConfigService extends crud_service_1.CRUDService {
23
- constructor(entityManager, repo, moduleRef) {
24
- super(entityManager, repo, 'dashboardQuestionSqlDatasetConfig', 'solid-core', moduleRef);
25
- this.entityManager = entityManager;
26
- this.repo = repo;
27
- this.moduleRef = moduleRef;
28
- }
29
- };
30
- exports.DashboardQuestionSqlDatasetConfigService = DashboardQuestionSqlDatasetConfigService;
31
- exports.DashboardQuestionSqlDatasetConfigService = DashboardQuestionSqlDatasetConfigService = __decorate([
32
- (0, common_1.Injectable)(),
33
- __param(0, (0, typeorm_1.InjectEntityManager)()),
34
- __metadata("design:paramtypes", [typeorm_2.EntityManager,
35
- dashboard_question_sql_dataset_config_repository_1.DashboardQuestionSqlDatasetConfigRepository,
36
- core_1.ModuleRef])
37
- ], DashboardQuestionSqlDatasetConfigService);
38
- //# sourceMappingURL=dashboard-question-sql-dataset-config.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-question-sql-dataset-config.service.js","sourceRoot":"","sources":["../../src/services/dashboard-question-sql-dataset-config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAsD;AACtD,uCAAyC;AACzC,qCAAwC;AAExC,iDAAwD;AAIxD,qIAA8H;AAGvH,IAAM,wCAAwC,GAA9C,MAAM,wCAAyC,SAAQ,0BAA8C;IAC1G,YAEW,aAA4B,EAG5B,IAAiD,EACjD,SAAoB;QAG9B,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,mCAAmC,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAP/E,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAA6C;QACjD,cAAS,GAAT,SAAS,CAAW;IAIhC,CAAC;CACD,CAAA;AAZY,4FAAwC;mDAAxC,wCAAwC;IADpD,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCACE,uBAAa;QAGtB,8FAA2C;QACtC,gBAAS;GAPpB,wCAAwC,CAYpD","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport { DashboardQuestionSqlDatasetConfig } from '../entities/dashboard-question-sql-dataset-config.entity';\nimport { DashboardQuestionSqlDatasetConfigRepository } from 'src/repository/dashboard-question-sql-dataset-config.repository';\n\n@Injectable()\nexport class DashboardQuestionSqlDatasetConfigService extends CRUDService<DashboardQuestionSqlDatasetConfig>{\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(DashboardQuestionSqlDatasetConfig, 'default')\n // readonly repo: Repository<DashboardQuestionSqlDatasetConfig>,\n readonly repo: DashboardQuestionSqlDatasetConfigRepository,\n readonly moduleRef: ModuleRef\n\n ) {\n super(entityManager, repo, 'dashboardQuestionSqlDatasetConfig', 'solid-core', moduleRef);\n }\n}\n"]}
@@ -1,23 +0,0 @@
1
- import { ModuleRef } from "@nestjs/core";
2
- import { EntityManager } from 'typeorm';
3
- import { CRUDService } from '../services/crud.service';
4
- import { SolidRegistry } from '../helpers/solid-registry';
5
- import { DashboardQuestion } from '../entities/dashboard-question.entity';
6
- import { SqlExpression } from './question-data-providers/chartjs-sql-data-provider.service';
7
- import { DashboardQuestionRepository } from '../repository/dashboard-question.repository';
8
- export declare const CHARTJS_SQL_DATA_PROVIDER_NAME = "ChartJsSqlDataProvider";
9
- export declare const PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = "PrimeReactMeterGroupSqlDataProvider";
10
- export declare const PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = "PrimeReactDatatableSqlDataProvider";
11
- export declare const INBUILT_SQL_DATA_PROVIDERS: string[];
12
- export declare class DashboardQuestionService extends CRUDService<DashboardQuestion> {
13
- readonly entityManager: EntityManager;
14
- readonly repo: DashboardQuestionRepository;
15
- readonly moduleRef: ModuleRef;
16
- readonly solidRegistry: SolidRegistry;
17
- private readonly logger;
18
- constructor(entityManager: EntityManager, repo: DashboardQuestionRepository, moduleRef: ModuleRef, solidRegistry: SolidRegistry);
19
- getData(id: number, inputExpressions?: SqlExpression[], isPreview?: boolean): Promise<any>;
20
- private getExpressions;
21
- private loadQuestion;
22
- }
23
- //# sourceMappingURL=dashboard-question.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-question.service.d.ts","sourceRoot":"","sources":["../../src/services/dashboard-question.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAIxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAyB,MAAM,6DAA6D,CAAC;AACnH,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAQ3F,eAAO,MAAM,8BAA8B,2BAA2B,CAAC;AACvE,eAAO,MAAM,8CAA8C,wCAAwC,CAAC;AACpG,eAAO,MAAM,4CAA4C,uCAAuC,CAAC;AAEjG,eAAO,MAAM,0BAA0B,UAAiI,CAAC;AAEzK,qBACa,wBAAyB,SAAQ,WAAW,CAAC,iBAAiB,CAAC;IAIxE,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa;IARvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGjD,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,2BAA2B,EACjC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa;IAMjC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,GAAE,aAAa,EAAO,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAgDlG,OAAO,CAAC,cAAc;YA8CR,YAAY;CAa3B"}
@@ -1,135 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.DashboardQuestionService = exports.INBUILT_SQL_DATA_PROVIDERS = exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = exports.CHARTJS_SQL_DATA_PROVIDER_NAME = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const core_1 = require("@nestjs/core");
18
- const typeorm_1 = require("@nestjs/typeorm");
19
- const typeorm_2 = require("typeorm");
20
- const crud_service_1 = require("./crud.service");
21
- const solid_registry_1 = require("../helpers/solid-registry");
22
- const dashboard_question_entity_1 = require("../entities/dashboard-question.entity");
23
- const dashboard_question_repository_1 = require("../repository/dashboard-question.repository");
24
- var SOURCE_TYPE;
25
- (function (SOURCE_TYPE) {
26
- SOURCE_TYPE["SQL"] = "sql";
27
- SOURCE_TYPE["PROVIDER"] = "provider";
28
- })(SOURCE_TYPE || (SOURCE_TYPE = {}));
29
- exports.CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';
30
- exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';
31
- exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';
32
- exports.INBUILT_SQL_DATA_PROVIDERS = [exports.CHARTJS_SQL_DATA_PROVIDER_NAME, exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME, exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME];
33
- let DashboardQuestionService = class DashboardQuestionService extends crud_service_1.CRUDService {
34
- constructor(entityManager, repo, moduleRef, solidRegistry) {
35
- super(entityManager, repo, 'dashboardQuestion', 'solid-core', moduleRef);
36
- this.entityManager = entityManager;
37
- this.repo = repo;
38
- this.moduleRef = moduleRef;
39
- this.solidRegistry = solidRegistry;
40
- this.logger = new common_1.Logger(this.constructor.name);
41
- }
42
- async getData(id, inputExpressions = [], isPreview = false) {
43
- const question = await this.loadQuestion(id);
44
- if (!question) {
45
- throw new common_1.BadRequestException(`Question with id ${id} not found`);
46
- }
47
- const dashboardVariables = question.dashboard?.dashboardVariables || [];
48
- const expressions = this.getExpressions(isPreview, dashboardVariables, inputExpressions);
49
- let dataProvider = null;
50
- let context = {};
51
- if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {
52
- dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.CHARTJS_SQL_DATA_PROVIDER_NAME);
53
- context = {
54
- expressions,
55
- };
56
- }
57
- if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {
58
- dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);
59
- context = {
60
- expressions,
61
- };
62
- }
63
- if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {
64
- dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);
65
- context = {
66
- expressions,
67
- };
68
- }
69
- if (question.sourceType === SOURCE_TYPE.PROVIDER) {
70
- dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(question.providerName);
71
- }
72
- if (!dataProvider) {
73
- throw new common_1.NotImplementedException(`Invalid data source type ${question.sourceType}`);
74
- }
75
- return await dataProvider.getData(question, context);
76
- }
77
- getExpressions(isPreview, dashboardVariables, inputExpressions) {
78
- const expressions = [];
79
- if (isPreview) {
80
- const expr = dashboardVariables.map(variable => {
81
- return {
82
- variableName: variable.variableName,
83
- operator: variable.defaultOperator,
84
- value: JSON.parse(variable.defaultValue || '[]'),
85
- };
86
- });
87
- expressions.push(...expr);
88
- }
89
- else {
90
- for (const variable of dashboardVariables) {
91
- const matchingInputExpression = inputExpressions.find(expr => expr.variableName === variable.variableName);
92
- if (matchingInputExpression) {
93
- expressions.push(matchingInputExpression);
94
- }
95
- else {
96
- expressions.push({
97
- variableName: variable.variableName,
98
- operator: variable.defaultOperator,
99
- value: JSON.parse(variable.defaultValue || '[]'),
100
- });
101
- }
102
- }
103
- expressions.push(...expressions);
104
- }
105
- const deduplicatedExpressions = [];
106
- const variableNames = new Set();
107
- for (const expr of expressions) {
108
- if (!variableNames.has(expr.variableName)) {
109
- deduplicatedExpressions.push(expr);
110
- variableNames.add(expr.variableName);
111
- }
112
- }
113
- return deduplicatedExpressions;
114
- }
115
- async loadQuestion(id) {
116
- const repo = this.entityManager.getRepository(dashboard_question_entity_1.DashboardQuestion);
117
- const question = await repo.findOne({
118
- where: {
119
- id,
120
- },
121
- relations: ['questionSqlDatasetConfigs', 'dashboard', 'dashboard.dashboardVariables'],
122
- });
123
- return question;
124
- }
125
- };
126
- exports.DashboardQuestionService = DashboardQuestionService;
127
- exports.DashboardQuestionService = DashboardQuestionService = __decorate([
128
- (0, common_1.Injectable)(),
129
- __param(0, (0, typeorm_1.InjectEntityManager)()),
130
- __metadata("design:paramtypes", [typeorm_2.EntityManager,
131
- dashboard_question_repository_1.DashboardQuestionRepository,
132
- core_1.ModuleRef,
133
- solid_registry_1.SolidRegistry])
134
- ], DashboardQuestionService);
135
- //# sourceMappingURL=dashboard-question.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-question.service.js","sourceRoot":"","sources":["../../src/services/dashboard-question.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Injectable, Logger, NotImplementedException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardQuestion } from '../entities/dashboard-question.entity';\nimport { SqlExpression, SqlExpressionOperator } from './question-data-providers/chartjs-sql-data-provider.service';\nimport { DashboardQuestionRepository } from 'src/repository/dashboard-question.repository';\nimport { QuestionSqlDataProviderContext } from '../interfaces';\n\nenum SOURCE_TYPE {\n SQL = 'sql',\n PROVIDER = 'provider',\n}\n\nexport const CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';\nexport const PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';\nexport const PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';\n\nexport const INBUILT_SQL_DATA_PROVIDERS = [CHARTJS_SQL_DATA_PROVIDER_NAME, PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME, PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME];\n\n@Injectable()\nexport class DashboardQuestionService extends CRUDService<DashboardQuestion> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(DashboardQuestion, 'default')\n // readonly repo: Repository<DashboardQuestion>,\n readonly repo: DashboardQuestionRepository,\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for data providers\n ) {\n super(entityManager, repo, 'dashboardQuestion', 'solid-core', moduleRef);\n }\n\n // Get the data for a specific question \n async getData(id: number, inputExpressions: SqlExpression[] = [], isPreview = false): Promise<any> {\n // Load the question\n const question = await this.loadQuestion(id);\n if (!question) {\n throw new BadRequestException(`Question with id ${id} not found`);\n }\n\n // Get the dashbbard variables from the question\n const dashboardVariables = question.dashboard?.dashboardVariables || [];\n const expressions: SqlExpression[] = this.getExpressions(isPreview, dashboardVariables, inputExpressions);\n\n // Try to resolve the dataProvider based on a combination of sourceType and visualisedAs\n let dataProvider = null;\n let context = {};\n\n // Decide which data provider to use based on the question visualisation type if sourceType is SQL. \n if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(CHARTJS_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n\n // If a custom provider is specified, use that one instead\n if (question.sourceType === SOURCE_TYPE.PROVIDER) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(question.providerName);\n }\n\n if (!dataProvider) {\n throw new NotImplementedException(`Invalid data source type ${question.sourceType}`);\n }\n\n return await dataProvider.getData(question, context);\n\n }\n\n private getExpressions(isPreview: boolean, dashboardVariables: DashboardVariable[], inputExpressions: SqlExpression[]) {\n const expressions: SqlExpression[] = [];\n\n if (isPreview) {\n // Convert the dashboard variables into objects of interface type SqlExpression using the default value, default operator and the variable name\n const expr: SqlExpression[] = dashboardVariables.map(variable => {\n return {\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator, // Assuming defaultOperator is a valid SqlExpressionOperator\n value: JSON.parse(variable.defaultValue || '[]'), // Assuming defaultValue is a string or can be converted to a string array\n };\n });\n expressions.push(...expr);\n }\n else {\n // Loop through the dashboard variables and see if there is a matching input expression\n // If there is, use that expression instead of the default value\n for (const variable of dashboardVariables) {\n const matchingInputExpression = inputExpressions.find(expr => expr.variableName === variable.variableName);\n if (matchingInputExpression) {\n expressions.push(matchingInputExpression);\n }\n else {\n expressions.push({\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator,\n value: JSON.parse(variable.defaultValue || '[]'),\n });\n }\n }\n expressions.push(...expressions);\n }\n\n // Remove duplicate expressions based on variableName in the expressions array\n const deduplicatedExpressions: SqlExpression[] = [];\n const variableNames = new Set<string>();\n for (const expr of expressions) {\n if (!variableNames.has(expr.variableName)) {\n deduplicatedExpressions.push(expr);\n variableNames.add(expr.variableName);\n }\n }\n\n return deduplicatedExpressions;\n }\n\n private async loadQuestion(id: number) {\n const repo = this.entityManager.getRepository(DashboardQuestion);\n\n // Load the dashboard record using the field\n const question = await repo.findOne({\n where: {\n id,\n },\n relations: ['questionSqlDatasetConfigs', 'dashboard', 'dashboard.dashboardVariables'],\n });\n return question;\n }\n\n}\n"]}
@@ -1,12 +0,0 @@
1
- import { IDashboardVariableSelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
2
- import { EntityManager } from "typeorm";
3
- export declare class DashboardVariableSQLDynamicProvider implements IDashboardVariableSelectionProvider<ISelectionProviderContext> {
4
- private readonly entityManager;
5
- constructor(entityManager: EntityManager);
6
- help(): string;
7
- name(): string;
8
- value(optionValue: string, ctxt: ISelectionProviderContext): Promise<ISelectionProviderValues | any>;
9
- values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]>;
10
- appendLimitOffset(sql: string): string;
11
- }
12
- //# sourceMappingURL=dashboard-variable-sql-dynamic-provider.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-variable-sql-dynamic-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5H,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,qBAEa,mCAAoC,YAAW,mCAAmC,CAAC,yBAAyB,CAAC;IAE1G,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAGzD,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAIR,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,GAAG,GAAG,CAAC;IAIpG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC;IAqB1G,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CASzC"}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.DashboardVariableSQLDynamicProvider = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const typeorm_1 = require("typeorm");
15
- const dashboard_selection_provider_decorator_1 = require("../../decorators/dashboard-selection-provider.decorator");
16
- let DashboardVariableSQLDynamicProvider = class DashboardVariableSQLDynamicProvider {
17
- constructor(entityManager) {
18
- this.entityManager = entityManager;
19
- }
20
- help() {
21
- return "# Get the dashboard variable after executing the SQL query configured for the dashboard variable.\n";
22
- }
23
- name() {
24
- return 'DashboardVariableSQLDynamicProvider';
25
- }
26
- async value(optionValue, ctxt) {
27
- throw new Error("DashboardVariableSQLDynamicProvider does not support value method. Use values method instead.");
28
- }
29
- async values(query, ctxt) {
30
- const { sql, limit, offset } = ctxt;
31
- if (!sql) {
32
- throw new Error("DashboardVariableSQLDynamicProvider requires a SQL query to be provided in the context.");
33
- }
34
- const results = await this.entityManager.query(this.appendLimitOffset(sql), [limit, offset]);
35
- return results.map((result) => {
36
- const transformedResult = {
37
- value: result.value,
38
- label: result.label,
39
- };
40
- return transformedResult;
41
- });
42
- }
43
- appendLimitOffset(sql) {
44
- const trimmedSql = sql.trim().replace(/;$/, '');
45
- const finalSql = `${trimmedSql} LIMIT $1 OFFSET $2`;
46
- return finalSql;
47
- }
48
- };
49
- exports.DashboardVariableSQLDynamicProvider = DashboardVariableSQLDynamicProvider;
50
- exports.DashboardVariableSQLDynamicProvider = DashboardVariableSQLDynamicProvider = __decorate([
51
- (0, dashboard_selection_provider_decorator_1.DashboardVariableSelectionProvider)(),
52
- (0, common_1.Injectable)(),
53
- __metadata("design:paramtypes", [typeorm_1.EntityManager])
54
- ], DashboardVariableSQLDynamicProvider);
55
- //# sourceMappingURL=dashboard-variable-sql-dynamic-provider.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-variable-sql-dynamic-provider.service.js","sourceRoot":"","sources":["../../../src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAG5C,qCAAwC;AACxC,oHAA2G;AAIpG,IAAM,mCAAmC,GAAzC,MAAM,mCAAmC;IAE5C,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IACzD,CAAC;IAED,IAAI;QACA,OAAO,qGAAqG,CAAC;IACjH,CAAC;IAED,IAAI;QACA,OAAO,qCAAqC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,IAA+B;QAC5D,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;IACrH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAA+B;QACvD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAmE,CAAC;QACnG,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;QAC/G,CAAC;QAID,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAG7F,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;YAC/B,MAAM,iBAAiB,GAA6B;gBAChD,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;aAEtB,CAAC;YACF,OAAO,iBAAiB,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,iBAAiB,CAAC,GAAW;QAEzB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAGhD,MAAM,QAAQ,GAAG,GAAG,UAAU,qBAAqB,CAAC;QAEpD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAA;AA/CY,kFAAmC;8CAAnC,mCAAmC;IAF/C,IAAA,2EAAkC,GAAE;IACpC,IAAA,mBAAU,GAAE;qCAGmC,uBAAa;GAFhD,mCAAmC,CA+C/C","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { IDashboardVariableSelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from \"../../interfaces\";\n// import localeCodes from 'locale-codes';\nimport { EntityManager } from \"typeorm\";\nimport { DashboardVariableSelectionProvider } from \"src/decorators/dashboard-selection-provider.decorator\";\n\n@DashboardVariableSelectionProvider()\n@Injectable()\nexport class DashboardVariableSQLDynamicProvider implements IDashboardVariableSelectionProvider<ISelectionProviderContext> {\n\n constructor(private readonly entityManager: EntityManager) {\n }\n\n help(): string {\n return \"# Get the dashboard variable after executing the SQL query configured for the dashboard variable.\\n\";\n }\n\n name(): string {\n return 'DashboardVariableSQLDynamicProvider';\n }\n\n async value(optionValue: string, ctxt: ISelectionProviderContext): Promise<ISelectionProviderValues | any> {\n throw new Error(\"DashboardVariableSQLDynamicProvider does not support value method. Use values method instead.\");\n }\n\n async values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {\n const { sql, limit, offset } = ctxt as unknown as { sql: string, limit?: number, offset?: number };\n if (!sql) {\n throw new Error(\"DashboardVariableSQLDynamicProvider requires a SQL query to be provided in the context.\");\n }\n\n // Here you would execute the SQL query against your database\n // For demonstration, let's assume we have a mock database function that executes the SQL query\n const results = await this.entityManager.query(this.appendLimitOffset(sql), [limit, offset]);\n\n // Transform the results into the expected format\n return results.map((result: any) => {\n const transformedResult: ISelectionProviderValues = {\n value: result.value, // Assuming the result has a 'value' field\n label: result.label, // Assuming the result has a 'label' field\n // Add any other fields you need to transform here\n };\n return transformedResult;\n });\n }\n\n appendLimitOffset(sql: string): string {\n // Strip trailing semicolon if present\n const trimmedSql = sql.trim().replace(/;$/, '');\n\n // Append the LIMIT/OFFSET\n const finalSql = `${trimmedSql} LIMIT $1 OFFSET $2`; // FIXME This works with PostgreSQL. for mysql use ?. For this we will need to identify the datasource using the model for the particular dashboard variable\n\n return finalSql;\n }\n}"]}