@solidxai/core 0.1.6 → 0.1.8-beta.0

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 (784) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/dist/controllers/dashboard-layout.controller.d.ts +47 -0
  3. package/dist/controllers/dashboard-layout.controller.d.ts.map +1 -0
  4. package/dist/controllers/dashboard-layout.controller.js +204 -0
  5. package/dist/controllers/dashboard-layout.controller.js.map +1 -0
  6. package/dist/controllers/scheduled-job.controller.d.ts +1 -0
  7. package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
  8. package/dist/controllers/scheduled-job.controller.js +12 -0
  9. package/dist/controllers/scheduled-job.controller.js.map +1 -1
  10. package/dist/dtos/create-dashboard-layout.dto.d.ts +8 -0
  11. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +1 -0
  12. package/dist/dtos/create-dashboard-layout.dto.js +53 -0
  13. package/dist/dtos/create-dashboard-layout.dto.js.map +1 -0
  14. package/dist/dtos/create-dashboard-variable.dto.d.ts +1 -0
  15. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +1 -1
  16. package/dist/dtos/create-dashboard-variable.dto.js +7 -1
  17. package/dist/dtos/create-dashboard-variable.dto.js.map +1 -1
  18. package/dist/dtos/update-dashboard-layout.dto.d.ts +8 -0
  19. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +1 -0
  20. package/dist/dtos/update-dashboard-layout.dto.js +53 -0
  21. package/dist/dtos/update-dashboard-layout.dto.js.map +1 -0
  22. package/dist/dtos/update-dashboard-variable.dto.d.ts +1 -0
  23. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +1 -1
  24. package/dist/dtos/update-dashboard-variable.dto.js +7 -1
  25. package/dist/dtos/update-dashboard-variable.dto.js.map +1 -1
  26. package/dist/entities/action-metadata.entity.d.ts.map +1 -1
  27. package/dist/entities/action-metadata.entity.js.map +1 -1
  28. package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
  29. package/dist/entities/ai-interaction.entity.js +5 -4
  30. package/dist/entities/ai-interaction.entity.js.map +1 -1
  31. package/dist/entities/chatter-message-details.entity.d.ts +1 -0
  32. package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
  33. package/dist/entities/chatter-message-details.entity.js +9 -4
  34. package/dist/entities/chatter-message-details.entity.js.map +1 -1
  35. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  36. package/dist/entities/chatter-message.entity.js +4 -3
  37. package/dist/entities/chatter-message.entity.js.map +1 -1
  38. package/dist/entities/common.entity.js +1 -1
  39. package/dist/entities/common.entity.js.map +1 -1
  40. package/dist/entities/dashboard-layout.entity.d.ts +9 -0
  41. package/dist/entities/dashboard-layout.entity.d.ts.map +1 -0
  42. package/dist/entities/dashboard-layout.entity.js +41 -0
  43. package/dist/entities/dashboard-layout.entity.js.map +1 -0
  44. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +1 -1
  45. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +5 -4
  46. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
  47. package/dist/entities/dashboard-question.entity.d.ts.map +1 -1
  48. package/dist/entities/dashboard-question.entity.js +5 -4
  49. package/dist/entities/dashboard-question.entity.js.map +1 -1
  50. package/dist/entities/dashboard-variable.entity.d.ts +1 -0
  51. package/dist/entities/dashboard-variable.entity.d.ts.map +1 -1
  52. package/dist/entities/dashboard-variable.entity.js +10 -4
  53. package/dist/entities/dashboard-variable.entity.js.map +1 -1
  54. package/dist/entities/dashboard.entity.d.ts +2 -0
  55. package/dist/entities/dashboard.entity.d.ts.map +1 -1
  56. package/dist/entities/dashboard.entity.js +9 -3
  57. package/dist/entities/dashboard.entity.js.map +1 -1
  58. package/dist/entities/email-attachment.entity.d.ts.map +1 -1
  59. package/dist/entities/email-attachment.entity.js +2 -1
  60. package/dist/entities/email-attachment.entity.js.map +1 -1
  61. package/dist/entities/email-template.entity.js +1 -1
  62. package/dist/entities/email-template.entity.js.map +1 -1
  63. package/dist/entities/export-transaction.entity.d.ts.map +1 -1
  64. package/dist/entities/export-transaction.entity.js +2 -1
  65. package/dist/entities/export-transaction.entity.js.map +1 -1
  66. package/dist/entities/field-metadata.entity.js +2 -2
  67. package/dist/entities/field-metadata.entity.js.map +1 -1
  68. package/dist/entities/import-transaction-error-log.entity.d.ts.map +1 -1
  69. package/dist/entities/import-transaction-error-log.entity.js +3 -2
  70. package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
  71. package/dist/entities/import-transaction.entity.d.ts.map +1 -1
  72. package/dist/entities/import-transaction.entity.js +2 -1
  73. package/dist/entities/import-transaction.entity.js.map +1 -1
  74. package/dist/entities/legacy-common.entity.d.ts.map +1 -1
  75. package/dist/entities/legacy-common.entity.js +1 -1
  76. package/dist/entities/legacy-common.entity.js.map +1 -1
  77. package/dist/entities/mq-message-queue.entity.d.ts.map +1 -1
  78. package/dist/entities/mq-message-queue.entity.js.map +1 -1
  79. package/dist/entities/mq-message.entity.d.ts.map +1 -1
  80. package/dist/entities/mq-message.entity.js +5 -3
  81. package/dist/entities/mq-message.entity.js.map +1 -1
  82. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  83. package/dist/entities/saved-filters.entity.js +3 -2
  84. package/dist/entities/saved-filters.entity.js.map +1 -1
  85. package/dist/entities/security-rule.entity.d.ts.map +1 -1
  86. package/dist/entities/security-rule.entity.js +2 -1
  87. package/dist/entities/security-rule.entity.js.map +1 -1
  88. package/dist/entities/sms-template.entity.js +1 -1
  89. package/dist/entities/sms-template.entity.js.map +1 -1
  90. package/dist/entities/user-view-metadata.entity.d.ts.map +1 -1
  91. package/dist/entities/user-view-metadata.entity.js +2 -1
  92. package/dist/entities/user-view-metadata.entity.js.map +1 -1
  93. package/dist/entities/user.entity.d.ts.map +1 -1
  94. package/dist/entities/user.entity.js +2 -0
  95. package/dist/entities/user.entity.js.map +1 -1
  96. package/dist/entities/view-metadata.entity.d.ts.map +1 -1
  97. package/dist/entities/view-metadata.entity.js.map +1 -1
  98. package/dist/helpers/bootstrap.helper.d.ts +14 -0
  99. package/dist/helpers/bootstrap.helper.d.ts.map +1 -0
  100. package/dist/helpers/bootstrap.helper.js +132 -0
  101. package/dist/helpers/bootstrap.helper.js.map +1 -0
  102. package/dist/helpers/cache.helper.d.ts +2 -0
  103. package/dist/helpers/cache.helper.d.ts.map +1 -0
  104. package/dist/helpers/cache.helper.js +8 -0
  105. package/dist/helpers/cache.helper.js.map +1 -0
  106. package/dist/helpers/cors.helper.d.ts.map +1 -1
  107. package/dist/helpers/cors.helper.js +13 -4
  108. package/dist/helpers/cors.helper.js.map +1 -1
  109. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts +2 -2
  110. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts.map +1 -1
  111. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js +8 -5
  112. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
  113. package/dist/helpers/solid-registry.d.ts +3 -0
  114. package/dist/helpers/solid-registry.d.ts.map +1 -1
  115. package/dist/helpers/solid-registry.js +7 -0
  116. package/dist/helpers/solid-registry.js.map +1 -1
  117. package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
  118. package/dist/helpers/typeorm-db-helper.js +21 -0
  119. package/dist/helpers/typeorm-db-helper.js.map +1 -1
  120. package/dist/index.d.ts +56 -15
  121. package/dist/index.d.ts.map +1 -1
  122. package/dist/index.js +56 -15
  123. package/dist/index.js.map +1 -1
  124. package/dist/interfaces.d.ts +8 -2
  125. package/dist/interfaces.d.ts.map +1 -1
  126. package/dist/interfaces.js +1 -0
  127. package/dist/interfaces.js.map +1 -1
  128. package/dist/jobs/database/chatter-queue-options-database.d.ts +8 -0
  129. package/dist/jobs/database/chatter-queue-options-database.d.ts.map +1 -0
  130. package/dist/jobs/database/chatter-queue-options-database.js +10 -0
  131. package/dist/jobs/database/chatter-queue-options-database.js.map +1 -0
  132. package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts +12 -0
  133. package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts.map +1 -0
  134. package/dist/jobs/database/chatter-queue-publisher-database.service.js +39 -0
  135. package/dist/jobs/database/chatter-queue-publisher-database.service.js.map +1 -0
  136. package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts +19 -0
  137. package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -0
  138. package/dist/jobs/database/chatter-queue-subscriber-database.service.js +62 -0
  139. package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -0
  140. package/dist/jobs/{api-email-publisher.service.d.ts → rabbitmq/api-email-publisher.service.d.ts} +1 -1
  141. package/dist/jobs/rabbitmq/api-email-publisher.service.d.ts.map +1 -0
  142. package/dist/jobs/{api-email-publisher.service.js → rabbitmq/api-email-publisher.service.js} +3 -3
  143. package/dist/jobs/rabbitmq/api-email-publisher.service.js.map +1 -0
  144. package/dist/jobs/{api-email-queue-options.d.ts → rabbitmq/api-email-queue-options.d.ts} +1 -1
  145. package/dist/jobs/rabbitmq/api-email-queue-options.d.ts.map +1 -0
  146. package/dist/jobs/{api-email-queue-options.js → rabbitmq/api-email-queue-options.js} +1 -1
  147. package/dist/jobs/rabbitmq/api-email-queue-options.js.map +1 -0
  148. package/dist/jobs/{api-email-subscriber.service.d.ts → rabbitmq/api-email-subscriber.service.d.ts} +2 -2
  149. package/dist/jobs/rabbitmq/api-email-subscriber.service.d.ts.map +1 -0
  150. package/dist/jobs/{api-email-subscriber.service.js → rabbitmq/api-email-subscriber.service.js} +4 -4
  151. package/dist/jobs/rabbitmq/api-email-subscriber.service.js.map +1 -0
  152. package/dist/jobs/{chatter-queue-options.d.ts → rabbitmq/chatter-queue-options.d.ts} +1 -1
  153. package/dist/jobs/rabbitmq/chatter-queue-options.d.ts.map +1 -0
  154. package/dist/jobs/{chatter-queue-options.js → rabbitmq/chatter-queue-options.js} +2 -2
  155. package/dist/jobs/rabbitmq/chatter-queue-options.js.map +1 -0
  156. package/dist/jobs/rabbitmq/chatter-queue-publisher.service.d.ts +22 -0
  157. package/dist/jobs/rabbitmq/chatter-queue-publisher.service.d.ts.map +1 -0
  158. package/dist/jobs/{chatter-queue-publisher.service.js → rabbitmq/chatter-queue-publisher.service.js} +8 -8
  159. package/dist/jobs/rabbitmq/chatter-queue-publisher.service.js.map +1 -0
  160. package/dist/jobs/{chatter-queue-subscriber.service.d.ts → rabbitmq/chatter-queue-subscriber.service.d.ts} +7 -7
  161. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.d.ts.map +1 -0
  162. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js +59 -0
  163. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js.map +1 -0
  164. package/dist/jobs/rabbitmq/computed-field-evaluation-publisher.service.d.ts.map +1 -0
  165. package/dist/jobs/{computed-field-evaluation-publisher.service.js → rabbitmq/computed-field-evaluation-publisher.service.js} +3 -3
  166. package/dist/jobs/rabbitmq/computed-field-evaluation-publisher.service.js.map +1 -0
  167. package/dist/jobs/{computed-field-evaluation-queue-options.d.ts → rabbitmq/computed-field-evaluation-queue-options.d.ts} +3 -1
  168. package/dist/jobs/rabbitmq/computed-field-evaluation-queue-options.d.ts.map +1 -0
  169. package/dist/jobs/{computed-field-evaluation-queue-options.js → rabbitmq/computed-field-evaluation-queue-options.js} +3 -1
  170. package/dist/jobs/rabbitmq/computed-field-evaluation-queue-options.js.map +1 -0
  171. package/dist/jobs/rabbitmq/computed-field-evaluation-subscriber.service.d.ts.map +1 -0
  172. package/dist/jobs/{computed-field-evaluation-subscriber.service.js → rabbitmq/computed-field-evaluation-subscriber.service.js} +5 -5
  173. package/dist/jobs/rabbitmq/computed-field-evaluation-subscriber.service.js.map +1 -0
  174. package/dist/jobs/{generate-code-publisher.service.d.ts → rabbitmq/generate-code-publisher.service.d.ts} +3 -3
  175. package/dist/jobs/rabbitmq/generate-code-publisher.service.d.ts.map +1 -0
  176. package/dist/jobs/{generate-code-publisher.service.js → rabbitmq/generate-code-publisher.service.js} +3 -3
  177. package/dist/jobs/rabbitmq/generate-code-publisher.service.js.map +1 -0
  178. package/dist/jobs/rabbitmq/generate-code-queue-options.d.ts +8 -0
  179. package/dist/jobs/rabbitmq/generate-code-queue-options.d.ts.map +1 -0
  180. package/dist/jobs/{generate-code-queue-options.js → rabbitmq/generate-code-queue-options.js} +1 -1
  181. package/dist/jobs/rabbitmq/generate-code-queue-options.js.map +1 -0
  182. package/dist/jobs/rabbitmq/generate-code-subscriber.service.d.ts.map +1 -0
  183. package/dist/jobs/{generate-code-subscriber.service.js → rabbitmq/generate-code-subscriber.service.js} +6 -6
  184. package/dist/jobs/rabbitmq/generate-code-subscriber.service.js.map +1 -0
  185. package/dist/jobs/{msg91-otp-publisher.service.d.ts → rabbitmq/msg91-otp-publisher.service.d.ts} +1 -1
  186. package/dist/jobs/rabbitmq/msg91-otp-publisher.service.d.ts.map +1 -0
  187. package/dist/jobs/{msg91-otp-publisher.service.js → rabbitmq/msg91-otp-publisher.service.js} +3 -3
  188. package/dist/jobs/rabbitmq/msg91-otp-publisher.service.js.map +1 -0
  189. package/dist/jobs/{msg91-otp-queue-options.d.ts → rabbitmq/msg91-otp-queue-options.d.ts} +1 -1
  190. package/dist/jobs/rabbitmq/msg91-otp-queue-options.d.ts.map +1 -0
  191. package/dist/jobs/{msg91-otp-queue-options.js → rabbitmq/msg91-otp-queue-options.js} +1 -1
  192. package/dist/jobs/rabbitmq/msg91-otp-queue-options.js.map +1 -0
  193. package/dist/jobs/{msg91-otp-subscriber.service.d.ts → rabbitmq/msg91-otp-subscriber.service.d.ts} +1 -1
  194. package/dist/jobs/rabbitmq/msg91-otp-subscriber.service.d.ts.map +1 -0
  195. package/dist/jobs/{msg91-otp-subscriber.service.js → rabbitmq/msg91-otp-subscriber.service.js} +5 -5
  196. package/dist/jobs/rabbitmq/msg91-otp-subscriber.service.js.map +1 -0
  197. package/dist/jobs/{msg91-sms-publisher.service.d.ts → rabbitmq/msg91-sms-publisher.service.d.ts} +1 -1
  198. package/dist/jobs/rabbitmq/msg91-sms-publisher.service.d.ts.map +1 -0
  199. package/dist/jobs/{msg91-sms-publisher.service.js → rabbitmq/msg91-sms-publisher.service.js} +3 -3
  200. package/dist/jobs/rabbitmq/msg91-sms-publisher.service.js.map +1 -0
  201. package/dist/jobs/{msg91-sms-queue-options.d.ts → rabbitmq/msg91-sms-queue-options.d.ts} +1 -1
  202. package/dist/jobs/rabbitmq/msg91-sms-queue-options.d.ts.map +1 -0
  203. package/dist/jobs/{msg91-sms-queue-options.js → rabbitmq/msg91-sms-queue-options.js} +1 -1
  204. package/dist/jobs/rabbitmq/msg91-sms-queue-options.js.map +1 -0
  205. package/dist/jobs/{msg91-sms-subscriber.service.d.ts → rabbitmq/msg91-sms-subscriber.service.d.ts} +1 -1
  206. package/dist/jobs/rabbitmq/msg91-sms-subscriber.service.d.ts.map +1 -0
  207. package/dist/jobs/{msg91-sms-subscriber.service.js → rabbitmq/msg91-sms-subscriber.service.js} +5 -5
  208. package/dist/jobs/rabbitmq/msg91-sms-subscriber.service.js.map +1 -0
  209. package/dist/jobs/{msg91-whatsapp-publisher.service.d.ts → rabbitmq/msg91-whatsapp-publisher.service.d.ts} +1 -1
  210. package/dist/jobs/rabbitmq/msg91-whatsapp-publisher.service.d.ts.map +1 -0
  211. package/dist/jobs/{msg91-whatsapp-publisher.service.js → rabbitmq/msg91-whatsapp-publisher.service.js} +3 -3
  212. package/dist/jobs/rabbitmq/msg91-whatsapp-publisher.service.js.map +1 -0
  213. package/dist/jobs/{msg91-whatsapp-queue-options.d.ts → rabbitmq/msg91-whatsapp-queue-options.d.ts} +1 -1
  214. package/dist/jobs/rabbitmq/msg91-whatsapp-queue-options.d.ts.map +1 -0
  215. package/dist/jobs/{msg91-whatsapp-queue-options.js → rabbitmq/msg91-whatsapp-queue-options.js} +1 -1
  216. package/dist/jobs/rabbitmq/msg91-whatsapp-queue-options.js.map +1 -0
  217. package/dist/jobs/{msg91-whatsapp-subscriber.service.d.ts → rabbitmq/msg91-whatsapp-subscriber.service.d.ts} +2 -2
  218. package/dist/jobs/rabbitmq/msg91-whatsapp-subscriber.service.d.ts.map +1 -0
  219. package/dist/jobs/{msg91-whatsapp-subscriber.service.js → rabbitmq/msg91-whatsapp-subscriber.service.js} +4 -4
  220. package/dist/jobs/rabbitmq/msg91-whatsapp-subscriber.service.js.map +1 -0
  221. package/dist/jobs/{smtp-email-publisher.service.d.ts → rabbitmq/smtp-email-publisher.service.d.ts} +1 -1
  222. package/dist/jobs/rabbitmq/smtp-email-publisher.service.d.ts.map +1 -0
  223. package/dist/jobs/{smtp-email-publisher.service.js → rabbitmq/smtp-email-publisher.service.js} +3 -3
  224. package/dist/jobs/rabbitmq/smtp-email-publisher.service.js.map +1 -0
  225. package/dist/jobs/{smtp-email-queue-options.d.ts → rabbitmq/smtp-email-queue-options.d.ts} +1 -1
  226. package/dist/jobs/rabbitmq/smtp-email-queue-options.d.ts.map +1 -0
  227. package/dist/jobs/{smtp-email-queue-options.js → rabbitmq/smtp-email-queue-options.js} +1 -1
  228. package/dist/jobs/rabbitmq/smtp-email-queue-options.js.map +1 -0
  229. package/dist/jobs/{smtp-email-subscriber.service.d.ts → rabbitmq/smtp-email-subscriber.service.d.ts} +2 -2
  230. package/dist/jobs/rabbitmq/smtp-email-subscriber.service.d.ts.map +1 -0
  231. package/dist/jobs/{smtp-email-subscriber.service.js → rabbitmq/smtp-email-subscriber.service.js} +4 -4
  232. package/dist/jobs/rabbitmq/smtp-email-subscriber.service.js.map +1 -0
  233. package/dist/jobs/{test-queue-options.d.ts → rabbitmq/test-queue-options.d.ts} +1 -1
  234. package/dist/jobs/rabbitmq/test-queue-options.d.ts.map +1 -0
  235. package/dist/jobs/{test-queue-options.js → rabbitmq/test-queue-options.js} +1 -1
  236. package/dist/jobs/rabbitmq/test-queue-options.js.map +1 -0
  237. package/dist/jobs/{test-queue-publisher.service.d.ts → rabbitmq/test-queue-publisher.service.d.ts} +3 -3
  238. package/dist/jobs/rabbitmq/test-queue-publisher.service.d.ts.map +1 -0
  239. package/dist/jobs/{test-queue-publisher.service.js → rabbitmq/test-queue-publisher.service.js} +3 -3
  240. package/dist/jobs/rabbitmq/test-queue-publisher.service.js.map +1 -0
  241. package/dist/jobs/{test-queue-subscriber.service.d.ts → rabbitmq/test-queue-subscriber.service.d.ts} +3 -3
  242. package/dist/jobs/rabbitmq/test-queue-subscriber.service.d.ts.map +1 -0
  243. package/dist/jobs/{test-queue-subscriber.service.js → rabbitmq/test-queue-subscriber.service.js} +3 -3
  244. package/dist/jobs/rabbitmq/test-queue-subscriber.service.js.map +1 -0
  245. package/dist/jobs/{three60-whatsapp-publisher.service.d.ts → rabbitmq/three60-whatsapp-publisher.service.d.ts} +1 -1
  246. package/dist/jobs/rabbitmq/three60-whatsapp-publisher.service.d.ts.map +1 -0
  247. package/dist/jobs/{three60-whatsapp-publisher.service.js → rabbitmq/three60-whatsapp-publisher.service.js} +3 -3
  248. package/dist/jobs/rabbitmq/three60-whatsapp-publisher.service.js.map +1 -0
  249. package/dist/jobs/{three60-whatsapp-queue-options.d.ts → rabbitmq/three60-whatsapp-queue-options.d.ts} +1 -1
  250. package/dist/jobs/rabbitmq/three60-whatsapp-queue-options.d.ts.map +1 -0
  251. package/dist/jobs/{three60-whatsapp-queue-options.js → rabbitmq/three60-whatsapp-queue-options.js} +1 -1
  252. package/dist/jobs/rabbitmq/three60-whatsapp-queue-options.js.map +1 -0
  253. package/dist/jobs/{three60-whatsapp-subscriber.service.d.ts → rabbitmq/three60-whatsapp-subscriber.service.d.ts} +1 -1
  254. package/dist/jobs/rabbitmq/three60-whatsapp-subscriber.service.d.ts.map +1 -0
  255. package/dist/jobs/{three60-whatsapp-subscriber.service.js → rabbitmq/three60-whatsapp-subscriber.service.js} +4 -4
  256. package/dist/jobs/rabbitmq/three60-whatsapp-subscriber.service.js.map +1 -0
  257. package/dist/jobs/{trigger-mcp-client-publisher.service.d.ts → rabbitmq/trigger-mcp-client-publisher.service.d.ts} +1 -1
  258. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts.map +1 -0
  259. package/dist/jobs/{trigger-mcp-client-publisher.service.js → rabbitmq/trigger-mcp-client-publisher.service.js} +3 -3
  260. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js.map +1 -0
  261. package/dist/jobs/{trigger-mcp-client-queue-options.d.ts → rabbitmq/trigger-mcp-client-queue-options.d.ts} +1 -1
  262. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts.map +1 -0
  263. package/dist/jobs/{trigger-mcp-client-queue-options.js → rabbitmq/trigger-mcp-client-queue-options.js} +1 -1
  264. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js.map +1 -0
  265. package/dist/jobs/{trigger-mcp-client-subscriber.service.d.ts → rabbitmq/trigger-mcp-client-subscriber.service.d.ts} +2 -2
  266. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts.map +1 -0
  267. package/dist/jobs/{trigger-mcp-client-subscriber.service.js → rabbitmq/trigger-mcp-client-subscriber.service.js} +5 -5
  268. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js.map +1 -0
  269. package/dist/jobs/{twilio-sms-publisher.service.d.ts → rabbitmq/twilio-sms-publisher.service.d.ts} +1 -1
  270. package/dist/jobs/rabbitmq/twilio-sms-publisher.service.d.ts.map +1 -0
  271. package/dist/jobs/{twilio-sms-publisher.service.js → rabbitmq/twilio-sms-publisher.service.js} +3 -3
  272. package/dist/jobs/rabbitmq/twilio-sms-publisher.service.js.map +1 -0
  273. package/dist/jobs/{twilio-sms-queue-options.d.ts → rabbitmq/twilio-sms-queue-options.d.ts} +1 -1
  274. package/dist/jobs/rabbitmq/twilio-sms-queue-options.d.ts.map +1 -0
  275. package/dist/jobs/{twilio-sms-queue-options.js → rabbitmq/twilio-sms-queue-options.js} +1 -1
  276. package/dist/jobs/rabbitmq/twilio-sms-queue-options.js.map +1 -0
  277. package/dist/jobs/{twilio-sms-subscriber.service.d.ts → rabbitmq/twilio-sms-subscriber.service.d.ts} +1 -1
  278. package/dist/jobs/rabbitmq/twilio-sms-subscriber.service.d.ts.map +1 -0
  279. package/dist/jobs/{twilio-sms-subscriber.service.js → rabbitmq/twilio-sms-subscriber.service.js} +6 -6
  280. package/dist/jobs/rabbitmq/twilio-sms-subscriber.service.js.map +1 -0
  281. package/dist/jobs/redis/api-email-publisher-redis.service.d.ts +11 -0
  282. package/dist/jobs/redis/api-email-publisher-redis.service.d.ts.map +1 -0
  283. package/dist/jobs/redis/api-email-publisher-redis.service.js +39 -0
  284. package/dist/jobs/redis/api-email-publisher-redis.service.js.map +1 -0
  285. package/dist/jobs/redis/api-email-queue-options-redis.d.ts +8 -0
  286. package/dist/jobs/redis/api-email-queue-options-redis.d.ts.map +1 -0
  287. package/dist/jobs/redis/api-email-queue-options-redis.js +10 -0
  288. package/dist/jobs/redis/api-email-queue-options-redis.js.map +1 -0
  289. package/dist/jobs/redis/api-email-subscriber-redis.service.d.ts +15 -0
  290. package/dist/jobs/redis/api-email-subscriber-redis.service.d.ts.map +1 -0
  291. package/dist/jobs/redis/api-email-subscriber-redis.service.js +45 -0
  292. package/dist/jobs/redis/api-email-subscriber-redis.service.js.map +1 -0
  293. package/dist/jobs/redis/chatter-queue-options-redis.d.ts +8 -0
  294. package/dist/jobs/redis/chatter-queue-options-redis.d.ts.map +1 -0
  295. package/dist/jobs/redis/chatter-queue-options-redis.js +10 -0
  296. package/dist/jobs/redis/chatter-queue-options-redis.js.map +1 -0
  297. package/dist/jobs/redis/chatter-queue-publisher-redis.service.d.ts +11 -0
  298. package/dist/jobs/redis/chatter-queue-publisher-redis.service.d.ts.map +1 -0
  299. package/dist/jobs/redis/chatter-queue-publisher-redis.service.js +39 -0
  300. package/dist/jobs/redis/chatter-queue-publisher-redis.service.js.map +1 -0
  301. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.d.ts +17 -0
  302. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.d.ts.map +1 -0
  303. package/dist/jobs/{chatter-queue-subscriber.service.js → redis/chatter-queue-subscriber-redis.service.js} +18 -18
  304. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js.map +1 -0
  305. package/dist/jobs/redis/computed-field-evaluation-publisher-redis.service.d.ts +12 -0
  306. package/dist/jobs/redis/computed-field-evaluation-publisher-redis.service.d.ts.map +1 -0
  307. package/dist/jobs/redis/computed-field-evaluation-publisher-redis.service.js +39 -0
  308. package/dist/jobs/redis/computed-field-evaluation-publisher-redis.service.js.map +1 -0
  309. package/dist/jobs/redis/computed-field-evaluation-queue-options-redis.d.ts +9 -0
  310. package/dist/jobs/redis/computed-field-evaluation-queue-options-redis.d.ts.map +1 -0
  311. package/dist/jobs/redis/computed-field-evaluation-queue-options-redis.js +11 -0
  312. package/dist/jobs/redis/computed-field-evaluation-queue-options-redis.js.map +1 -0
  313. package/dist/jobs/redis/computed-field-evaluation-subscriber-redis.service.d.ts +19 -0
  314. package/dist/jobs/redis/computed-field-evaluation-subscriber-redis.service.d.ts.map +1 -0
  315. package/dist/jobs/redis/computed-field-evaluation-subscriber-redis.service.js +63 -0
  316. package/dist/jobs/redis/computed-field-evaluation-subscriber-redis.service.js.map +1 -0
  317. package/dist/jobs/redis/generate-code-publisher-redis.service.d.ts +11 -0
  318. package/dist/jobs/redis/generate-code-publisher-redis.service.d.ts.map +1 -0
  319. package/dist/jobs/redis/generate-code-publisher-redis.service.js +39 -0
  320. package/dist/jobs/redis/generate-code-publisher-redis.service.js.map +1 -0
  321. package/dist/jobs/redis/generate-code-queue-options-redis.d.ts +8 -0
  322. package/dist/jobs/redis/generate-code-queue-options-redis.d.ts.map +1 -0
  323. package/dist/jobs/redis/generate-code-queue-options-redis.js +10 -0
  324. package/dist/jobs/redis/generate-code-queue-options-redis.js.map +1 -0
  325. package/dist/jobs/redis/generate-code-subscriber-redis.service.d.ts +18 -0
  326. package/dist/jobs/redis/generate-code-subscriber-redis.service.d.ts.map +1 -0
  327. package/dist/jobs/redis/generate-code-subscriber-redis.service.js +70 -0
  328. package/dist/jobs/redis/generate-code-subscriber-redis.service.js.map +1 -0
  329. package/dist/jobs/redis/msg91-otp-publisher-redis.service.d.ts +11 -0
  330. package/dist/jobs/redis/msg91-otp-publisher-redis.service.d.ts.map +1 -0
  331. package/dist/jobs/redis/msg91-otp-publisher-redis.service.js +39 -0
  332. package/dist/jobs/redis/msg91-otp-publisher-redis.service.js.map +1 -0
  333. package/dist/jobs/redis/msg91-otp-queue-options-redis.d.ts +8 -0
  334. package/dist/jobs/redis/msg91-otp-queue-options-redis.d.ts.map +1 -0
  335. package/dist/jobs/redis/msg91-otp-queue-options-redis.js +10 -0
  336. package/dist/jobs/redis/msg91-otp-queue-options-redis.js.map +1 -0
  337. package/dist/jobs/redis/msg91-otp-subscriber-redis.service.d.ts +15 -0
  338. package/dist/jobs/redis/msg91-otp-subscriber-redis.service.d.ts.map +1 -0
  339. package/dist/jobs/redis/msg91-otp-subscriber-redis.service.js +47 -0
  340. package/dist/jobs/redis/msg91-otp-subscriber-redis.service.js.map +1 -0
  341. package/dist/jobs/redis/msg91-sms-publisher-redis.service.d.ts +11 -0
  342. package/dist/jobs/redis/msg91-sms-publisher-redis.service.d.ts.map +1 -0
  343. package/dist/jobs/redis/msg91-sms-publisher-redis.service.js +39 -0
  344. package/dist/jobs/redis/msg91-sms-publisher-redis.service.js.map +1 -0
  345. package/dist/jobs/redis/msg91-sms-queue-options-redis.d.ts +8 -0
  346. package/dist/jobs/redis/msg91-sms-queue-options-redis.d.ts.map +1 -0
  347. package/dist/jobs/redis/msg91-sms-queue-options-redis.js +10 -0
  348. package/dist/jobs/redis/msg91-sms-queue-options-redis.js.map +1 -0
  349. package/dist/jobs/redis/msg91-sms-subscriber-redis.service.d.ts +15 -0
  350. package/dist/jobs/redis/msg91-sms-subscriber-redis.service.d.ts.map +1 -0
  351. package/dist/jobs/redis/msg91-sms-subscriber-redis.service.js +47 -0
  352. package/dist/jobs/redis/msg91-sms-subscriber-redis.service.js.map +1 -0
  353. package/dist/jobs/redis/msg91-whatsapp-publisher-redis.service.d.ts +11 -0
  354. package/dist/jobs/redis/msg91-whatsapp-publisher-redis.service.d.ts.map +1 -0
  355. package/dist/jobs/redis/msg91-whatsapp-publisher-redis.service.js +39 -0
  356. package/dist/jobs/redis/msg91-whatsapp-publisher-redis.service.js.map +1 -0
  357. package/dist/jobs/redis/msg91-whatsapp-queue-options-redis.d.ts +8 -0
  358. package/dist/jobs/redis/msg91-whatsapp-queue-options-redis.d.ts.map +1 -0
  359. package/dist/jobs/redis/msg91-whatsapp-queue-options-redis.js +10 -0
  360. package/dist/jobs/redis/msg91-whatsapp-queue-options-redis.js.map +1 -0
  361. package/dist/jobs/redis/msg91-whatsapp-subscriber-redis.service.d.ts +15 -0
  362. package/dist/jobs/redis/msg91-whatsapp-subscriber-redis.service.d.ts.map +1 -0
  363. package/dist/jobs/redis/msg91-whatsapp-subscriber-redis.service.js +45 -0
  364. package/dist/jobs/redis/msg91-whatsapp-subscriber-redis.service.js.map +1 -0
  365. package/dist/jobs/redis/smtp-email-publisher-redis.service.d.ts +11 -0
  366. package/dist/jobs/redis/smtp-email-publisher-redis.service.d.ts.map +1 -0
  367. package/dist/jobs/redis/smtp-email-publisher-redis.service.js +39 -0
  368. package/dist/jobs/redis/smtp-email-publisher-redis.service.js.map +1 -0
  369. package/dist/jobs/redis/smtp-email-queue-options-redis.d.ts +8 -0
  370. package/dist/jobs/redis/smtp-email-queue-options-redis.d.ts.map +1 -0
  371. package/dist/jobs/redis/smtp-email-queue-options-redis.js +10 -0
  372. package/dist/jobs/redis/smtp-email-queue-options-redis.js.map +1 -0
  373. package/dist/jobs/redis/smtp-email-subscriber-redis.service.d.ts +15 -0
  374. package/dist/jobs/redis/smtp-email-subscriber-redis.service.d.ts.map +1 -0
  375. package/dist/jobs/redis/smtp-email-subscriber-redis.service.js +45 -0
  376. package/dist/jobs/redis/smtp-email-subscriber-redis.service.js.map +1 -0
  377. package/dist/jobs/{generate-code-queue-options.d.ts → redis/test-queue-options-redis.d.ts} +2 -2
  378. package/dist/jobs/redis/test-queue-options-redis.d.ts.map +1 -0
  379. package/dist/jobs/redis/test-queue-options-redis.js +10 -0
  380. package/dist/jobs/redis/test-queue-options-redis.js.map +1 -0
  381. package/dist/jobs/redis/test-queue-publisher-redis.service.d.ts +11 -0
  382. package/dist/jobs/redis/test-queue-publisher-redis.service.d.ts.map +1 -0
  383. package/dist/jobs/redis/test-queue-publisher-redis.service.js +39 -0
  384. package/dist/jobs/redis/test-queue-publisher-redis.service.js.map +1 -0
  385. package/dist/jobs/redis/test-queue-subscriber-redis.service.d.ts +14 -0
  386. package/dist/jobs/redis/test-queue-subscriber-redis.service.d.ts.map +1 -0
  387. package/dist/jobs/redis/test-queue-subscriber-redis.service.js +56 -0
  388. package/dist/jobs/redis/test-queue-subscriber-redis.service.js.map +1 -0
  389. package/dist/jobs/redis/three60-whatsapp-publisher-redis.service.d.ts +11 -0
  390. package/dist/jobs/redis/three60-whatsapp-publisher-redis.service.d.ts.map +1 -0
  391. package/dist/jobs/redis/three60-whatsapp-publisher-redis.service.js +39 -0
  392. package/dist/jobs/redis/three60-whatsapp-publisher-redis.service.js.map +1 -0
  393. package/dist/jobs/redis/three60-whatsapp-queue-options-redis.d.ts +8 -0
  394. package/dist/jobs/redis/three60-whatsapp-queue-options-redis.d.ts.map +1 -0
  395. package/dist/jobs/redis/three60-whatsapp-queue-options-redis.js +10 -0
  396. package/dist/jobs/redis/three60-whatsapp-queue-options-redis.js.map +1 -0
  397. package/dist/jobs/redis/three60-whatsapp-subscriber-redis.service.d.ts +15 -0
  398. package/dist/jobs/redis/three60-whatsapp-subscriber-redis.service.d.ts.map +1 -0
  399. package/dist/jobs/redis/three60-whatsapp-subscriber-redis.service.js +45 -0
  400. package/dist/jobs/redis/three60-whatsapp-subscriber-redis.service.js.map +1 -0
  401. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +11 -0
  402. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts.map +1 -0
  403. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js +39 -0
  404. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js.map +1 -0
  405. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts +8 -0
  406. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts.map +1 -0
  407. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js +10 -0
  408. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js.map +1 -0
  409. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +18 -0
  410. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts.map +1 -0
  411. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js +103 -0
  412. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js.map +1 -0
  413. package/dist/jobs/redis/twilio-sms-publisher-redis.service.d.ts +11 -0
  414. package/dist/jobs/redis/twilio-sms-publisher-redis.service.d.ts.map +1 -0
  415. package/dist/jobs/redis/twilio-sms-publisher-redis.service.js +39 -0
  416. package/dist/jobs/redis/twilio-sms-publisher-redis.service.js.map +1 -0
  417. package/dist/jobs/redis/twilio-sms-queue-options-redis.d.ts +8 -0
  418. package/dist/jobs/redis/twilio-sms-queue-options-redis.d.ts.map +1 -0
  419. package/dist/jobs/redis/twilio-sms-queue-options-redis.js +10 -0
  420. package/dist/jobs/redis/twilio-sms-queue-options-redis.js.map +1 -0
  421. package/dist/jobs/redis/twilio-sms-subscriber-redis.service.d.ts +17 -0
  422. package/dist/jobs/redis/twilio-sms-subscriber-redis.service.d.ts.map +1 -0
  423. package/dist/jobs/redis/twilio-sms-subscriber-redis.service.js +50 -0
  424. package/dist/jobs/redis/twilio-sms-subscriber-redis.service.js.map +1 -0
  425. package/dist/repository/dashboard-layout.repository.d.ts +12 -0
  426. package/dist/repository/dashboard-layout.repository.d.ts.map +1 -0
  427. package/dist/repository/dashboard-layout.repository.js +34 -0
  428. package/dist/repository/dashboard-layout.repository.js.map +1 -0
  429. package/dist/repository/model-metadata.repository.d.ts +6 -1
  430. package/dist/repository/model-metadata.repository.d.ts.map +1 -1
  431. package/dist/repository/model-metadata.repository.js +41 -2
  432. package/dist/repository/model-metadata.repository.js.map +1 -1
  433. package/dist/seeders/module-metadata-seeder.service.js +4 -4
  434. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  435. package/dist/seeders/seed-data/solid-core-metadata.json +502 -66
  436. package/dist/services/authentication.service.d.ts.map +1 -1
  437. package/dist/services/authentication.service.js +45 -21
  438. package/dist/services/authentication.service.js.map +1 -1
  439. package/dist/services/chatter-message.service.d.ts +4 -4
  440. package/dist/services/chatter-message.service.d.ts.map +1 -1
  441. package/dist/services/chatter-message.service.js +59 -9
  442. package/dist/services/chatter-message.service.js.map +1 -1
  443. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +7 -3
  444. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -1
  445. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +61 -22
  446. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -1
  447. package/dist/services/crud.service.js +1 -1
  448. package/dist/services/crud.service.js.map +1 -1
  449. package/dist/services/dashboard-layout.service.d.ts +20 -0
  450. package/dist/services/dashboard-layout.service.d.ts.map +1 -0
  451. package/dist/services/dashboard-layout.service.js +120 -0
  452. package/dist/services/dashboard-layout.service.js.map +1 -0
  453. package/dist/services/dashboard-question.service.d.ts +4 -0
  454. package/dist/services/dashboard-question.service.d.ts.map +1 -1
  455. package/dist/services/dashboard-question.service.js +22 -8
  456. package/dist/services/dashboard-question.service.js.map +1 -1
  457. package/dist/services/dashboard.service.d.ts +2 -0
  458. package/dist/services/dashboard.service.d.ts.map +1 -1
  459. package/dist/services/dashboard.service.js +4 -0
  460. package/dist/services/dashboard.service.js.map +1 -1
  461. package/dist/services/model-metadata.service.d.ts +3 -1
  462. package/dist/services/model-metadata.service.d.ts.map +1 -1
  463. package/dist/services/model-metadata.service.js +122 -8
  464. package/dist/services/model-metadata.service.js.map +1 -1
  465. package/dist/services/permission-metadata.service.d.ts +5 -1
  466. package/dist/services/permission-metadata.service.d.ts.map +1 -1
  467. package/dist/services/permission-metadata.service.js +66 -20
  468. package/dist/services/permission-metadata.service.js.map +1 -1
  469. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +2 -4
  470. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +1 -1
  471. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +2 -1
  472. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +1 -1
  473. package/dist/services/question-data-providers/interfaces.d.ts +1 -0
  474. package/dist/services/question-data-providers/interfaces.d.ts.map +1 -0
  475. package/dist/services/question-data-providers/interfaces.js +1 -0
  476. package/dist/services/question-data-providers/interfaces.js.map +1 -0
  477. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +2 -5
  478. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +1 -1
  479. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +2 -1
  480. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +1 -1
  481. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +2 -5
  482. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +1 -1
  483. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +2 -1
  484. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +1 -1
  485. package/dist/services/queues/database-subscriber.service.d.ts +4 -2
  486. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  487. package/dist/services/queues/database-subscriber.service.js +15 -2
  488. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  489. package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
  490. package/dist/services/queues/publisher-factory.service.js +4 -7
  491. package/dist/services/queues/publisher-factory.service.js.map +1 -1
  492. package/dist/services/queues/rabbitmq-publisher.service.d.ts +1 -0
  493. package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
  494. package/dist/services/queues/rabbitmq-publisher.service.js +6 -1
  495. package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
  496. package/dist/services/queues/rabbitmq-subscriber.service.d.ts +9 -3
  497. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  498. package/dist/services/queues/rabbitmq-subscriber.service.js +93 -10
  499. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  500. package/dist/services/queues/redis-publisher.service.d.ts +18 -0
  501. package/dist/services/queues/redis-publisher.service.d.ts.map +1 -1
  502. package/dist/services/queues/redis-publisher.service.js +86 -0
  503. package/dist/services/queues/redis-publisher.service.js.map +1 -1
  504. package/dist/services/queues/redis-subscriber.service.d.ts +26 -0
  505. package/dist/services/queues/redis-subscriber.service.d.ts.map +1 -1
  506. package/dist/services/queues/redis-subscriber.service.js +182 -0
  507. package/dist/services/queues/redis-subscriber.service.js.map +1 -1
  508. package/dist/services/request-context.service.d.ts +2 -1
  509. package/dist/services/request-context.service.d.ts.map +1 -1
  510. package/dist/services/request-context.service.js.map +1 -1
  511. package/dist/services/scheduled-job.service.d.ts +6 -1
  512. package/dist/services/scheduled-job.service.d.ts.map +1 -1
  513. package/dist/services/scheduled-job.service.js +26 -2
  514. package/dist/services/scheduled-job.service.js.map +1 -1
  515. package/dist/services/scheduled-jobs/scheduler.interface.d.ts +2 -0
  516. package/dist/services/scheduled-jobs/scheduler.interface.d.ts.map +1 -1
  517. package/dist/services/scheduled-jobs/scheduler.interface.js.map +1 -1
  518. package/dist/services/scheduled-jobs/scheduler.service.d.ts +6 -2
  519. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  520. package/dist/services/scheduled-jobs/scheduler.service.js +75 -17
  521. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  522. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +1 -1
  523. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +4 -1
  524. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +1 -1
  525. package/dist/services/solid-introspect.service.d.ts +6 -1
  526. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  527. package/dist/services/solid-introspect.service.js +27 -2
  528. package/dist/services/solid-introspect.service.js.map +1 -1
  529. package/dist/services/solid-ts-morph.service.d.ts +9 -0
  530. package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
  531. package/dist/services/solid-ts-morph.service.js +76 -0
  532. package/dist/services/solid-ts-morph.service.js.map +1 -1
  533. package/dist/solid-core.module.d.ts.map +1 -1
  534. package/dist/solid-core.module.js +86 -22
  535. package/dist/solid-core.module.js.map +1 -1
  536. package/dist/subscribers/audit.subscriber.d.ts +10 -7
  537. package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
  538. package/dist/subscribers/audit.subscriber.js +58 -85
  539. package/dist/subscribers/audit.subscriber.js.map +1 -1
  540. package/dist/subscribers/computed-entity-field.subscriber.js +3 -1
  541. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  542. package/dist/subscribers/created-by-updated-by.subscriber.d.ts +0 -1
  543. package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
  544. package/dist/subscribers/created-by-updated-by.subscriber.js +3 -13
  545. package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
  546. package/dist/transformers/typeorm/local-date-time-transformer.d.ts +4 -4
  547. package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
  548. package/dist/transformers/typeorm/local-date-time-transformer.js +25 -28
  549. package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
  550. package/dist/winston.logger.d.ts.map +1 -1
  551. package/dist/winston.logger.js +2 -1
  552. package/dist/winston.logger.js.map +1 -1
  553. package/package.json +3 -1
  554. package/sql/default/mariadb/proc_CleanupModelMetadata.sql +153 -0
  555. package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +56 -0
  556. package/sql/default/mysql/proc_CleanupModelMetadata.sql +153 -0
  557. package/sql/default/mysql/proc_CleanupModuleMetadata.sql +56 -0
  558. package/src/controllers/dashboard-layout.controller.ts +106 -0
  559. package/src/controllers/scheduled-job.controller.ts +6 -0
  560. package/src/dtos/create-dashboard-layout.dto.ts +31 -0
  561. package/src/dtos/create-dashboard-variable.dto.ts +4 -0
  562. package/src/dtos/update-dashboard-layout.dto.ts +30 -0
  563. package/src/dtos/update-dashboard-variable.dto.ts +5 -1
  564. package/src/entities/action-metadata.entity.ts +3 -2
  565. package/src/entities/ai-interaction.entity.ts +5 -4
  566. package/src/entities/chatter-message-details.entity.ts +7 -3
  567. package/src/entities/chatter-message.entity.ts +4 -3
  568. package/src/entities/common.entity.ts +2 -2
  569. package/src/entities/dashboard-layout.entity.ts +18 -0
  570. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +5 -4
  571. package/src/entities/dashboard-question.entity.ts +5 -4
  572. package/src/entities/dashboard-variable.entity.ts +9 -4
  573. package/src/entities/dashboard.entity.ts +7 -2
  574. package/src/entities/email-attachment.entity.ts +2 -1
  575. package/src/entities/email-template.entity.ts +1 -1
  576. package/src/entities/export-transaction.entity.ts +2 -1
  577. package/src/entities/field-metadata.entity.ts +2 -2
  578. package/src/entities/import-transaction-error-log.entity.ts +3 -2
  579. package/src/entities/import-transaction.entity.ts +2 -1
  580. package/src/entities/legacy-common.entity.ts +3 -4
  581. package/src/entities/mq-message-queue.entity.ts +8 -8
  582. package/src/entities/mq-message.entity.ts +5 -3
  583. package/src/entities/saved-filters.entity.ts +3 -2
  584. package/src/entities/security-rule.entity.ts +2 -1
  585. package/src/entities/sms-template.entity.ts +1 -1
  586. package/src/entities/user-view-metadata.entity.ts +2 -1
  587. package/src/entities/user.entity.ts +37 -2
  588. package/src/entities/view-metadata.entity.ts +3 -0
  589. package/src/helpers/bootstrap.helper.ts +222 -0
  590. package/src/helpers/cache.helper.ts +5 -0
  591. package/src/helpers/cors.helper.ts +26 -6
  592. package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +9 -6
  593. package/src/helpers/solid-registry.ts +10 -5
  594. package/src/helpers/typeorm-db-helper.ts +26 -0
  595. package/src/index.ts +57 -15
  596. package/src/interfaces.ts +12 -2
  597. package/src/jobs/database/chatter-queue-options-database.ts +9 -0
  598. package/src/jobs/database/chatter-queue-publisher-database.service.ts +24 -0
  599. package/src/jobs/database/chatter-queue-subscriber-database.service.ts +53 -0
  600. package/src/jobs/{api-email-publisher.service.ts → rabbitmq/api-email-publisher.service.ts} +1 -1
  601. package/src/jobs/{api-email-queue-options.ts → rabbitmq/api-email-queue-options.ts} +1 -1
  602. package/src/jobs/{api-email-subscriber.service.ts → rabbitmq/api-email-subscriber.service.ts} +2 -2
  603. package/src/jobs/{chatter-queue-options.ts → rabbitmq/chatter-queue-options.ts} +2 -2
  604. package/src/jobs/rabbitmq/chatter-queue-publisher.service.ts +37 -0
  605. package/src/jobs/{chatter-queue-subscriber.service.ts → rabbitmq/chatter-queue-subscriber.service.ts} +16 -11
  606. package/src/jobs/{computed-field-evaluation-publisher.service.ts → rabbitmq/computed-field-evaluation-publisher.service.ts} +1 -1
  607. package/src/jobs/{computed-field-evaluation-queue-options.ts → rabbitmq/computed-field-evaluation-queue-options.ts} +3 -1
  608. package/src/jobs/{generate-code-publisher.service.ts → rabbitmq/generate-code-publisher.service.ts} +3 -3
  609. package/src/jobs/{generate-code-queue-options.ts → rabbitmq/generate-code-queue-options.ts} +1 -1
  610. package/src/jobs/{msg91-otp-publisher.service.ts → rabbitmq/msg91-otp-publisher.service.ts} +1 -1
  611. package/src/jobs/{msg91-otp-queue-options.ts → rabbitmq/msg91-otp-queue-options.ts} +2 -2
  612. package/src/jobs/{msg91-otp-subscriber.service.ts → rabbitmq/msg91-otp-subscriber.service.ts} +2 -2
  613. package/src/jobs/{msg91-sms-publisher.service.ts → rabbitmq/msg91-sms-publisher.service.ts} +1 -1
  614. package/src/jobs/{msg91-sms-queue-options.ts → rabbitmq/msg91-sms-queue-options.ts} +2 -2
  615. package/src/jobs/{msg91-sms-subscriber.service.ts → rabbitmq/msg91-sms-subscriber.service.ts} +2 -2
  616. package/src/jobs/{msg91-whatsapp-publisher.service.ts → rabbitmq/msg91-whatsapp-publisher.service.ts} +1 -1
  617. package/src/jobs/{msg91-whatsapp-queue-options.ts → rabbitmq/msg91-whatsapp-queue-options.ts} +1 -1
  618. package/src/jobs/{msg91-whatsapp-subscriber.service.ts → rabbitmq/msg91-whatsapp-subscriber.service.ts} +2 -2
  619. package/src/jobs/{smtp-email-publisher.service.ts → rabbitmq/smtp-email-publisher.service.ts} +1 -1
  620. package/src/jobs/{smtp-email-queue-options.ts → rabbitmq/smtp-email-queue-options.ts} +1 -1
  621. package/src/jobs/{smtp-email-subscriber.service.ts → rabbitmq/smtp-email-subscriber.service.ts} +2 -2
  622. package/src/jobs/{test-queue-options.ts → rabbitmq/test-queue-options.ts} +1 -1
  623. package/src/jobs/{test-queue-publisher.service.ts → rabbitmq/test-queue-publisher.service.ts} +3 -3
  624. package/src/jobs/{test-queue-subscriber.service.ts → rabbitmq/test-queue-subscriber.service.ts} +3 -3
  625. package/src/jobs/{three60-whatsapp-publisher.service.ts → rabbitmq/three60-whatsapp-publisher.service.ts} +1 -1
  626. package/src/jobs/{three60-whatsapp-queue-options.ts → rabbitmq/three60-whatsapp-queue-options.ts} +1 -1
  627. package/src/jobs/{three60-whatsapp-subscriber.service.ts → rabbitmq/three60-whatsapp-subscriber.service.ts} +1 -1
  628. package/src/jobs/{trigger-mcp-client-publisher.service.ts → rabbitmq/trigger-mcp-client-publisher.service.ts} +2 -2
  629. package/src/jobs/{trigger-mcp-client-queue-options.ts → rabbitmq/trigger-mcp-client-queue-options.ts} +1 -1
  630. package/src/jobs/{trigger-mcp-client-subscriber.service.ts → rabbitmq/trigger-mcp-client-subscriber.service.ts} +2 -2
  631. package/src/jobs/{twilio-sms-publisher.service.ts → rabbitmq/twilio-sms-publisher.service.ts} +1 -1
  632. package/src/jobs/{twilio-sms-queue-options.ts → rabbitmq/twilio-sms-queue-options.ts} +1 -1
  633. package/src/jobs/{twilio-sms-subscriber.service.ts → rabbitmq/twilio-sms-subscriber.service.ts} +1 -1
  634. package/src/jobs/redis/api-email-publisher-redis.service.ts +23 -0
  635. package/src/jobs/redis/api-email-queue-options-redis.ts +9 -0
  636. package/src/jobs/redis/api-email-subscriber-redis.service.ts +30 -0
  637. package/src/jobs/redis/chatter-queue-options-redis.ts +9 -0
  638. package/src/jobs/redis/chatter-queue-publisher-redis.service.ts +23 -0
  639. package/src/jobs/redis/chatter-queue-subscriber-redis.service.ts +46 -0
  640. package/src/jobs/redis/computed-field-evaluation-publisher-redis.service.ts +24 -0
  641. package/src/jobs/redis/computed-field-evaluation-queue-options-redis.ts +10 -0
  642. package/src/jobs/redis/computed-field-evaluation-subscriber-redis.service.ts +48 -0
  643. package/src/jobs/redis/generate-code-publisher-redis.service.ts +23 -0
  644. package/src/jobs/redis/generate-code-queue-options-redis.ts +9 -0
  645. package/src/jobs/redis/generate-code-subscriber-redis.service.ts +57 -0
  646. package/src/jobs/redis/msg91-otp-publisher-redis.service.ts +23 -0
  647. package/src/jobs/redis/msg91-otp-queue-options-redis.ts +9 -0
  648. package/src/jobs/redis/msg91-otp-subscriber-redis.service.ts +32 -0
  649. package/src/jobs/redis/msg91-sms-publisher-redis.service.ts +23 -0
  650. package/src/jobs/redis/msg91-sms-queue-options-redis.ts +9 -0
  651. package/src/jobs/redis/msg91-sms-subscriber-redis.service.ts +32 -0
  652. package/src/jobs/redis/msg91-whatsapp-publisher-redis.service.ts +23 -0
  653. package/src/jobs/redis/msg91-whatsapp-queue-options-redis.ts +9 -0
  654. package/src/jobs/redis/msg91-whatsapp-subscriber-redis.service.ts +30 -0
  655. package/src/jobs/redis/smtp-email-publisher-redis.service.ts +23 -0
  656. package/src/jobs/redis/smtp-email-queue-options-redis.ts +9 -0
  657. package/src/jobs/redis/smtp-email-subscriber-redis.service.ts +30 -0
  658. package/src/jobs/redis/test-queue-options-redis.ts +9 -0
  659. package/src/jobs/redis/test-queue-publisher-redis.service.ts +24 -0
  660. package/src/jobs/redis/test-queue-subscriber-redis.service.ts +44 -0
  661. package/src/jobs/redis/three60-whatsapp-publisher-redis.service.ts +23 -0
  662. package/src/jobs/redis/three60-whatsapp-queue-options-redis.ts +9 -0
  663. package/src/jobs/redis/three60-whatsapp-subscriber-redis.service.ts +30 -0
  664. package/src/jobs/redis/trigger-mcp-client-publisher-redis.service.ts +23 -0
  665. package/src/jobs/redis/trigger-mcp-client-queue-options-redis.ts +9 -0
  666. package/src/jobs/redis/trigger-mcp-client-subscriber-redis.service.ts +98 -0
  667. package/src/jobs/redis/twilio-sms-publisher-redis.service.ts +23 -0
  668. package/src/jobs/redis/twilio-sms-queue-options-redis.ts +9 -0
  669. package/src/jobs/redis/twilio-sms-subscriber-redis.service.ts +34 -0
  670. package/src/repository/dashboard-layout.repository.ts +17 -0
  671. package/src/repository/model-metadata.repository.ts +45 -2
  672. package/src/seeders/module-metadata-seeder.service.ts +5 -5
  673. package/src/seeders/seed-data/solid-core-metadata.json +503 -67
  674. package/src/services/authentication.service.ts +47 -24
  675. package/src/services/chatter-message.service.ts +67 -9
  676. package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +79 -40
  677. package/src/services/crud.service.ts +1 -1
  678. package/src/services/dashboard-layout.service.ts +111 -0
  679. package/src/services/dashboard-question.service.ts +23 -4
  680. package/src/services/dashboard.service.ts +7 -0
  681. package/src/services/model-metadata.service.ts +131 -50
  682. package/src/services/permission-metadata.service.ts +73 -20
  683. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +3 -7
  684. package/src/services/question-data-providers/interfaces.ts +0 -0
  685. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +4 -8
  686. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +4 -8
  687. package/src/services/queues/database-subscriber.service.ts +19 -2
  688. package/src/services/queues/publisher-factory.service.ts +9 -7
  689. package/src/services/queues/rabbitmq-publisher.service.ts +8 -2
  690. package/src/services/queues/rabbitmq-subscriber.service.ts +139 -11
  691. package/src/services/queues/redis-publisher.service.ts +94 -0
  692. package/src/services/queues/redis-subscriber.service.ts +208 -0
  693. package/src/services/request-context.service.ts +2 -1
  694. package/src/services/scheduled-job.service.ts +31 -2
  695. package/src/services/scheduled-jobs/scheduler.interface.ts +4 -1
  696. package/src/services/scheduled-jobs/scheduler.service.ts +82 -20
  697. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +4 -1
  698. package/src/services/solid-introspect.service.ts +28 -0
  699. package/src/services/solid-ts-morph.service.ts +98 -0
  700. package/src/solid-core.module.ts +91 -24
  701. package/src/subscribers/audit.subscriber.ts +63 -271
  702. package/src/subscribers/computed-entity-field.subscriber.ts +3 -3
  703. package/src/subscribers/created-by-updated-by.subscriber.ts +22 -16
  704. package/src/transformers/typeorm/local-date-time-transformer.ts +41 -33
  705. package/src/winston.logger.ts +2 -1
  706. package/dist/jobs/api-email-publisher.service.d.ts.map +0 -1
  707. package/dist/jobs/api-email-publisher.service.js.map +0 -1
  708. package/dist/jobs/api-email-queue-options.d.ts.map +0 -1
  709. package/dist/jobs/api-email-queue-options.js.map +0 -1
  710. package/dist/jobs/api-email-subscriber.service.d.ts.map +0 -1
  711. package/dist/jobs/api-email-subscriber.service.js.map +0 -1
  712. package/dist/jobs/chatter-queue-options.d.ts.map +0 -1
  713. package/dist/jobs/chatter-queue-options.js.map +0 -1
  714. package/dist/jobs/chatter-queue-publisher.service.d.ts +0 -22
  715. package/dist/jobs/chatter-queue-publisher.service.d.ts.map +0 -1
  716. package/dist/jobs/chatter-queue-publisher.service.js.map +0 -1
  717. package/dist/jobs/chatter-queue-subscriber.service.d.ts.map +0 -1
  718. package/dist/jobs/chatter-queue-subscriber.service.js.map +0 -1
  719. package/dist/jobs/computed-field-evaluation-publisher.service.d.ts.map +0 -1
  720. package/dist/jobs/computed-field-evaluation-publisher.service.js.map +0 -1
  721. package/dist/jobs/computed-field-evaluation-queue-options.d.ts.map +0 -1
  722. package/dist/jobs/computed-field-evaluation-queue-options.js.map +0 -1
  723. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts.map +0 -1
  724. package/dist/jobs/computed-field-evaluation-subscriber.service.js.map +0 -1
  725. package/dist/jobs/generate-code-publisher.service.d.ts.map +0 -1
  726. package/dist/jobs/generate-code-publisher.service.js.map +0 -1
  727. package/dist/jobs/generate-code-queue-options.d.ts.map +0 -1
  728. package/dist/jobs/generate-code-queue-options.js.map +0 -1
  729. package/dist/jobs/generate-code-subscriber.service.d.ts.map +0 -1
  730. package/dist/jobs/generate-code-subscriber.service.js.map +0 -1
  731. package/dist/jobs/msg91-otp-publisher.service.d.ts.map +0 -1
  732. package/dist/jobs/msg91-otp-publisher.service.js.map +0 -1
  733. package/dist/jobs/msg91-otp-queue-options.d.ts.map +0 -1
  734. package/dist/jobs/msg91-otp-queue-options.js.map +0 -1
  735. package/dist/jobs/msg91-otp-subscriber.service.d.ts.map +0 -1
  736. package/dist/jobs/msg91-otp-subscriber.service.js.map +0 -1
  737. package/dist/jobs/msg91-sms-publisher.service.d.ts.map +0 -1
  738. package/dist/jobs/msg91-sms-publisher.service.js.map +0 -1
  739. package/dist/jobs/msg91-sms-queue-options.d.ts.map +0 -1
  740. package/dist/jobs/msg91-sms-queue-options.js.map +0 -1
  741. package/dist/jobs/msg91-sms-subscriber.service.d.ts.map +0 -1
  742. package/dist/jobs/msg91-sms-subscriber.service.js.map +0 -1
  743. package/dist/jobs/msg91-whatsapp-publisher.service.d.ts.map +0 -1
  744. package/dist/jobs/msg91-whatsapp-publisher.service.js.map +0 -1
  745. package/dist/jobs/msg91-whatsapp-queue-options.d.ts.map +0 -1
  746. package/dist/jobs/msg91-whatsapp-queue-options.js.map +0 -1
  747. package/dist/jobs/msg91-whatsapp-subscriber.service.d.ts.map +0 -1
  748. package/dist/jobs/msg91-whatsapp-subscriber.service.js.map +0 -1
  749. package/dist/jobs/smtp-email-publisher.service.d.ts.map +0 -1
  750. package/dist/jobs/smtp-email-publisher.service.js.map +0 -1
  751. package/dist/jobs/smtp-email-queue-options.d.ts.map +0 -1
  752. package/dist/jobs/smtp-email-queue-options.js.map +0 -1
  753. package/dist/jobs/smtp-email-subscriber.service.d.ts.map +0 -1
  754. package/dist/jobs/smtp-email-subscriber.service.js.map +0 -1
  755. package/dist/jobs/test-queue-options.d.ts.map +0 -1
  756. package/dist/jobs/test-queue-options.js.map +0 -1
  757. package/dist/jobs/test-queue-publisher.service.d.ts.map +0 -1
  758. package/dist/jobs/test-queue-publisher.service.js.map +0 -1
  759. package/dist/jobs/test-queue-subscriber.service.d.ts.map +0 -1
  760. package/dist/jobs/test-queue-subscriber.service.js.map +0 -1
  761. package/dist/jobs/three60-whatsapp-publisher.service.d.ts.map +0 -1
  762. package/dist/jobs/three60-whatsapp-publisher.service.js.map +0 -1
  763. package/dist/jobs/three60-whatsapp-queue-options.d.ts.map +0 -1
  764. package/dist/jobs/three60-whatsapp-queue-options.js.map +0 -1
  765. package/dist/jobs/three60-whatsapp-subscriber.service.d.ts.map +0 -1
  766. package/dist/jobs/three60-whatsapp-subscriber.service.js.map +0 -1
  767. package/dist/jobs/trigger-mcp-client-publisher.service.d.ts.map +0 -1
  768. package/dist/jobs/trigger-mcp-client-publisher.service.js.map +0 -1
  769. package/dist/jobs/trigger-mcp-client-queue-options.d.ts.map +0 -1
  770. package/dist/jobs/trigger-mcp-client-queue-options.js.map +0 -1
  771. package/dist/jobs/trigger-mcp-client-subscriber.service.d.ts.map +0 -1
  772. package/dist/jobs/trigger-mcp-client-subscriber.service.js.map +0 -1
  773. package/dist/jobs/twilio-sms-publisher.service.d.ts.map +0 -1
  774. package/dist/jobs/twilio-sms-publisher.service.js.map +0 -1
  775. package/dist/jobs/twilio-sms-queue-options.d.ts.map +0 -1
  776. package/dist/jobs/twilio-sms-queue-options.js.map +0 -1
  777. package/dist/jobs/twilio-sms-subscriber.service.d.ts.map +0 -1
  778. package/dist/jobs/twilio-sms-subscriber.service.js.map +0 -1
  779. package/src/jobs/chatter-queue-publisher.service.ts +0 -37
  780. /package/dist/jobs/{computed-field-evaluation-publisher.service.d.ts → rabbitmq/computed-field-evaluation-publisher.service.d.ts} +0 -0
  781. /package/dist/jobs/{computed-field-evaluation-subscriber.service.d.ts → rabbitmq/computed-field-evaluation-subscriber.service.d.ts} +0 -0
  782. /package/dist/jobs/{generate-code-subscriber.service.d.ts → rabbitmq/generate-code-subscriber.service.d.ts} +0 -0
  783. /package/src/jobs/{computed-field-evaluation-subscriber.service.ts → rabbitmq/computed-field-evaluation-subscriber.service.ts} +0 -0
  784. /package/src/jobs/{generate-code-subscriber.service.ts → rabbitmq/generate-code-subscriber.service.ts} +0 -0
@@ -13,6 +13,7 @@ exports.ListOfDashboardQuestionProvidersSelectionProvider = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const selection_provider_decorator_1 = require("../../decorators/selection-provider.decorator");
15
15
  const solid_registry_1 = require("../../helpers/solid-registry");
16
+ const dashboard_question_service_1 = require("../dashboard-question.service");
16
17
  let ListOfDashboardQuestionProvidersSelectionProvider = class ListOfDashboardQuestionProvidersSelectionProvider {
17
18
  constructor(solidRegistry) {
18
19
  this.solidRegistry = solidRegistry;
@@ -32,7 +33,9 @@ let ListOfDashboardQuestionProvidersSelectionProvider = class ListOfDashboardQue
32
33
  }
33
34
  async values(query, ctxt) {
34
35
  const dashboardSelectionProviders = this.solidRegistry.getDashboardQuestionDataProviders();
35
- return dashboardSelectionProviders.map(i => {
36
+ return dashboardSelectionProviders
37
+ .filter(provider => !dashboard_question_service_1.INBUILT_SQL_DATA_PROVIDERS.includes(provider.name()))
38
+ .map(i => {
36
39
  return { label: i.name, value: i.name };
37
40
  });
38
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list-of-dashboard-question-providers-selection-provider.service.js","sourceRoot":"","sources":["../../../src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,gGAAgF;AAChF,iEAA2D;AAOpD,IAAM,iDAAiD,GAAvD,MAAM,iDAAiD;IAE1D,YACqB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAEjD,CAAC;IAED,IAAI;QACA,OAAO,mGAAmG,CAAC;IAC/G,CAAC;IAED,IAAI;QACA,OAAO,mDAAmD,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,IAA+B;QAC5D,MAAM,0BAA0B,GAAyD,IAAI,CAAC,aAAa,CAAC,wCAAwC,CAAC,WAAW,CAAC,CAAC;QAClK,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,0BAA0B,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC;IAClG,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAA+B;QACvD,MAAM,2BAA2B,GAAG,IAAI,CAAC,aAAa,CAAC,iCAAiC,EAAE,CAAA;QAE1F,OAAO,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACvC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA/BY,8GAAiD;4DAAjD,iDAAiD;IAF7D,IAAA,gDAAiB,GAAE;IACnB,IAAA,mBAAU,GAAE;qCAI2B,8BAAa;GAHxC,iDAAiD,CA+B7D","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { SelectionProvider } from \"src/decorators/selection-provider.decorator\";\nimport { SolidRegistry } from \"src/helpers/solid-registry\";\nimport { IDashboardQuestionDataProvider, IDashboardVariableSelectionProvider, ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from \"../../interfaces\";\nimport { SQL_DYNAMIC_PROVIDER_NAME } from \"../dashboard.service\";\n\n\n@SelectionProvider()\n@Injectable()\nexport class ListOfDashboardQuestionProvidersSelectionProvider implements ISelectionProvider<ISelectionProviderContext> {\n\n constructor(\n private readonly solidRegistry: SolidRegistry,\n ) {\n }\n\n help(): string {\n return \"# Allows one to dynamically fetch all the dashboard providers that are registered in the system. \";\n }\n\n name(): string {\n return 'ListOfDashboardQuestionProvidersSelectionProvider';\n }\n\n async value(optionValue: string, ctxt: ISelectionProviderContext): Promise<ISelectionProviderValues | any> {\n const dashboardSelectionProvider: IDashboardQuestionDataProvider<any, any> | undefined = this.solidRegistry.getDashboardQuestionDataProviderInstance(optionValue);\n if (!dashboardSelectionProvider) {\n return null;\n }\n\n return { label: dashboardSelectionProvider.name(), value: dashboardSelectionProvider.name() };\n }\n\n async values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {\n const dashboardSelectionProviders = this.solidRegistry.getDashboardQuestionDataProviders()\n //Exclude the SQL dynamic provider from the list, (since although it is a dashboard selection provider, it is not a valid option for the user to select)\n return dashboardSelectionProviders.map(i => {\n return { label: i.name, value: i.name };\n });\n }\n}"]}
1
+ {"version":3,"file":"list-of-dashboard-question-providers-selection-provider.service.js","sourceRoot":"","sources":["../../../src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,gGAAgF;AAChF,iEAA2D;AAG3D,8EAAyM;AAKlM,IAAM,iDAAiD,GAAvD,MAAM,iDAAiD;IAE1D,YACqB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAEjD,CAAC;IAED,IAAI;QACA,OAAO,mGAAmG,CAAC;IAC/G,CAAC;IAED,IAAI;QACA,OAAO,mDAAmD,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,IAA+B;QAC5D,MAAM,0BAA0B,GAAyD,IAAI,CAAC,aAAa,CAAC,wCAAwC,CAAC,WAAW,CAAC,CAAC;QAClK,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,0BAA0B,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC;IAClG,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAA+B;QACvD,MAAM,2BAA2B,GAAG,IAAI,CAAC,aAAa,CAAC,iCAAiC,EAAE,CAAA;QAE1F,OAAO,2BAA2B;aACjC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,uDAA0B,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;aACzE,GAAG,CAAC,CAAC,CAAC,EAAE;YACL,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAjCY,8GAAiD;4DAAjD,iDAAiD;IAF7D,IAAA,gDAAiB,GAAE;IACnB,IAAA,mBAAU,GAAE;qCAI2B,8BAAa;GAHxC,iDAAiD,CAiC7D","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { SelectionProvider } from \"src/decorators/selection-provider.decorator\";\nimport { SolidRegistry } from \"src/helpers/solid-registry\";\nimport { IDashboardQuestionDataProvider, IDashboardVariableSelectionProvider, ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from \"../../interfaces\";\nimport { SQL_DYNAMIC_PROVIDER_NAME } from \"../dashboard.service\";\nimport { CHARTJS_SQL_DATA_PROVIDER_NAME, INBUILT_SQL_DATA_PROVIDERS, PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME, PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME } from \"../dashboard-question.service\";\n\n\n@SelectionProvider()\n@Injectable()\nexport class ListOfDashboardQuestionProvidersSelectionProvider implements ISelectionProvider<ISelectionProviderContext> {\n\n constructor(\n private readonly solidRegistry: SolidRegistry,\n ) {\n }\n\n help(): string {\n return \"# Allows one to dynamically fetch all the dashboard providers that are registered in the system. \";\n }\n\n name(): string {\n return 'ListOfDashboardQuestionProvidersSelectionProvider';\n }\n\n async value(optionValue: string, ctxt: ISelectionProviderContext): Promise<ISelectionProviderValues | any> {\n const dashboardSelectionProvider: IDashboardQuestionDataProvider<any, any> | undefined = this.solidRegistry.getDashboardQuestionDataProviderInstance(optionValue);\n if (!dashboardSelectionProvider) {\n return null;\n }\n\n return { label: dashboardSelectionProvider.name(), value: dashboardSelectionProvider.name() };\n }\n\n async values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {\n const dashboardSelectionProviders = this.solidRegistry.getDashboardQuestionDataProviders()\n //Exclude the SQL dynamic provider from the list, (since although it is a dashboard selection provider, it is not a valid option for the user to select)\n return dashboardSelectionProviders\n .filter(provider => !INBUILT_SQL_DATA_PROVIDERS.includes(provider.name())) \n .map(i => {\n return { label: i.name, value: i.name };\n });\n }\n}"]}
@@ -1,5 +1,7 @@
1
1
  import { OnApplicationBootstrap } from '@nestjs/common';
2
2
  import { DiscoveryService, MetadataScanner, ModuleRef, Reflector } from '@nestjs/core';
3
+ import { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';
4
+ import { ModelMetadataRepository } from 'src/repository/model-metadata.repository';
3
5
  import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
4
6
  import { SolidRegistry } from 'src/helpers/solid-registry';
5
7
  import { AuditSubscriber } from 'src/subscribers/audit.subscriber';
@@ -16,9 +18,12 @@ export declare class SolidIntrospectService implements OnApplicationBootstrap {
16
18
  private readonly solidRegistry;
17
19
  private readonly moduleRef;
18
20
  private readonly settingService;
19
- constructor(discoveryService: DiscoveryService, reflector: Reflector, metadataScanner: MetadataScanner, solidRegistry: SolidRegistry, moduleRef: ModuleRef, settingService: SettingService);
21
+ private readonly modelMetadataRepo;
22
+ private readonly modelMetadataHelperService;
23
+ constructor(discoveryService: DiscoveryService, reflector: Reflector, metadataScanner: MetadataScanner, solidRegistry: SolidRegistry, moduleRef: ModuleRef, settingService: SettingService, modelMetadataRepo: ModelMetadataRepository, modelMetadataHelperService: ModelMetadataHelperService);
20
24
  private readonly logger;
21
25
  onApplicationBootstrap(): Promise<void>;
26
+ private cacheAuditableModels;
22
27
  bootstrapCoreTypeOrmSubscribers(dbModules: Array<InstanceWrapper<any>>): Promise<void>;
23
28
  isDashboardQuestionDataProvider(providerWrapper: InstanceWrapper<any>): boolean;
24
29
  private isSeeder;
@@ -1 +1 @@
1
- {"version":3,"file":"solid-introspect.service.d.ts","sourceRoot":"","sources":["../../src/services/solid-introspect.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAYzE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAEpG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,eAAO,MAAM,qBAAqB,iJAKjC,CAAC;AAEF,qBACa,sBAAuB,YAAW,sBAAsB;IAEjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBALd,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc;IAGjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAE5D,sBAAsB;IAqGtB,+BAA+B,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsE5F,+BAA+B,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC;IAWrE,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,oCAAoC;IAU5C,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,4BAA4B;IAYpC,OAAO,CAAC,QAAQ;IAuBhB,cAAc,CAAC,iBAAiB,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;IAK3D,WAAW,CAAC,YAAY,EAAE,MAAM;CAGjC"}
1
+ {"version":3,"file":"solid-introspect.service.d.ts","sourceRoot":"","sources":["../../src/services/solid-introspect.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAYzE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAEpG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,eAAO,MAAM,qBAAqB,iJAKjC,CAAC;AAEF,qBACa,sBAAuB,YAAW,sBAAsB;IAEjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAP1B,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,uBAAuB,EAC1C,0BAA0B,EAAE,0BAA0B;IAGzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAE5D,sBAAsB;YAsGd,oBAAoB;IAuB5B,+BAA+B,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsE5F,+BAA+B,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC;IAWrE,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,oCAAoC;IAU5C,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,4BAA4B;IAYpC,OAAO,CAAC,QAAQ;IAuBhB,cAAc,CAAC,iBAAiB,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;IAK3D,WAAW,CAAC,YAAY,EAAE,MAAM;CAGjC"}
@@ -14,6 +14,8 @@ exports.SolidIntrospectService = exports.coreSubscriberClasses = void 0;
14
14
  const strings_1 = require("@angular-devkit/core/src/utils/strings");
15
15
  const common_1 = require("@nestjs/common");
16
16
  const core_1 = require("@nestjs/core");
17
+ const model_metadata_helper_service_1 = require("../helpers/model-metadata-helper.service");
18
+ const model_metadata_repository_1 = require("../repository/model-metadata.repository");
17
19
  const typeorm_1 = require("@nestjs/typeorm");
18
20
  const computed_field_provider_decorator_1 = require("../decorators/computed-field-provider.decorator");
19
21
  const dashboard_question_data_provider_decorator_1 = require("../decorators/dashboard-question-data-provider.decorator");
@@ -40,13 +42,15 @@ exports.coreSubscriberClasses = [
40
42
  soft_delete_aware_event_subscriber_1.SoftDeleteAwareEventSubscriber
41
43
  ];
42
44
  let SolidIntrospectService = SolidIntrospectService_1 = class SolidIntrospectService {
43
- constructor(discoveryService, reflector, metadataScanner, solidRegistry, moduleRef, settingService) {
45
+ constructor(discoveryService, reflector, metadataScanner, solidRegistry, moduleRef, settingService, modelMetadataRepo, modelMetadataHelperService) {
44
46
  this.discoveryService = discoveryService;
45
47
  this.reflector = reflector;
46
48
  this.metadataScanner = metadataScanner;
47
49
  this.solidRegistry = solidRegistry;
48
50
  this.moduleRef = moduleRef;
49
51
  this.settingService = settingService;
52
+ this.modelMetadataRepo = modelMetadataRepo;
53
+ this.modelMetadataHelperService = modelMetadataHelperService;
50
54
  this.logger = new common_1.Logger(SolidIntrospectService_1.name);
51
55
  }
52
56
  async onApplicationBootstrap() {
@@ -114,8 +118,27 @@ let SolidIntrospectService = SolidIntrospectService_1 = class SolidIntrospectSer
114
118
  this.solidRegistry.registerSecurityRuleConfigProvider(securityRuleConfigProvider);
115
119
  });
116
120
  await this.bootstrapCoreTypeOrmSubscribers(solidDatabaseModules);
121
+ await this.cacheAuditableModels();
117
122
  await this.settingService.updateSettingsCache();
118
123
  }
124
+ async cacheAuditableModels() {
125
+ const models = await this.modelMetadataRepo.find({
126
+ where: { enableAuditTracking: true },
127
+ relations: { fields: true, module: true },
128
+ });
129
+ const auditableSet = new Set();
130
+ for (const model of models) {
131
+ const allFields = await this.modelMetadataHelperService.loadFieldHierarchy(model.singularName);
132
+ const hasAuditableField = allFields.some(field => field.enableAuditTracking &&
133
+ !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&
134
+ !(field.type === 'relation' && field.relationType === 'one-to-many'));
135
+ if (hasAuditableField) {
136
+ auditableSet.add(model.singularName.toLowerCase());
137
+ }
138
+ }
139
+ this.solidRegistry.registerAuditableModels(auditableSet);
140
+ this.logger.debug(`Cached ${auditableSet.size} auditable model(s): ${[...auditableSet].join(', ')}`);
141
+ }
119
142
  async bootstrapCoreTypeOrmSubscribers(dbModules) {
120
143
  for (const wrapper of dbModules) {
121
144
  const instance = wrapper.instance;
@@ -277,6 +300,8 @@ exports.SolidIntrospectService = SolidIntrospectService = SolidIntrospectService
277
300
  core_1.MetadataScanner,
278
301
  solid_registry_1.SolidRegistry,
279
302
  core_1.ModuleRef,
280
- setting_service_1.SettingService])
303
+ setting_service_1.SettingService,
304
+ model_metadata_repository_1.ModelMetadataRepository,
305
+ model_metadata_helper_service_1.ModelMetadataHelperService])
281
306
  ], SolidIntrospectService);
282
307
  //# sourceMappingURL=solid-introspect.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"solid-introspect.service.js","sourceRoot":"","sources":["../../src/services/solid-introspect.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { classify } from '@angular-devkit/core/src/utils/strings';\nimport { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common';\nimport { DiscoveryService, MetadataScanner, ModuleRef, Reflector } from '@nestjs/core';\nimport { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';\nimport { getDataSourceToken } from '@nestjs/typeorm';\nimport { IS_COMPUTED_FIELD_PROVIDER } from 'src/decorators/computed-field-provider.decorator';\nimport { IS_DASHBOARD_QUESTION_DATA_PROVIDER } from 'src/decorators/dashboard-question-data-provider.decorator';\nimport { IS_DASHBOARD_VARIABLE_SELECTION_PROVIDER } from 'src/decorators/dashboard-selection-provider.decorator';\nimport { IS_ERROR_CODE_PROVIDER } from 'src/decorators/error-codes-provider.decorator';\nimport { IS_MAIL_PROVIDER } from 'src/decorators/mail-provider.decorator';\nimport { IS_SCHEDULED_JOB_PROVIDER } from 'src/decorators/scheduled-job-provider.decorator';\nimport { IS_SECURITY_RULE_CONFIG_PROVIDER } from 'src/decorators/security-rule-config-provider.decorator';\nimport { IS_SELECTION_PROVIDER } from 'src/decorators/selection-provider.decorator';\nimport { IS_SOLID_DATABASE_MODULE } from 'src/decorators/solid-database-module.decorator';\nimport { IS_WA_PROVIDER } from 'src/decorators/whatsapp-provider.decorator';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { AuditSubscriber } from 'src/subscribers/audit.subscriber';\nimport { ComputedEntityFieldSubscriber } from 'src/subscribers/computed-entity-field.subscriber';\nimport { CreatedByUpdatedBySubscriber } from 'src/subscribers/created-by-updated-by.subscriber';\nimport { SoftDeleteAwareEventSubscriber } from 'src/subscribers/soft-delete-aware-event.subscriber';\nimport { DataSource } from 'typeorm';\nimport { CRUDService } from './crud.service';\nimport { IS_SETTINGS_PROVIDER } from 'src/decorators/settings-provider.decorator';\nimport { IS_SMS_PROVIDER } from 'src/decorators/sms-provider.decorator';\nimport { SettingService } from 'src/services/setting.service';\n\nexport const coreSubscriberClasses = [\n AuditSubscriber,\n ComputedEntityFieldSubscriber,\n CreatedByUpdatedBySubscriber,\n SoftDeleteAwareEventSubscriber\n];\n\n@Injectable()\nexport class SolidIntrospectService implements OnApplicationBootstrap {\n constructor(\n private readonly discoveryService: DiscoveryService,\n private readonly reflector: Reflector,\n private readonly metadataScanner: MetadataScanner,\n private readonly solidRegistry: SolidRegistry,\n private readonly moduleRef: ModuleRef,\n private readonly settingService: SettingService,\n ) { }\n\n private readonly logger = new Logger(SolidIntrospectService.name);\n\n async onApplicationBootstrap() {\n this.logger.debug('Introspecting the application for Solid metadata');\n\n // Register all seeders\n const seeders = this.discoveryService.getProviders().filter((provider) => this.isSeeder(provider));\n seeders.forEach((seeder) => {\n this.solidRegistry.registerSeeder(seeder);\n });\n\n // Register all IErrorCodeProvider implementations\n const errorCodeProviders = this.discoveryService.getProviders().filter((provider) => this.isErrorCodeProvider(provider));\n errorCodeProviders.forEach((errorCodeProvider) => {\n this.solidRegistry.registerErrorCodeProvider(errorCodeProvider);\n });\n\n // Register all ISelectionProvider implementations\n const selectionProviders = this.discoveryService.getProviders().filter((provider) => this.isSelectionProvider(provider));\n selectionProviders.forEach((selectionProvider) => {\n this.solidRegistry.registerSelectionProvider(selectionProvider);\n });\n\n // Register all ISettingsProvider implementations\n const settingsProviders = this.discoveryService.getProviders().filter((provider) => this.isSettingsProvider(provider));\n settingsProviders.forEach((settingsProvider) => {\n this.solidRegistry.registerSettingsProvider(settingsProvider);\n });\n\n // Register all IDashboardSelectionProvider implementations\n const dashboardVariableSelectionProviders = this.discoveryService.getProviders().filter((provider) => this.isDashboardVariableSelectionProvider(provider));\n dashboardVariableSelectionProviders.forEach((dashboardSelectionProvider) => {\n this.solidRegistry.registerDashboardVariableSelectionProvider(dashboardSelectionProvider);\n });\n\n // Register all IDashboardSelectionProvider implementations\n const dashboardQuestionDataProviders = this.discoveryService.getProviders().filter((provider) => this.isDashboardQuestionDataProvider(provider));\n dashboardQuestionDataProviders.forEach((provider) => {\n this.solidRegistry.registerDashboardQuestionDataProvider(provider);\n });\n\n // Register all IComputedProvider implementations\n const computedFieldProviders = this.discoveryService.getProviders().filter((provider) => this.isComputedFieldProvider(provider));\n computedFieldProviders.forEach((computedFieldProvider) => {\n this.solidRegistry.registerComputedFieldProvider(computedFieldProvider);\n });\n\n // Register all ISolidDatabaseModules implementations\n const solidDatabaseModules = this.discoveryService.getProviders().filter((provider) => this.isSolidDatabaseModule(provider));\n solidDatabaseModules.forEach((solidDatabaseModule) => {\n this.solidRegistry.registerSolidDatabaseModule(solidDatabaseModule);\n });\n\n // keep track of all the controllers & respective methods. \n const allControllers = this.discoveryService.getControllers().map((controller) => {\n const { instance } = controller;\n return {\n name: controller.name,\n methods: this.metadataScanner.getAllMethodNames(Object.getPrototypeOf(instance))\n };\n });\n\n this.solidRegistry.registerControllers(new Set(allControllers));\n\n // Register all modules\n const allModules = this.discoveryService.getProviders().filter((provider) => this.isModule(provider));\n this.solidRegistry.registerModules(allModules);\n\n // Register all IScheduledJob implementations\n const scheduledJobProviders = this.discoveryService.getProviders().filter((provider) => this.isScheduledJobProvider(provider));\n scheduledJobProviders.forEach((scheduledJobProvider) => {\n this.solidRegistry.registerScheduledJobProvider(scheduledJobProvider);\n });\n\n // Register all IMail implementations\n const mailProviders = this.discoveryService.getProviders().filter((provider) => this.isMailProvider(provider));\n mailProviders.forEach((mailProvider) => {\n this.solidRegistry.registerMailProvider(mailProvider);\n });\n\n // Register all IWhatsappTransport implementations\n const whatsappProviders = this.discoveryService.getProviders().filter((provider) => this.isWhatsappProvider(provider));\n whatsappProviders.forEach((whatsappProvider) => {\n this.solidRegistry.registerWhatsappProvider(whatsappProvider);\n });\n\n // Register all IWhatsappTransport implementations\n const smsProviders = this.discoveryService.getProviders().filter((provider) => this.isSmsProvider(provider));\n smsProviders.forEach((smsProvider) => {\n this.solidRegistry.registerSmsProvider(smsProvider);\n });\n\n // Register all ISecurityRuleConfigProvider implementations\n const securityRuleConfigProviders = this.discoveryService.getProviders().filter((provider) => this.isSecurityRuleConfigProvider(provider));\n securityRuleConfigProviders.forEach((securityRuleConfigProvider) => {\n this.solidRegistry.registerSecurityRuleConfigProvider(securityRuleConfigProvider);\n });\n\n // Register the core subscribers against all the configured database modules / datasources\n await this.bootstrapCoreTypeOrmSubscribers(solidDatabaseModules);\n await this.settingService.updateSettingsCache();\n }\n\n async bootstrapCoreTypeOrmSubscribers(dbModules: Array<InstanceWrapper<any>>): Promise<void> {\n // Register core subscribers for each Solid database module\n for (const wrapper of dbModules) {\n // Get the Database Module instance\n const instance = (wrapper as InstanceWrapper).instance as any;\n if (!instance || typeof instance.name !== 'function') {\n this.logger.warn('Skipping a solid DB module wrapper with no instance or name() method');\n continue;\n }\n\n // Get the DataSource for this module\n const dsName: string | undefined = instance.name();\n // getDataSourceToken() without name = default; pass dsName if non-default\n const token = dsName ? getDataSourceToken(dsName) : getDataSourceToken();\n let ds: DataSource | undefined;\n try {\n ds = this.moduleRef.get<DataSource>(token, { strict: false });\n } catch (err) {\n this.logger.warn(`DataSource token for \"${dsName ?? 'default'}\" not found: ${err?.message ?? err}`);\n }\n if (!ds) {\n this.logger.warn(`No DataSource found for module \"${dsName}\". Skipping subscriber registration.`);\n continue;\n }\n\n // Ensure DataSource is initialized (optional)\n if (!ds.isInitialized) {\n try {\n await ds.initialize(); // only if you need to initialize here; in many apps datasources are created earlier\n } catch (err) {\n this.logger.error(`Failed to initialize DataSource \"${dsName}\": ${err}`);\n continue;\n }\n }\n\n // Register each subscriber class for this DataSource\n // const auditSubscriberInstance = new AuditSubscriber(this.chatterMessageService, this.modelMetadataRepo, this.modelMetadataHelperService);\n // auditSubscriberInstance.bindToDataSource(ds);\n\n // const computedEntityFieldSubscriberInstance = new ComputedEntityFieldSubscriber(this.solidRegistry, this.publisherFactory);\n // computedEntityFieldSubscriberInstance.bindToDataSource(ds);\n\n // const createdByUpdatedBySubscriberInstance = new CreatedByUpdatedBySubscriber(this.requestContextService);\n // createdByUpdatedBySubscriberInstance.bindToDataSource(ds);\n\n // const softDeleteAwareEventSubscriberInstance = new SoftDeleteAwareEventSubscriber();\n // softDeleteAwareEventSubscriberInstance.bindToDataSource(ds);\n for (const SubClass of coreSubscriberClasses) {\n const alreadyRegistered = ds.subscribers.some(\n (s) => (s as any).constructor?.name === SubClass.name,\n );\n if (alreadyRegistered) {\n this.logger.debug(`Subscriber ${SubClass.name} already registered on datasource ${dsName ?? 'default'}`);\n continue;\n }\n\n // Resolve subscriber from NestJS moduleRef to ensure dependencies are injected\n const subscriberInstance = await this.moduleRef.resolve(SubClass, undefined, { strict: false });\n subscriberInstance.bindToDataSource(ds);\n\n // instantiate subscriber bound to this DataSource\n // NOTE: constructor signature must be (dataSource: DataSource, requestContextService: RequestContextService, ...)\n // const subscriberInstance = new (SubClass as any)(ds, this.requestContextService);\n\n // ds.subscribers.push(subscriberInstance);\n // this.logger.log(`Registered subscriber ${SubClass.name} on datasource ${dsName ?? 'default'}`);\n }\n }\n }\n\n isDashboardQuestionDataProvider(providerWrapper: InstanceWrapper<any>) {\n const { instance } = providerWrapper;\n if (!instance) return false;\n const provider = this.reflector.get<boolean>(\n IS_DASHBOARD_QUESTION_DATA_PROVIDER,\n instance.constructor,\n );\n return !!provider;\n }\n\n // This method identifies a provider as a seeder if it has a seed method i.e duck typing\n private isSeeder(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const seedMethod = this.metadataScanner.getAllMethodNames(Object.getPrototypeOf(instance)).find((methodName) => methodName === 'seed');\n if (!seedMethod) return false;\n return true;\n }\n\n private isErrorCodeProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isErrorCodeProvider = this.reflector.get<boolean>(\n IS_ERROR_CODE_PROVIDER,\n instance.constructor,\n );\n\n return !!isErrorCodeProvider;\n }\n\n private isSelectionProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSelectionProvider = this.reflector.get<boolean>(\n IS_SELECTION_PROVIDER,\n instance.constructor,\n );\n\n return !!isSelectionProvider;\n }\n\n private isSettingsProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSettingsProvider = this.reflector.get<boolean>(\n IS_SETTINGS_PROVIDER,\n instance.constructor,\n );\n\n return !!isSettingsProvider;\n }\n\n private isDashboardVariableSelectionProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n const isDashboardSelectionProvider = this.reflector.get<boolean>(\n IS_DASHBOARD_VARIABLE_SELECTION_PROVIDER,\n instance.constructor,\n );\n return !!isDashboardSelectionProvider;\n }\n\n private isComputedFieldProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isComputedFieldProvider = this.reflector.get<boolean>(\n IS_COMPUTED_FIELD_PROVIDER,\n instance.constructor,\n );\n\n return !!isComputedFieldProvider;\n }\n\n private isScheduledJobProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isScheduledJobProvider = this.reflector.get<boolean>(\n IS_SCHEDULED_JOB_PROVIDER,\n instance.constructor,\n );\n\n return !!isScheduledJobProvider;\n }\n\n private isSolidDatabaseModule(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSolidDatabaseModule = this.reflector.get<boolean>(\n IS_SOLID_DATABASE_MODULE,\n instance.constructor,\n );\n\n return !!isSolidDatabaseModule;\n }\n\n private isMailProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isMailProvider = this.reflector.get<boolean>(\n IS_MAIL_PROVIDER,\n instance.constructor,\n );\n\n return !!isMailProvider;\n }\n\n private isWhatsappProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isWhatsappProvider = this.reflector.get<boolean>(\n IS_WA_PROVIDER,\n instance.constructor,\n );\n\n return !!isWhatsappProvider;\n }\n\n private isSmsProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSmsProvider = this.reflector.get<boolean>(\n IS_SMS_PROVIDER,\n instance.constructor,\n );\n\n return !!isSmsProvider;\n }\n\n private isSecurityRuleConfigProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSecurityRuleConfigProvider = this.reflector.get<boolean>(\n IS_SECURITY_RULE_CONFIG_PROVIDER,\n instance.constructor,\n );\n\n return !!isSecurityRuleConfigProvider;\n }\n\n private isModule(provider: InstanceWrapper): boolean {\n const metatype = provider.metatype;\n // Check if it's a Static Module (Class-Based)\n if (metatype && typeof metatype === 'function' && Reflect.getMetadata('imports', metatype)) {\n return true;\n }\n\n // Ensure provider.instance is an object before checking for 'module'\n if (provider.instance && typeof provider.instance === 'object') {\n // Check if it's a Dynamic Module (Object-Based)\n if ('module' in provider.instance && typeof provider.instance.module === 'function') {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Given a model singular name this will return the crud service instance.\n * @param modelSingularName \n * @returns \n */\n getCRUDService(modelSingularName: string): CRUDService<any> {\n const provider = this.getProvider(`${classify(modelSingularName)}Service`);\n return provider?.instance as CRUDService<any>;\n }\n\n getProvider(providerName: string) {\n return this.discoveryService.getProviders().find((provider) => provider.name === providerName);\n }\n}\n"]}
1
+ {"version":3,"file":"solid-introspect.service.js","sourceRoot":"","sources":["../../src/services/solid-introspect.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { classify } from '@angular-devkit/core/src/utils/strings';\nimport { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common';\nimport { DiscoveryService, MetadataScanner, ModuleRef, Reflector } from '@nestjs/core';\nimport { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';\nimport { getDataSourceToken } from '@nestjs/typeorm';\nimport { IS_COMPUTED_FIELD_PROVIDER } from 'src/decorators/computed-field-provider.decorator';\nimport { IS_DASHBOARD_QUESTION_DATA_PROVIDER } from 'src/decorators/dashboard-question-data-provider.decorator';\nimport { IS_DASHBOARD_VARIABLE_SELECTION_PROVIDER } from 'src/decorators/dashboard-selection-provider.decorator';\nimport { IS_ERROR_CODE_PROVIDER } from 'src/decorators/error-codes-provider.decorator';\nimport { IS_MAIL_PROVIDER } from 'src/decorators/mail-provider.decorator';\nimport { IS_SCHEDULED_JOB_PROVIDER } from 'src/decorators/scheduled-job-provider.decorator';\nimport { IS_SECURITY_RULE_CONFIG_PROVIDER } from 'src/decorators/security-rule-config-provider.decorator';\nimport { IS_SELECTION_PROVIDER } from 'src/decorators/selection-provider.decorator';\nimport { IS_SOLID_DATABASE_MODULE } from 'src/decorators/solid-database-module.decorator';\nimport { IS_WA_PROVIDER } from 'src/decorators/whatsapp-provider.decorator';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { AuditSubscriber } from 'src/subscribers/audit.subscriber';\nimport { ComputedEntityFieldSubscriber } from 'src/subscribers/computed-entity-field.subscriber';\nimport { CreatedByUpdatedBySubscriber } from 'src/subscribers/created-by-updated-by.subscriber';\nimport { SoftDeleteAwareEventSubscriber } from 'src/subscribers/soft-delete-aware-event.subscriber';\nimport { DataSource } from 'typeorm';\nimport { CRUDService } from './crud.service';\nimport { IS_SETTINGS_PROVIDER } from 'src/decorators/settings-provider.decorator';\nimport { IS_SMS_PROVIDER } from 'src/decorators/sms-provider.decorator';\nimport { SettingService } from 'src/services/setting.service';\n\nexport const coreSubscriberClasses = [\n AuditSubscriber,\n ComputedEntityFieldSubscriber,\n CreatedByUpdatedBySubscriber,\n SoftDeleteAwareEventSubscriber\n];\n\n@Injectable()\nexport class SolidIntrospectService implements OnApplicationBootstrap {\n constructor(\n private readonly discoveryService: DiscoveryService,\n private readonly reflector: Reflector,\n private readonly metadataScanner: MetadataScanner,\n private readonly solidRegistry: SolidRegistry,\n private readonly moduleRef: ModuleRef,\n private readonly settingService: SettingService,\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly modelMetadataHelperService: ModelMetadataHelperService,\n ) { }\n\n private readonly logger = new Logger(SolidIntrospectService.name);\n\n async onApplicationBootstrap() {\n this.logger.debug('Introspecting the application for Solid metadata');\n\n // Register all seeders\n const seeders = this.discoveryService.getProviders().filter((provider) => this.isSeeder(provider));\n seeders.forEach((seeder) => {\n this.solidRegistry.registerSeeder(seeder);\n });\n\n // Register all IErrorCodeProvider implementations\n const errorCodeProviders = this.discoveryService.getProviders().filter((provider) => this.isErrorCodeProvider(provider));\n errorCodeProviders.forEach((errorCodeProvider) => {\n this.solidRegistry.registerErrorCodeProvider(errorCodeProvider);\n });\n\n // Register all ISelectionProvider implementations\n const selectionProviders = this.discoveryService.getProviders().filter((provider) => this.isSelectionProvider(provider));\n selectionProviders.forEach((selectionProvider) => {\n this.solidRegistry.registerSelectionProvider(selectionProvider);\n });\n\n // Register all ISettingsProvider implementations\n const settingsProviders = this.discoveryService.getProviders().filter((provider) => this.isSettingsProvider(provider));\n settingsProviders.forEach((settingsProvider) => {\n this.solidRegistry.registerSettingsProvider(settingsProvider);\n });\n\n // Register all IDashboardSelectionProvider implementations\n const dashboardVariableSelectionProviders = this.discoveryService.getProviders().filter((provider) => this.isDashboardVariableSelectionProvider(provider));\n dashboardVariableSelectionProviders.forEach((dashboardSelectionProvider) => {\n this.solidRegistry.registerDashboardVariableSelectionProvider(dashboardSelectionProvider);\n });\n\n // Register all IDashboardSelectionProvider implementations\n const dashboardQuestionDataProviders = this.discoveryService.getProviders().filter((provider) => this.isDashboardQuestionDataProvider(provider));\n dashboardQuestionDataProviders.forEach((provider) => {\n this.solidRegistry.registerDashboardQuestionDataProvider(provider);\n });\n\n // Register all IComputedProvider implementations\n const computedFieldProviders = this.discoveryService.getProviders().filter((provider) => this.isComputedFieldProvider(provider));\n computedFieldProviders.forEach((computedFieldProvider) => {\n this.solidRegistry.registerComputedFieldProvider(computedFieldProvider);\n });\n\n // Register all ISolidDatabaseModules implementations\n const solidDatabaseModules = this.discoveryService.getProviders().filter((provider) => this.isSolidDatabaseModule(provider));\n solidDatabaseModules.forEach((solidDatabaseModule) => {\n this.solidRegistry.registerSolidDatabaseModule(solidDatabaseModule);\n });\n\n // keep track of all the controllers & respective methods. \n const allControllers = this.discoveryService.getControllers().map((controller) => {\n const { instance } = controller;\n return {\n name: controller.name,\n methods: this.metadataScanner.getAllMethodNames(Object.getPrototypeOf(instance))\n };\n });\n\n this.solidRegistry.registerControllers(new Set(allControllers));\n\n // Register all modules\n const allModules = this.discoveryService.getProviders().filter((provider) => this.isModule(provider));\n this.solidRegistry.registerModules(allModules);\n\n // Register all IScheduledJob implementations\n const scheduledJobProviders = this.discoveryService.getProviders().filter((provider) => this.isScheduledJobProvider(provider));\n scheduledJobProviders.forEach((scheduledJobProvider) => {\n this.solidRegistry.registerScheduledJobProvider(scheduledJobProvider);\n });\n\n // Register all IMail implementations\n const mailProviders = this.discoveryService.getProviders().filter((provider) => this.isMailProvider(provider));\n mailProviders.forEach((mailProvider) => {\n this.solidRegistry.registerMailProvider(mailProvider);\n });\n\n // Register all IWhatsappTransport implementations\n const whatsappProviders = this.discoveryService.getProviders().filter((provider) => this.isWhatsappProvider(provider));\n whatsappProviders.forEach((whatsappProvider) => {\n this.solidRegistry.registerWhatsappProvider(whatsappProvider);\n });\n\n // Register all IWhatsappTransport implementations\n const smsProviders = this.discoveryService.getProviders().filter((provider) => this.isSmsProvider(provider));\n smsProviders.forEach((smsProvider) => {\n this.solidRegistry.registerSmsProvider(smsProvider);\n });\n\n // Register all ISecurityRuleConfigProvider implementations\n const securityRuleConfigProviders = this.discoveryService.getProviders().filter((provider) => this.isSecurityRuleConfigProvider(provider));\n securityRuleConfigProviders.forEach((securityRuleConfigProvider) => {\n this.solidRegistry.registerSecurityRuleConfigProvider(securityRuleConfigProvider);\n });\n\n // Register the core subscribers against all the configured database modules / datasources\n await this.bootstrapCoreTypeOrmSubscribers(solidDatabaseModules);\n await this.cacheAuditableModels();\n await this.settingService.updateSettingsCache();\n }\n\n private async cacheAuditableModels(): Promise<void> {\n const models = await this.modelMetadataRepo.find({\n where: { enableAuditTracking: true },\n relations: { fields: true, module: true },\n });\n\n const auditableSet = new Set<string>();\n for (const model of models) {\n const allFields = await this.modelMetadataHelperService.loadFieldHierarchy(model.singularName);\n const hasAuditableField = allFields.some(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n if (hasAuditableField) {\n auditableSet.add(model.singularName.toLowerCase());\n }\n }\n\n this.solidRegistry.registerAuditableModels(auditableSet);\n this.logger.debug(`Cached ${auditableSet.size} auditable model(s): ${[...auditableSet].join(', ')}`);\n }\n\n async bootstrapCoreTypeOrmSubscribers(dbModules: Array<InstanceWrapper<any>>): Promise<void> {\n // Register core subscribers for each Solid database module\n for (const wrapper of dbModules) {\n // Get the Database Module instance\n const instance = (wrapper as InstanceWrapper).instance as any;\n if (!instance || typeof instance.name !== 'function') {\n this.logger.warn('Skipping a solid DB module wrapper with no instance or name() method');\n continue;\n }\n\n // Get the DataSource for this module\n const dsName: string | undefined = instance.name();\n // getDataSourceToken() without name = default; pass dsName if non-default\n const token = dsName ? getDataSourceToken(dsName) : getDataSourceToken();\n let ds: DataSource | undefined;\n try {\n ds = this.moduleRef.get<DataSource>(token, { strict: false });\n } catch (err) {\n this.logger.warn(`DataSource token for \"${dsName ?? 'default'}\" not found: ${err?.message ?? err}`);\n }\n if (!ds) {\n this.logger.warn(`No DataSource found for module \"${dsName}\". Skipping subscriber registration.`);\n continue;\n }\n\n // Ensure DataSource is initialized (optional)\n if (!ds.isInitialized) {\n try {\n await ds.initialize(); // only if you need to initialize here; in many apps datasources are created earlier\n } catch (err) {\n this.logger.error(`Failed to initialize DataSource \"${dsName}\": ${err}`);\n continue;\n }\n }\n\n // Register each subscriber class for this DataSource\n // const auditSubscriberInstance = new AuditSubscriber(this.chatterMessageService, this.modelMetadataRepo, this.modelMetadataHelperService);\n // auditSubscriberInstance.bindToDataSource(ds);\n\n // const computedEntityFieldSubscriberInstance = new ComputedEntityFieldSubscriber(this.solidRegistry, this.publisherFactory);\n // computedEntityFieldSubscriberInstance.bindToDataSource(ds);\n\n // const createdByUpdatedBySubscriberInstance = new CreatedByUpdatedBySubscriber(this.requestContextService);\n // createdByUpdatedBySubscriberInstance.bindToDataSource(ds);\n\n // const softDeleteAwareEventSubscriberInstance = new SoftDeleteAwareEventSubscriber();\n // softDeleteAwareEventSubscriberInstance.bindToDataSource(ds);\n for (const SubClass of coreSubscriberClasses) {\n const alreadyRegistered = ds.subscribers.some(\n (s) => (s as any).constructor?.name === SubClass.name,\n );\n if (alreadyRegistered) {\n this.logger.debug(`Subscriber ${SubClass.name} already registered on datasource ${dsName ?? 'default'}`);\n continue;\n }\n\n // Resolve subscriber from NestJS moduleRef to ensure dependencies are injected\n const subscriberInstance = await this.moduleRef.resolve(SubClass, undefined, { strict: false });\n subscriberInstance.bindToDataSource(ds);\n\n // instantiate subscriber bound to this DataSource\n // NOTE: constructor signature must be (dataSource: DataSource, requestContextService: RequestContextService, ...)\n // const subscriberInstance = new (SubClass as any)(ds, this.requestContextService);\n\n // ds.subscribers.push(subscriberInstance);\n // this.logger.log(`Registered subscriber ${SubClass.name} on datasource ${dsName ?? 'default'}`);\n }\n }\n }\n\n isDashboardQuestionDataProvider(providerWrapper: InstanceWrapper<any>) {\n const { instance } = providerWrapper;\n if (!instance) return false;\n const provider = this.reflector.get<boolean>(\n IS_DASHBOARD_QUESTION_DATA_PROVIDER,\n instance.constructor,\n );\n return !!provider;\n }\n\n // This method identifies a provider as a seeder if it has a seed method i.e duck typing\n private isSeeder(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const seedMethod = this.metadataScanner.getAllMethodNames(Object.getPrototypeOf(instance)).find((methodName) => methodName === 'seed');\n if (!seedMethod) return false;\n return true;\n }\n\n private isErrorCodeProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isErrorCodeProvider = this.reflector.get<boolean>(\n IS_ERROR_CODE_PROVIDER,\n instance.constructor,\n );\n\n return !!isErrorCodeProvider;\n }\n\n private isSelectionProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSelectionProvider = this.reflector.get<boolean>(\n IS_SELECTION_PROVIDER,\n instance.constructor,\n );\n\n return !!isSelectionProvider;\n }\n\n private isSettingsProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSettingsProvider = this.reflector.get<boolean>(\n IS_SETTINGS_PROVIDER,\n instance.constructor,\n );\n\n return !!isSettingsProvider;\n }\n\n private isDashboardVariableSelectionProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n const isDashboardSelectionProvider = this.reflector.get<boolean>(\n IS_DASHBOARD_VARIABLE_SELECTION_PROVIDER,\n instance.constructor,\n );\n return !!isDashboardSelectionProvider;\n }\n\n private isComputedFieldProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isComputedFieldProvider = this.reflector.get<boolean>(\n IS_COMPUTED_FIELD_PROVIDER,\n instance.constructor,\n );\n\n return !!isComputedFieldProvider;\n }\n\n private isScheduledJobProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isScheduledJobProvider = this.reflector.get<boolean>(\n IS_SCHEDULED_JOB_PROVIDER,\n instance.constructor,\n );\n\n return !!isScheduledJobProvider;\n }\n\n private isSolidDatabaseModule(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSolidDatabaseModule = this.reflector.get<boolean>(\n IS_SOLID_DATABASE_MODULE,\n instance.constructor,\n );\n\n return !!isSolidDatabaseModule;\n }\n\n private isMailProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isMailProvider = this.reflector.get<boolean>(\n IS_MAIL_PROVIDER,\n instance.constructor,\n );\n\n return !!isMailProvider;\n }\n\n private isWhatsappProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isWhatsappProvider = this.reflector.get<boolean>(\n IS_WA_PROVIDER,\n instance.constructor,\n );\n\n return !!isWhatsappProvider;\n }\n\n private isSmsProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSmsProvider = this.reflector.get<boolean>(\n IS_SMS_PROVIDER,\n instance.constructor,\n );\n\n return !!isSmsProvider;\n }\n\n private isSecurityRuleConfigProvider(provider: InstanceWrapper) {\n const { instance } = provider;\n if (!instance) return false;\n\n const isSecurityRuleConfigProvider = this.reflector.get<boolean>(\n IS_SECURITY_RULE_CONFIG_PROVIDER,\n instance.constructor,\n );\n\n return !!isSecurityRuleConfigProvider;\n }\n\n private isModule(provider: InstanceWrapper): boolean {\n const metatype = provider.metatype;\n // Check if it's a Static Module (Class-Based)\n if (metatype && typeof metatype === 'function' && Reflect.getMetadata('imports', metatype)) {\n return true;\n }\n\n // Ensure provider.instance is an object before checking for 'module'\n if (provider.instance && typeof provider.instance === 'object') {\n // Check if it's a Dynamic Module (Object-Based)\n if ('module' in provider.instance && typeof provider.instance.module === 'function') {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Given a model singular name this will return the crud service instance.\n * @param modelSingularName \n * @returns \n */\n getCRUDService(modelSingularName: string): CRUDService<any> {\n const provider = this.getProvider(`${classify(modelSingularName)}Service`);\n return provider?.instance as CRUDService<any>;\n }\n\n getProvider(providerName: string) {\n return this.discoveryService.getProviders().find((provider) => provider.name === providerName);\n }\n}\n"]}
@@ -33,6 +33,15 @@ export declare class SolidTsMorphService {
33
33
  overwritten: boolean;
34
34
  skipped: boolean;
35
35
  };
36
+ removeImports(filePath: string, filter: (moduleSpecifier: string) => boolean): {
37
+ removedIdentifiers: Set<string>;
38
+ staged: boolean;
39
+ skipped: boolean;
40
+ };
41
+ removeModuleMembers(filePath: string, names: Set<string> | string[]): {
42
+ staged: boolean;
43
+ skipped: boolean;
44
+ };
36
45
  addImport(filePath: string, importLine: string): {
37
46
  staged: boolean;
38
47
  overwritten: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"solid-ts-morph.service.d.ts","sourceRoot":"","sources":["../../src/services/solid-ts-morph.service.ts"],"names":[],"mappings":"AAOA,KAAK,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;AAStC,qBACa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,OAAO,CAAU;IAGzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAA8D;IAClF,OAAO,CAAC,gBAAgB,CAAqB;IAG7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;;IA0BtD,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,GAAG;IAMX,KAAK,IAAI,IAAI;IAmBb,QAAQ,IAAI,IAAI;IAgBV,MAAM,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAiD1C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAqB/G,oBAAoB,CAChB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EACzB,WAAW,UAAO,GACnB;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE;IAyDtB,wBAAwB,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACnB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IA6B9D,wBAAwB,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAClB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAwB9D,SAAS,CACL,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACnB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;CA6CjE"}
1
+ {"version":3,"file":"solid-ts-morph.service.d.ts","sourceRoot":"","sources":["../../src/services/solid-ts-morph.service.ts"],"names":[],"mappings":"AAOA,KAAK,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;AAStC,qBACa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,OAAO,CAAU;IAGzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAA8D;IAClF,OAAO,CAAC,gBAAgB,CAAqB;IAG7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;;IA0BtD,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,GAAG;IAMX,KAAK,IAAI,IAAI;IAmBb,QAAQ,IAAI,IAAI;IAgBV,MAAM,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAiD1C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAqB/G,oBAAoB,CAChB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EACzB,WAAW,UAAO,GACnB;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE;IAyDtB,wBAAwB,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACnB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IA6B9D,wBAAwB,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAClB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IA2B9D,aAAa,CACT,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,GAC7C;QAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAqCzE,mBAAmB,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,GAC9B;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAoDxC,SAAS,CACL,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACnB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;CA6CjE"}
@@ -249,6 +249,82 @@ let SolidTsMorphService = SolidTsMorphService_1 = class SolidTsMorphService {
249
249
  this.logger.log(`Staged new line in ${this.rel(abs)}: ${lineToAdd}`);
250
250
  return { staged: true, overwritten: false, skipped: false };
251
251
  }
252
+ removeImports(filePath, filter) {
253
+ const abs = this.resolveRepoPath(filePath);
254
+ if (!(0, node_fs_1.existsSync)(abs)) {
255
+ this.logger.warn(`removeImport: file not found at ${filePath}, skipping.`);
256
+ return { removedIdentifiers: new Set(), staged: false, skipped: true };
257
+ }
258
+ const existing = this.project.getSourceFile(abs);
259
+ const sourceFile = existing
260
+ ? existing
261
+ : this.project.createSourceFile(abs, (0, node_fs_1.readFileSync)(abs, "utf8"), { overwrite: true });
262
+ const importsToRemove = sourceFile.getImportDeclarations().filter(decl => {
263
+ const spec = decl.getModuleSpecifierValue().replace(/\\/g, "/");
264
+ return filter(spec);
265
+ });
266
+ if (importsToRemove.length === 0) {
267
+ return { removedIdentifiers: new Set(), staged: false, skipped: true };
268
+ }
269
+ const removedIdentifiers = new Set();
270
+ for (const decl of importsToRemove) {
271
+ for (const named of decl.getNamedImports()) {
272
+ removedIdentifiers.add(named.getAliasNode()?.getText() ?? named.getName());
273
+ }
274
+ const defaultImport = decl.getDefaultImport();
275
+ if (defaultImport)
276
+ removedIdentifiers.add(defaultImport.getText());
277
+ decl.remove();
278
+ }
279
+ this.dirtySourceFiles.add(abs);
280
+ this.logger.log(`Staged removal of ${importsToRemove.length} import(s) in: ${this.rel(abs)}`);
281
+ return { removedIdentifiers, staged: true, skipped: false };
282
+ }
283
+ removeModuleMembers(filePath, names) {
284
+ const abs = this.resolveRepoPath(filePath);
285
+ if (!(0, node_fs_1.existsSync)(abs)) {
286
+ this.logger.warn(`removeImportMembers: file not found at ${filePath}, skipping.`);
287
+ return { staged: false, skipped: true };
288
+ }
289
+ const identifiers = names instanceof Set ? names : new Set(names);
290
+ if (identifiers.size === 0)
291
+ return { staged: false, skipped: true };
292
+ const existing = this.project.getSourceFile(abs);
293
+ const sourceFile = existing
294
+ ? existing
295
+ : this.project.createSourceFile(abs, (0, node_fs_1.readFileSync)(abs, "utf8"), { overwrite: true });
296
+ const nestModuleClass = sourceFile.getClasses().find(cls => cls.getDecorators().some(dec => dec.getName() === "Module"));
297
+ if (!nestModuleClass) {
298
+ this.logger.warn(`removeImportMembers: no @Module() class found in ${filePath}`);
299
+ return { staged: false, skipped: true };
300
+ }
301
+ const moduleDec = nestModuleClass.getDecorators().find(dec => dec.getName() === "Module");
302
+ const arg0 = moduleDec?.getCallExpression()?.getArguments()[0];
303
+ if (!arg0 || !ts_morph_1.Node.isObjectLiteralExpression(arg0))
304
+ return { staged: false, skipped: true };
305
+ const meta = arg0;
306
+ for (const propName of ["imports", "providers", "controllers", "exports"]) {
307
+ const prop = meta.getProperty(propName);
308
+ if (!prop || !ts_morph_1.Node.isPropertyAssignment(prop))
309
+ continue;
310
+ const init = prop.getInitializer();
311
+ if (!init || !ts_morph_1.Node.isArrayLiteralExpression(init))
312
+ continue;
313
+ const arr = init;
314
+ const elements = arr.getElements();
315
+ for (let i = elements.length - 1; i >= 0; i--) {
316
+ const elemText = elements[i].getText().trim();
317
+ const shouldRemove = identifiers.has(elemText) ||
318
+ [...identifiers].some(id => new RegExp(`\\b${id}\\b`).test(elemText));
319
+ if (shouldRemove) {
320
+ arr.removeElement(i);
321
+ }
322
+ }
323
+ }
324
+ this.dirtySourceFiles.add(abs);
325
+ this.logger.log(`Staged removal of [${[...identifiers].join(", ")}] from @Module arrays in: ${this.rel(abs)}`);
326
+ return { staged: true, skipped: false };
327
+ }
252
328
  addImport(filePath, importLine) {
253
329
  const abs = this.resolveRepoPath(filePath);
254
330
  if (!(0, node_fs_1.existsSync)(abs))
@@ -1 +1 @@
1
- {"version":3,"file":"solid-ts-morph.service.js","sourceRoot":"","sources":["../../src/services/solid-ts-morph.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AACA,2CAAoD;AACpD,yCAA2E;AAC3E,qCAA6E;AAC7E,uCAAsH;AAa/G,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAc5B;QAbiB,WAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;QAIvD,UAAK,GAAG,KAAK,CAAC;QACd,iBAAY,GAAG,IAAI,GAAG,EAAmD,CAAC;QAC1E,qBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QASzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG;YAChB,WAAW,EAAE,IAAA,gBAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;YAC7C,UAAU,EAAE,IAAA,gBAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;SAE9C,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CAAC;YACvB,2BAA2B,EAAE,IAAI;YACjC,oBAAoB,EAAE;gBAClB,SAAS,EAAE,oBAAS,CAAC,MAAM;gBAC3B,eAAe,EAAE,0BAAe,CAAC,UAAU;gBAC3C,qDAAqD,EAAE,IAAI;aAC9D;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IAGO,gBAAgB;QAIpB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC5C,IAAI,OAAO,IAAI,IAAA,sBAAU,EAAC,OAAO,CAAC;YAAE,OAAO,IAAA,qBAAS,EAAC,OAAO,CAAC,CAAC;QAG9D,MAAM,GAAG,GAAG,IAAA,qBAAS,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,IAAA,qBAAS,EAAC,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;QAGD,OAAO,GAAG,CAAC;IACf,CAAC;IAGO,eAAe,CAAC,OAAe;QACnC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,IAAA,qBAAS,EAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,IAAA,sBAAU,EAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAG5B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC5E,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3E,OAAO,IAAA,qBAAS,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QAGD,OAAO,IAAA,qBAAS,EAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC;IAGD,KAAK;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YACpF,OAAO;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CAAC;YACvB,2BAA2B,EAAE,IAAI;YACjC,oBAAoB,EAAE;gBAClB,SAAS,EAAE,oBAAS,CAAC,MAAM;gBAC3B,eAAe,EAAE,0BAAe,CAAC,UAAU;gBAC3C,qDAAqD,EAAE,IAAI;aAC9D;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CAAC;YACvB,2BAA2B,EAAE,IAAI;YACjC,oBAAoB,EAAE;gBAClB,SAAS,EAAE,oBAAS,CAAC,MAAM;gBAC3B,eAAe,EAAE,0BAAe,CAAC,UAAU;gBAC3C,qDAAqD,EAAE,IAAI;aAC9D;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YACtE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;QAGf,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACtE,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC;gBAAE,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,IAAA,oBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4CAA4C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACJ,IAAA,uBAAa,EAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACpC,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxG,CAAC;QACL,CAAC;QAGD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,EAAE,CAAC,iBAAiB,EAAE,CAAC;YACvB,EAAE,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CAAC;YACvB,2BAA2B,EAAE,IAAI;YACjC,oBAAoB,EAAE;gBAClB,SAAS,EAAE,oBAAS,CAAC,MAAM;gBAC3B,eAAe,EAAE,0BAAe,CAAC,UAAU;gBAC3C,qDAAqD,EAAE,IAAI;aAC9D;SACJ,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAGD,aAAa,CAAC,IAAY,EAAE,OAAe,EAAE,SAAS,GAAG,KAAK;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC;gBAAE,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,SAAS,GAAG,CAAC,CAAC;YACnF,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC;YAAE,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,IAAA,oBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;YAC5D,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACrD,CAAC;QACD,IAAA,uBAAa,EAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,UAAU,IAAI,EAAE,CAAC,CAAC;QAC3F,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACrD,CAAC;IAED,oBAAoB,CAChB,UAAkB,EAClB,iBAAyB,EACzB,UAAkB,EAClB,UAAyB,EACzB,WAAW,GAAG,IAAI;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,UAAU,EAAE,CAAC,CAAC;QAEtG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,QAAQ;YACvB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAA,sBAAY,EAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAGzF,MAAM,GAAG,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,EAAE,KAAK,UAAU,CAAC,CAAC;QACrG,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,iBAAiB,CAAC,CAAC;YACjF,IAAI,CAAC,GAAG;gBAAE,GAAG,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACJ,UAAU,CAAC,oBAAoB,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;QAGD,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACvD,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAC9D,CAAC;QACF,IAAI,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,UAAU,EAAE,CAAC,CAAC;QAEzG,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,SAAU,CAAC,iBAAiB,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,IAAI,GAAG,IAA+B,CAAC;QAE7C,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,EAAE;YACvC,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,IAAI,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClE,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,GAAuC,CAAC;YAC5C,IAAI,eAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACnC,IAAI,IAAI,IAAI,eAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;oBAAE,GAAG,GAAG,IAAI,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,uBAAuB,UAAU,EAAE,CAAC,CAAC;YAEzG,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAC;YACnG,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW;gBAAE,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACnE,CAAC,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,UAAU;YAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oCAAoC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAGD,wBAAwB,CACpB,QAAgB,EAChB,SAAiB,EACjB,UAAkB,EAClB,UAAkB;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,EAAE,CAAC,CAAC;QAE/E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,QAAQ;YACvB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAA,sBAAY,EAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzF,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW;YACZ,MAAM,IAAI,KAAK,CAAC,mCAAmC,SAAS,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAE7F,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,cAAc,EAAE,CAAC;YAEjB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,UAAU,oBAAoB,CAAC,CAAC;YAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChE,CAAC;QAED,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAGlC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,UAAU,cAAc,SAAS,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;IAED,wBAAwB,CACpB,QAAgB,EAChB,SAAiB;QAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,EAAE,CAAC,CAAC;QAE/E,MAAM,WAAW,GAAG,IAAA,sBAAY,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAG9C,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;YACtE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChE,CAAC;QAGD,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;QAG1E,IAAA,uBAAa,EAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAEvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;IAED,SAAS,CACL,QAAgB,EAChB,UAAkB;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QAEhE,IAAI,WAAW,GAAG,IAAA,sBAAY,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAG5C,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2CAA2C,UAAU,EAAE,CAAC,CAAC;YACzE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChE,CAAC;QAGD,MAAM,WAAW,GAAG,wBAAwB,CAAC;QAC7C,IAAI,eAAuC,CAAC;QAC5C,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;QAEzB,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChE,eAAe,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACxE,CAAC;QAGD,IAAI,UAAkB,CAAC;QACvB,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,UAAU;gBACN,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC;oBACrC,IAAI;oBACJ,UAAU,CAAC,IAAI,EAAE;oBACjB,IAAI;oBACJ,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YAEJ,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,WAAW,CAAC;QAC1D,CAAC;QAED,IAAA,uBAAa,EAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAEvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;CAIJ,CAAA;AArWY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;;GACA,mBAAmB,CAqW/B","sourcesContent":["// src/ai/services/solid-ts-morph.service.ts\nimport { Injectable, Logger } from \"@nestjs/common\";\nimport { join, dirname, normalize, isAbsolute, basename } from \"node:path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { Project, Node, ObjectLiteralExpression, ArrayLiteralExpression, QuoteKind, IndentationText } from \"ts-morph\";\nimport { MethodDeclarationStructure, StructureKind } from \"ts-morph\";\n\ntype Bucket = \"providers\" | \"exports\";\n\n// interface SolidTsMorphOptions {\n// /** Absolute path to monorepo root. Defaults to auto-detect or ENV. */\n// repoRoot?: string;\n// /** Map of workspace prefixes to absolute directories. Defaults for solid-api / solid-ui. */\n// workspaceMap?: Record<string, string>;\n// }\n\n@Injectable()\nexport class SolidTsMorphService {\n private readonly logger = new Logger(SolidTsMorphService.name);\n private project: Project;\n\n // transaction state\n private inTxn = false;\n private stagedWrites = new Map<string, { content: string; overwrite: boolean }>(); // absPath -> write\n private dirtySourceFiles = new Set<string>(); // absPath\n\n // path roots\n private readonly repoRoot: string;\n private readonly workspaceMap: Record<string, string>;\n\n // constructor(opts: SolidTsMorphOptions = {}) {\n constructor() {\n // this.repoRoot = this.discoverRepoRoot(opts.repoRoot);\n this.repoRoot = this.discoverRepoRoot();\n this.workspaceMap = {\n \"solid-api\": join(this.repoRoot, \"solid-api\"),\n \"solid-ui\": join(this.repoRoot, \"solid-ui\"),\n // ...(opts.workspaceMap ?? {}),\n };\n\n this.project = new Project({\n skipAddingFilesFromTsConfig: true,\n manipulationSettings: {\n quoteKind: QuoteKind.Double,\n indentationText: IndentationText.FourSpaces,\n insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n },\n });\n\n this.logger.debug(`SolidTsMorphService repoRoot = ${this.repoRoot}`);\n Object.entries(this.workspaceMap).forEach(([k, v]) => this.logger.debug(`workspace '${k}' => ${v}`));\n }\n\n // ---- repo-root discovery ----\n private discoverRepoRoot(): string {\n // if (input && isAbsolute(input)) return normalize(input);\n\n // ENV override\n const envRoot = process.env.SOLID_REPO_ROOT;\n if (envRoot && isAbsolute(envRoot)) return normalize(envRoot);\n\n // Auto-detect: if current cwd is a workspace (solid-api/solid-ui), then repoRoot = parent(cwd)\n const cwd = normalize(process.cwd());\n const base = basename(cwd);\n if (base === \"solid-api\" || base === \"solid-ui\") {\n return normalize(dirname(cwd));\n }\n\n // Otherwise assume cwd itself is the repo root\n return cwd;\n }\n\n /** Resolve a repo-relative path with optional workspace prefix (e.g. 'solid-api/...', 'solid-ui/...'). */\n private resolveRepoPath(relPath: string): string {\n if (!relPath) throw new Error(\"resolveRepoPath: empty path\");\n const p = normalize(relPath);\n\n if (isAbsolute(p)) return p;\n\n // Prefix-aware mapping: 'solid-api/...', 'solid-ui/...'\n for (const [prefix, root] of Object.entries(this.workspaceMap)) {\n if (p === prefix || p.startsWith(prefix + \"/\") || p.startsWith(prefix + \"\\\\\")) {\n const suffix = p.slice(prefix.length + (p.length > prefix.length ? 1 : 0));\n return normalize(join(root, suffix));\n }\n }\n\n // Default: treat as repo-root relative\n return normalize(join(this.repoRoot, p));\n }\n\n private rel(abs: string): string {\n const root = this.repoRoot.replace(/\\\\/g, \"/\");\n return abs.replace(/\\\\/g, \"/\").replace(root + \"/\", \"\");\n }\n\n // ---- transaction API ----\n begin(): void {\n if (this.inTxn) {\n this.logger.warn(\"begin(): already in a transaction; reusing current transaction.\");\n return;\n }\n this.inTxn = true;\n this.stagedWrites.clear();\n this.dirtySourceFiles.clear();\n this.project = new Project({\n skipAddingFilesFromTsConfig: true,\n manipulationSettings: {\n quoteKind: QuoteKind.Double,\n indentationText: IndentationText.FourSpaces,\n insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n },\n });\n this.logger.log(\"Transaction started.\");\n }\n\n rollback(): void {\n if (!this.inTxn) return;\n this.inTxn = false;\n this.stagedWrites.clear();\n this.dirtySourceFiles.clear();\n this.project = new Project({\n skipAddingFilesFromTsConfig: true,\n manipulationSettings: {\n quoteKind: QuoteKind.Double,\n indentationText: IndentationText.FourSpaces,\n insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n },\n });\n this.logger.log(\"Transaction rolled back.\");\n }\n\n async commit(): Promise<{ wrote: number }> {\n if (!this.inTxn) {\n this.logger.log(\"commit(): not in a transaction; nothing to commit.\");\n return { wrote: 0 };\n }\n\n let writes = 0;\n\n // 1) write staged new/overwritten files\n for (const [abs, { content, overwrite }] of this.stagedWrites.entries()) {\n const dir = dirname(abs);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n if (existsSync(abs) && !overwrite) {\n this.logger.log(`createNewFile (staged): skipped (exists) ${this.rel(abs)}`);\n } else {\n writeFileSync(abs, content, \"utf8\");\n writes++;\n this.logger.log(`${existsSync(abs) && overwrite ? \"Overwrote\" : \"Created\"} file: ${this.rel(abs)}`);\n }\n }\n\n // 2) save all mutated module files once\n for (const abs of this.dirtySourceFiles.values()) {\n const sf = this.project.getSourceFile(abs);\n if (!sf) continue;\n sf.fixMissingImports();\n sf.organizeImports();\n await sf.save();\n writes++;\n this.logger.log(`Updated module: ${this.rel(abs)}`);\n }\n\n // end txn\n this.inTxn = false;\n this.stagedWrites.clear();\n this.dirtySourceFiles.clear();\n this.project = new Project({\n skipAddingFilesFromTsConfig: true,\n manipulationSettings: {\n quoteKind: QuoteKind.Double,\n indentationText: IndentationText.FourSpaces,\n insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n },\n });\n\n return { wrote: writes };\n }\n\n // ---- operations ----\n createNewFile(path: string, content: string, overwrite = false): { createdOrStaged: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(path);\n const dir = dirname(abs);\n\n if (this.inTxn) {\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n this.stagedWrites.set(abs, { content, overwrite });\n this.logger.log(`Staged createNewFile: ${this.rel(abs)} (overwrite=${overwrite})`);\n return { createdOrStaged: true, skipped: false };\n }\n\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n if (existsSync(abs) && !overwrite) {\n this.logger.log(`createNewFile: skipped (exists): ${path}`);\n return { createdOrStaged: false, skipped: true };\n }\n writeFileSync(abs, content, \"utf8\");\n this.logger.log(`${existsSync(abs) && overwrite ? \"Overwrote\" : \"Created\"} file: ${path}`);\n return { createdOrStaged: true, skipped: false };\n }\n\n registerNestProvider(\n modulePath: string,\n providerClassName: string,\n importFrom: string,\n registerIn: Array<Bucket>,\n uniqueGuard = true\n ): { staged: boolean } {\n const abs = this.resolveRepoPath(modulePath);\n if (!existsSync(abs)) throw new Error(`registerNestProvider: module file not found at ${modulePath}`);\n\n const existing = this.project.getSourceFile(abs);\n const sourceFile = existing\n ? existing\n : this.project.createSourceFile(abs, readFileSync(abs, \"utf8\"), { overwrite: true });\n\n // ensure import\n const imp = sourceFile.getImportDeclarations().find(d => d.getModuleSpecifierValue() === importFrom);\n if (imp) {\n const has = imp.getNamedImports().some(ni => ni.getName() === providerClassName);\n if (!has) imp.addNamedImport(providerClassName);\n } else {\n sourceFile.addImportDeclaration({ moduleSpecifier: importFrom, namedImports: [providerClassName] });\n }\n\n // mutate @Module metadata\n const nestModuleClass = sourceFile.getClasses().find(cls =>\n cls.getDecorators().some(dec => dec.getName() === \"Module\")\n );\n if (!nestModuleClass) throw new Error(`registerNestProvider: No @Module() class found in ${modulePath}`);\n\n const moduleDec = nestModuleClass.getDecorators().find(dec => dec.getName() === \"Module\");\n const callExpr = moduleDec!.getCallExpression();\n const arg0 = callExpr?.getArguments()[0];\n if (!arg0 || !Node.isObjectLiteralExpression(arg0)) {\n throw new Error(`registerNestProvider: Malformed @Module() in ${modulePath}`);\n }\n const meta = arg0 as ObjectLiteralExpression;\n\n const ensureInArray = (propName: Bucket) => {\n let prop = meta.getProperty(propName);\n if (!prop) {\n meta.addPropertyAssignment({ name: propName, initializer: \"[]\" });\n prop = meta.getProperty(propName);\n }\n let arr: ArrayLiteralExpression | undefined;\n if (Node.isPropertyAssignment(prop)) {\n const init = prop.getInitializer();\n if (init && Node.isArrayLiteralExpression(init)) arr = init;\n }\n if (!arr) throw new Error(`registerNestProvider: Property ${propName} is not an array in ${modulePath}`);\n\n const exists = arr.getElements().some(el => el.getText().replace(/\\s/g, \"\") === providerClassName);\n if (!exists || !uniqueGuard) arr.addElement(providerClassName);\n };\n\n for (const bucket of registerIn) ensureInArray(bucket);\n\n this.dirtySourceFiles.add(abs); // defer save to commit()\n this.logger.log(`Staged provider registration in: ${this.rel(abs)} (${registerIn.join(\", \")})`);\n return { staged: true };\n }\n\n\n addMethodToExistingClass(\n filePath: string,\n className: string,\n methodName: string,\n methodCode: string,\n ): { staged: boolean; overwritten: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(filePath);\n if (!existsSync(abs))\n throw new Error(`addMethodToExistingClass: File not found at ${filePath}`);\n\n const existing = this.project.getSourceFile(abs);\n const sourceFile = existing\n ? existing\n : this.project.createSourceFile(abs, readFileSync(abs, \"utf8\"), { overwrite: true });\n\n const targetClass = sourceFile.getClass(className);\n if (!targetClass)\n throw new Error(`addMethodToExistingClass: Class ${className} not found in ${filePath}`);\n\n const existingMethod = targetClass.getMethod(methodName);\n if (existingMethod) {\n\n this.logger.log(`Skipped adding method '${methodName}' (already exists)`);\n return { staged: false, overwritten: false, skipped: true };\n }\n // Add the LLM-generated method directly\n targetClass.addMember(methodCode);\n\n\n this.dirtySourceFiles.add(abs);\n this.logger.log(`Staged method '${methodName}' in class ${className} at ${this.rel(abs)}`);\n return { staged: true, overwritten: !!existingMethod, skipped: false };\n }\n\n registerSolidUiExtension(\n filePath: string,\n lineToAdd: string\n ): { staged: boolean; overwritten: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(filePath);\n if (!existsSync(abs))\n throw new Error(`registerSolidUiExtension: File not found at ${filePath}`);\n\n const fileContent = readFileSync(abs, \"utf8\");\n\n // Check if the line already exists (avoid duplicates)\n if (fileContent.includes(lineToAdd.trim())) {\n this.logger.log(`Skipped adding line (already exists): ${lineToAdd}`);\n return { staged: false, overwritten: false, skipped: true };\n }\n\n // Append the new line at the end, ensuring newline\n const newContent = fileContent.trimEnd() + \"\\n\" + lineToAdd.trim() + \"\\n\";\n\n // Write updated content back\n writeFileSync(abs, newContent, \"utf8\");\n\n this.dirtySourceFiles.add(abs);\n this.logger.log(`Staged new line in ${this.rel(abs)}: ${lineToAdd}`);\n return { staged: true, overwritten: false, skipped: false };\n }\n\n addImport(\n filePath: string,\n importLine: string\n ): { staged: boolean; overwritten: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(filePath);\n if (!existsSync(abs))\n throw new Error(`addImport: File not found at ${filePath}`);\n\n let fileContent = readFileSync(abs, \"utf8\");\n\n // If import already exists — skip\n if (fileContent.includes(importLine.trim())) {\n this.logger.log(`Skipped adding import (already exists): ${importLine}`);\n return { staged: false, overwritten: false, skipped: true };\n }\n\n // Find last import statement (so we can insert after all imports)\n const importRegex = /^import .+ from .+;$/gm;\n let lastImportMatch: RegExpExecArray | null;\n let lastImportIndex = -1;\n\n while ((lastImportMatch = importRegex.exec(fileContent)) !== null) {\n lastImportIndex = lastImportMatch.index + lastImportMatch[0].length;\n }\n\n // Insert after last import (or at top if none exist)\n let newContent: string;\n if (lastImportIndex !== -1) {\n newContent =\n fileContent.slice(0, lastImportIndex) +\n \"\\n\" +\n importLine.trim() +\n \"\\n\" +\n fileContent.slice(lastImportIndex);\n } else {\n // No imports found — insert at top\n newContent = importLine.trim() + \"\\n\\n\" + fileContent;\n }\n\n writeFileSync(abs, newContent, \"utf8\");\n\n this.dirtySourceFiles.add(abs);\n this.logger.log(`Staged import in ${this.rel(abs)}: ${importLine}`);\n return { staged: true, overwritten: false, skipped: false };\n }\n\n\n\n}"]}
1
+ {"version":3,"file":"solid-ts-morph.service.js","sourceRoot":"","sources":["../../src/services/solid-ts-morph.service.ts"],"names":[],"mappings":"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","sourcesContent":["// src/ai/services/solid-ts-morph.service.ts\nimport { Injectable, Logger } from \"@nestjs/common\";\nimport { join, dirname, normalize, isAbsolute, basename } from \"node:path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { Project, Node, ObjectLiteralExpression, ArrayLiteralExpression, QuoteKind, IndentationText } from \"ts-morph\";\nimport { MethodDeclarationStructure, StructureKind } from \"ts-morph\";\n\ntype Bucket = \"providers\" | \"exports\";\n\n// interface SolidTsMorphOptions {\n// /** Absolute path to monorepo root. Defaults to auto-detect or ENV. */\n// repoRoot?: string;\n// /** Map of workspace prefixes to absolute directories. Defaults for solid-api / solid-ui. */\n// workspaceMap?: Record<string, string>;\n// }\n\n@Injectable()\nexport class SolidTsMorphService {\n private readonly logger = new Logger(SolidTsMorphService.name);\n private project: Project;\n\n // transaction state\n private inTxn = false;\n private stagedWrites = new Map<string, { content: string; overwrite: boolean }>(); // absPath -> write\n private dirtySourceFiles = new Set<string>(); // absPath\n\n // path roots\n private readonly repoRoot: string;\n private readonly workspaceMap: Record<string, string>;\n\n // constructor(opts: SolidTsMorphOptions = {}) {\n constructor() {\n // this.repoRoot = this.discoverRepoRoot(opts.repoRoot);\n this.repoRoot = this.discoverRepoRoot();\n this.workspaceMap = {\n \"solid-api\": join(this.repoRoot, \"solid-api\"),\n \"solid-ui\": join(this.repoRoot, \"solid-ui\"),\n // ...(opts.workspaceMap ?? {}),\n };\n\n this.project = new Project({\n skipAddingFilesFromTsConfig: true,\n manipulationSettings: {\n quoteKind: QuoteKind.Double,\n indentationText: IndentationText.FourSpaces,\n insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n },\n });\n\n this.logger.debug(`SolidTsMorphService repoRoot = ${this.repoRoot}`);\n Object.entries(this.workspaceMap).forEach(([k, v]) => this.logger.debug(`workspace '${k}' => ${v}`));\n }\n\n // ---- repo-root discovery ----\n private discoverRepoRoot(): string {\n // if (input && isAbsolute(input)) return normalize(input);\n\n // ENV override\n const envRoot = process.env.SOLID_REPO_ROOT;\n if (envRoot && isAbsolute(envRoot)) return normalize(envRoot);\n\n // Auto-detect: if current cwd is a workspace (solid-api/solid-ui), then repoRoot = parent(cwd)\n const cwd = normalize(process.cwd());\n const base = basename(cwd);\n if (base === \"solid-api\" || base === \"solid-ui\") {\n return normalize(dirname(cwd));\n }\n\n // Otherwise assume cwd itself is the repo root\n return cwd;\n }\n\n /** Resolve a repo-relative path with optional workspace prefix (e.g. 'solid-api/...', 'solid-ui/...'). */\n private resolveRepoPath(relPath: string): string {\n if (!relPath) throw new Error(\"resolveRepoPath: empty path\");\n const p = normalize(relPath);\n\n if (isAbsolute(p)) return p;\n\n // Prefix-aware mapping: 'solid-api/...', 'solid-ui/...'\n for (const [prefix, root] of Object.entries(this.workspaceMap)) {\n if (p === prefix || p.startsWith(prefix + \"/\") || p.startsWith(prefix + \"\\\\\")) {\n const suffix = p.slice(prefix.length + (p.length > prefix.length ? 1 : 0));\n return normalize(join(root, suffix));\n }\n }\n\n // Default: treat as repo-root relative\n return normalize(join(this.repoRoot, p));\n }\n\n private rel(abs: string): string {\n const root = this.repoRoot.replace(/\\\\/g, \"/\");\n return abs.replace(/\\\\/g, \"/\").replace(root + \"/\", \"\");\n }\n\n // ---- transaction API ----\n begin(): void {\n if (this.inTxn) {\n this.logger.warn(\"begin(): already in a transaction; reusing current transaction.\");\n return;\n }\n this.inTxn = true;\n this.stagedWrites.clear();\n this.dirtySourceFiles.clear();\n this.project = new Project({\n skipAddingFilesFromTsConfig: true,\n manipulationSettings: {\n quoteKind: QuoteKind.Double,\n indentationText: IndentationText.FourSpaces,\n insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n },\n });\n this.logger.log(\"Transaction started.\");\n }\n\n rollback(): void {\n if (!this.inTxn) return;\n this.inTxn = false;\n this.stagedWrites.clear();\n this.dirtySourceFiles.clear();\n this.project = new Project({\n skipAddingFilesFromTsConfig: true,\n manipulationSettings: {\n quoteKind: QuoteKind.Double,\n indentationText: IndentationText.FourSpaces,\n insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n },\n });\n this.logger.log(\"Transaction rolled back.\");\n }\n\n async commit(): Promise<{ wrote: number }> {\n if (!this.inTxn) {\n this.logger.log(\"commit(): not in a transaction; nothing to commit.\");\n return { wrote: 0 };\n }\n\n let writes = 0;\n\n // 1) write staged new/overwritten files\n for (const [abs, { content, overwrite }] of this.stagedWrites.entries()) {\n const dir = dirname(abs);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n if (existsSync(abs) && !overwrite) {\n this.logger.log(`createNewFile (staged): skipped (exists) ${this.rel(abs)}`);\n } else {\n writeFileSync(abs, content, \"utf8\");\n writes++;\n this.logger.log(`${existsSync(abs) && overwrite ? \"Overwrote\" : \"Created\"} file: ${this.rel(abs)}`);\n }\n }\n\n // 2) save all mutated module files once\n for (const abs of this.dirtySourceFiles.values()) {\n const sf = this.project.getSourceFile(abs);\n if (!sf) continue;\n sf.fixMissingImports();\n sf.organizeImports();\n await sf.save();\n writes++;\n this.logger.log(`Updated module: ${this.rel(abs)}`);\n }\n\n // end txn\n this.inTxn = false;\n this.stagedWrites.clear();\n this.dirtySourceFiles.clear();\n this.project = new Project({\n skipAddingFilesFromTsConfig: true,\n manipulationSettings: {\n quoteKind: QuoteKind.Double,\n indentationText: IndentationText.FourSpaces,\n insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,\n },\n });\n\n return { wrote: writes };\n }\n\n // ---- operations ----\n createNewFile(path: string, content: string, overwrite = false): { createdOrStaged: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(path);\n const dir = dirname(abs);\n\n if (this.inTxn) {\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n this.stagedWrites.set(abs, { content, overwrite });\n this.logger.log(`Staged createNewFile: ${this.rel(abs)} (overwrite=${overwrite})`);\n return { createdOrStaged: true, skipped: false };\n }\n\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n if (existsSync(abs) && !overwrite) {\n this.logger.log(`createNewFile: skipped (exists): ${path}`);\n return { createdOrStaged: false, skipped: true };\n }\n writeFileSync(abs, content, \"utf8\");\n this.logger.log(`${existsSync(abs) && overwrite ? \"Overwrote\" : \"Created\"} file: ${path}`);\n return { createdOrStaged: true, skipped: false };\n }\n\n registerNestProvider(\n modulePath: string,\n providerClassName: string,\n importFrom: string,\n registerIn: Array<Bucket>,\n uniqueGuard = true\n ): { staged: boolean } {\n const abs = this.resolveRepoPath(modulePath);\n if (!existsSync(abs)) throw new Error(`registerNestProvider: module file not found at ${modulePath}`);\n\n const existing = this.project.getSourceFile(abs);\n const sourceFile = existing\n ? existing\n : this.project.createSourceFile(abs, readFileSync(abs, \"utf8\"), { overwrite: true });\n\n // ensure import\n const imp = sourceFile.getImportDeclarations().find(d => d.getModuleSpecifierValue() === importFrom);\n if (imp) {\n const has = imp.getNamedImports().some(ni => ni.getName() === providerClassName);\n if (!has) imp.addNamedImport(providerClassName);\n } else {\n sourceFile.addImportDeclaration({ moduleSpecifier: importFrom, namedImports: [providerClassName] });\n }\n\n // mutate @Module metadata\n const nestModuleClass = sourceFile.getClasses().find(cls =>\n cls.getDecorators().some(dec => dec.getName() === \"Module\")\n );\n if (!nestModuleClass) throw new Error(`registerNestProvider: No @Module() class found in ${modulePath}`);\n\n const moduleDec = nestModuleClass.getDecorators().find(dec => dec.getName() === \"Module\");\n const callExpr = moduleDec!.getCallExpression();\n const arg0 = callExpr?.getArguments()[0];\n if (!arg0 || !Node.isObjectLiteralExpression(arg0)) {\n throw new Error(`registerNestProvider: Malformed @Module() in ${modulePath}`);\n }\n const meta = arg0 as ObjectLiteralExpression;\n\n const ensureInArray = (propName: Bucket) => {\n let prop = meta.getProperty(propName);\n if (!prop) {\n meta.addPropertyAssignment({ name: propName, initializer: \"[]\" });\n prop = meta.getProperty(propName);\n }\n let arr: ArrayLiteralExpression | undefined;\n if (Node.isPropertyAssignment(prop)) {\n const init = prop.getInitializer();\n if (init && Node.isArrayLiteralExpression(init)) arr = init;\n }\n if (!arr) throw new Error(`registerNestProvider: Property ${propName} is not an array in ${modulePath}`);\n\n const exists = arr.getElements().some(el => el.getText().replace(/\\s/g, \"\") === providerClassName);\n if (!exists || !uniqueGuard) arr.addElement(providerClassName);\n };\n\n for (const bucket of registerIn) ensureInArray(bucket);\n\n this.dirtySourceFiles.add(abs); // defer save to commit()\n this.logger.log(`Staged provider registration in: ${this.rel(abs)} (${registerIn.join(\", \")})`);\n return { staged: true };\n }\n\n\n addMethodToExistingClass(\n filePath: string,\n className: string,\n methodName: string,\n methodCode: string,\n ): { staged: boolean; overwritten: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(filePath);\n if (!existsSync(abs))\n throw new Error(`addMethodToExistingClass: File not found at ${filePath}`);\n\n const existing = this.project.getSourceFile(abs);\n const sourceFile = existing\n ? existing\n : this.project.createSourceFile(abs, readFileSync(abs, \"utf8\"), { overwrite: true });\n\n const targetClass = sourceFile.getClass(className);\n if (!targetClass)\n throw new Error(`addMethodToExistingClass: Class ${className} not found in ${filePath}`);\n\n const existingMethod = targetClass.getMethod(methodName);\n if (existingMethod) {\n\n this.logger.log(`Skipped adding method '${methodName}' (already exists)`);\n return { staged: false, overwritten: false, skipped: true };\n }\n // Add the LLM-generated method directly\n targetClass.addMember(methodCode);\n\n\n this.dirtySourceFiles.add(abs);\n this.logger.log(`Staged method '${methodName}' in class ${className} at ${this.rel(abs)}`);\n return { staged: true, overwritten: !!existingMethod, skipped: false };\n }\n\n registerSolidUiExtension(\n filePath: string,\n lineToAdd: string\n ): { staged: boolean; overwritten: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(filePath);\n if (!existsSync(abs))\n throw new Error(`registerSolidUiExtension: File not found at ${filePath}`);\n\n const fileContent = readFileSync(abs, \"utf8\");\n\n // Check if the line already exists (avoid duplicates)\n if (fileContent.includes(lineToAdd.trim())) {\n this.logger.log(`Skipped adding line (already exists): ${lineToAdd}`);\n return { staged: false, overwritten: false, skipped: true };\n }\n\n // Append the new line at the end, ensuring newline\n const newContent = fileContent.trimEnd() + \"\\n\" + lineToAdd.trim() + \"\\n\";\n\n // Write updated content back\n writeFileSync(abs, newContent, \"utf8\");\n\n this.dirtySourceFiles.add(abs);\n this.logger.log(`Staged new line in ${this.rel(abs)}: ${lineToAdd}`);\n return { staged: true, overwritten: false, skipped: false };\n }\n\n\n //Removes all import declarations from a file whose module specifier matches the given predicate.\n //Returns the set of identifier names that were imported by the removed declarations.\n removeImports(\n filePath: string,\n filter: (moduleSpecifier: string) => boolean\n ): { removedIdentifiers: Set<string>; staged: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(filePath);\n if (!existsSync(abs)) {\n this.logger.warn(`removeImport: file not found at ${filePath}, skipping.`);\n return { removedIdentifiers: new Set(), staged: false, skipped: true };\n }\n\n const existing = this.project.getSourceFile(abs);\n const sourceFile = existing\n ? existing\n : this.project.createSourceFile(abs, readFileSync(abs, \"utf8\"), { overwrite: true });\n\n const importsToRemove = sourceFile.getImportDeclarations().filter(decl => {\n const spec = decl.getModuleSpecifierValue().replace(/\\\\/g, \"/\");\n return filter(spec);\n });\n\n if (importsToRemove.length === 0) {\n return { removedIdentifiers: new Set(), staged: false, skipped: true };\n }\n\n const removedIdentifiers = new Set<string>();\n for (const decl of importsToRemove) {\n for (const named of decl.getNamedImports()) {\n removedIdentifiers.add(named.getAliasNode()?.getText() ?? named.getName());\n }\n const defaultImport = decl.getDefaultImport();\n if (defaultImport) removedIdentifiers.add(defaultImport.getText());\n decl.remove();\n }\n\n this.dirtySourceFiles.add(abs);\n this.logger.log(`Staged removal of ${importsToRemove.length} import(s) in: ${this.rel(abs)}`);\n return { removedIdentifiers, staged: true, skipped: false };\n }\n\n //Removes the given identifier names from all @Module decorator array properties\n removeModuleMembers(\n filePath: string,\n names: Set<string> | string[]\n ): { staged: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(filePath);\n if (!existsSync(abs)) {\n this.logger.warn(`removeImportMembers: file not found at ${filePath}, skipping.`);\n return { staged: false, skipped: true };\n }\n\n const identifiers = names instanceof Set ? names : new Set(names);\n if (identifiers.size === 0) return { staged: false, skipped: true };\n\n const existing = this.project.getSourceFile(abs);\n const sourceFile = existing\n ? existing\n : this.project.createSourceFile(abs, readFileSync(abs, \"utf8\"), { overwrite: true });\n\n const nestModuleClass = sourceFile.getClasses().find(cls =>\n cls.getDecorators().some(dec => dec.getName() === \"Module\")\n );\n if (!nestModuleClass) {\n this.logger.warn(`removeImportMembers: no @Module() class found in ${filePath}`);\n return { staged: false, skipped: true };\n }\n\n const moduleDec = nestModuleClass.getDecorators().find(dec => dec.getName() === \"Module\");\n const arg0 = moduleDec?.getCallExpression()?.getArguments()[0];\n if (!arg0 || !Node.isObjectLiteralExpression(arg0)) return { staged: false, skipped: true };\n\n const meta = arg0 as ObjectLiteralExpression;\n for (const propName of [\"imports\", \"providers\", \"controllers\", \"exports\"] as const) {\n const prop = meta.getProperty(propName);\n if (!prop || !Node.isPropertyAssignment(prop)) continue;\n const init = prop.getInitializer();\n if (!init || !Node.isArrayLiteralExpression(init)) continue;\n const arr = init as ArrayLiteralExpression;\n const elements = arr.getElements();\n for (let i = elements.length - 1; i >= 0; i--) {\n const elemText = elements[i].getText().trim();\n // Match direct identifiers (e.g. TestService) or call expressions that reference them (e.g. TypeOrmModule.forFeature([Test])).\n const shouldRemove = identifiers.has(elemText) ||\n [...identifiers].some(id => new RegExp(`\\\\b${id}\\\\b`).test(elemText));\n if (shouldRemove) {\n arr.removeElement(i);\n }\n }\n }\n\n this.dirtySourceFiles.add(abs);\n this.logger.log(`Staged removal of [${[...identifiers].join(\", \")}] from @Module arrays in: ${this.rel(abs)}`);\n return { staged: true, skipped: false };\n }\n\n\n addImport(\n filePath: string,\n importLine: string\n ): { staged: boolean; overwritten: boolean; skipped: boolean } {\n const abs = this.resolveRepoPath(filePath);\n if (!existsSync(abs))\n throw new Error(`addImport: File not found at ${filePath}`);\n\n let fileContent = readFileSync(abs, \"utf8\");\n\n // If import already exists — skip\n if (fileContent.includes(importLine.trim())) {\n this.logger.log(`Skipped adding import (already exists): ${importLine}`);\n return { staged: false, overwritten: false, skipped: true };\n }\n\n // Find last import statement (so we can insert after all imports)\n const importRegex = /^import .+ from .+;$/gm;\n let lastImportMatch: RegExpExecArray | null;\n let lastImportIndex = -1;\n\n while ((lastImportMatch = importRegex.exec(fileContent)) !== null) {\n lastImportIndex = lastImportMatch.index + lastImportMatch[0].length;\n }\n\n // Insert after last import (or at top if none exist)\n let newContent: string;\n if (lastImportIndex !== -1) {\n newContent =\n fileContent.slice(0, lastImportIndex) +\n \"\\n\" +\n importLine.trim() +\n \"\\n\" +\n fileContent.slice(lastImportIndex);\n } else {\n // No imports found — insert at top\n newContent = importLine.trim() + \"\\n\\n\" + fileContent;\n }\n\n writeFileSync(abs, newContent, \"utf8\");\n\n this.dirtySourceFiles.add(abs);\n this.logger.log(`Staged import in ${this.rel(abs)}: ${importLine}`);\n return { staged: true, overwritten: false, skipped: false };\n }\n\n\n\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"solid-core.module.d.ts","sourceRoot":"","sources":["../src/solid-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA6UhF,qBA8ba,eAAgB,YAAW,UAAU;IAChD,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAKvC"}
1
+ {"version":3,"file":"solid-core.module.d.ts","sourceRoot":"","sources":["../src/solid-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkXhF,qBA4da,eAAgB,YAAW,UAAU;IAChD,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAKvC"}