@solidstarters/solid-core 1.2.193 → 1.2.200

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 (376) hide show
  1. package/dist/commands/mcp.command.d.ts +20 -0
  2. package/dist/commands/mcp.command.d.ts.map +1 -0
  3. package/dist/commands/mcp.command.js +208 -0
  4. package/dist/commands/mcp.command.js.map +1 -0
  5. package/dist/commands/refresh-model.command.d.ts +8 -5
  6. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  7. package/dist/commands/refresh-model.command.js +32 -0
  8. package/dist/commands/refresh-model.command.js.map +1 -1
  9. package/dist/commands/remove-fields.command.js +1 -1
  10. package/dist/commands/remove-fields.command.js.map +1 -1
  11. package/dist/commands/seed.command.d.ts +2 -0
  12. package/dist/commands/seed.command.d.ts.map +1 -1
  13. package/dist/commands/seed.command.js +28 -1
  14. package/dist/commands/seed.command.js.map +1 -1
  15. package/dist/controllers/authentication.controller.js +1 -1
  16. package/dist/controllers/authentication.controller.js.map +1 -1
  17. package/dist/controllers/email-template.controller.js +1 -1
  18. package/dist/controllers/email-template.controller.js.map +1 -1
  19. package/dist/controllers/field-metadata.controller.d.ts +136 -4
  20. package/dist/controllers/field-metadata.controller.d.ts.map +1 -1
  21. package/dist/controllers/field-metadata.controller.js +14 -1
  22. package/dist/controllers/field-metadata.controller.js.map +1 -1
  23. package/dist/controllers/media-storage-provider-metadata.controller.js +1 -1
  24. package/dist/controllers/media-storage-provider-metadata.controller.js.map +1 -1
  25. package/dist/controllers/model-metadata.controller.js +1 -1
  26. package/dist/controllers/model-metadata.controller.js.map +1 -1
  27. package/dist/controllers/module-metadata.controller.js +1 -1
  28. package/dist/controllers/module-metadata.controller.js.map +1 -1
  29. package/dist/controllers/otp-authentication.controller.js +1 -1
  30. package/dist/controllers/otp-authentication.controller.js.map +1 -1
  31. package/dist/controllers/service.controller.js +1 -1
  32. package/dist/controllers/service.controller.js.map +1 -1
  33. package/dist/controllers/sms-template.controller.js +1 -1
  34. package/dist/controllers/sms-template.controller.js.map +1 -1
  35. package/dist/controllers/test-queue.controller.js +1 -1
  36. package/dist/controllers/test-queue.controller.js.map +1 -1
  37. package/dist/controllers/test.controller.js +1 -1
  38. package/dist/controllers/test.controller.js.map +1 -1
  39. package/dist/dtos/create-ai-interaction.dto.d.ts +2 -0
  40. package/dist/dtos/create-ai-interaction.dto.d.ts.map +1 -1
  41. package/dist/dtos/create-ai-interaction.dto.js +14 -1
  42. package/dist/dtos/create-ai-interaction.dto.js.map +1 -1
  43. package/dist/dtos/create-field-metadata.dto.d.ts +22 -5
  44. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  45. package/dist/dtos/create-field-metadata.dto.js +33 -7
  46. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  47. package/dist/dtos/create-import-transaction.dto.d.ts +0 -1
  48. package/dist/dtos/create-import-transaction.dto.d.ts.map +1 -1
  49. package/dist/dtos/create-import-transaction.dto.js +1 -7
  50. package/dist/dtos/create-import-transaction.dto.js.map +1 -1
  51. package/dist/dtos/create-model-metadata.dto.d.ts +2 -0
  52. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  53. package/dist/dtos/create-model-metadata.dto.js +13 -1
  54. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  55. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  56. package/dist/dtos/create-role-metadata.dto.js +5 -1
  57. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  58. package/dist/dtos/resolve-s3-url.dto.d.ts +10 -0
  59. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -0
  60. package/dist/dtos/resolve-s3-url.dto.js +49 -0
  61. package/dist/dtos/resolve-s3-url.dto.js.map +1 -0
  62. package/dist/dtos/update-ai-interaction.dto.d.ts +2 -0
  63. package/dist/dtos/update-ai-interaction.dto.d.ts.map +1 -1
  64. package/dist/dtos/update-ai-interaction.dto.js +13 -1
  65. package/dist/dtos/update-ai-interaction.dto.js.map +1 -1
  66. package/dist/dtos/update-field-metadata.dto.d.ts.map +1 -1
  67. package/dist/dtos/update-field-metadata.dto.js.map +1 -1
  68. package/dist/dtos/update-import-transaction.dto.d.ts +0 -1
  69. package/dist/dtos/update-import-transaction.dto.d.ts.map +1 -1
  70. package/dist/dtos/update-import-transaction.dto.js +1 -7
  71. package/dist/dtos/update-import-transaction.dto.js.map +1 -1
  72. package/dist/entities/action-metadata.entity.js +4 -4
  73. package/dist/entities/action-metadata.entity.js.map +1 -1
  74. package/dist/entities/ai-interaction.entity.d.ts +2 -0
  75. package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
  76. package/dist/entities/ai-interaction.entity.js +15 -6
  77. package/dist/entities/ai-interaction.entity.js.map +1 -1
  78. package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
  79. package/dist/entities/chatter-message-details.entity.js +1 -1
  80. package/dist/entities/chatter-message-details.entity.js.map +1 -1
  81. package/dist/entities/chatter-message.entity.js +1 -1
  82. package/dist/entities/chatter-message.entity.js.map +1 -1
  83. package/dist/entities/common.entity.d.ts +2 -3
  84. package/dist/entities/common.entity.d.ts.map +1 -1
  85. package/dist/entities/common.entity.js +9 -11
  86. package/dist/entities/common.entity.js.map +1 -1
  87. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +2 -2
  88. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
  89. package/dist/entities/dashboard-question.entity.js +3 -3
  90. package/dist/entities/dashboard-question.entity.js.map +1 -1
  91. package/dist/entities/dashboard-variable.entity.js +3 -3
  92. package/dist/entities/dashboard-variable.entity.js.map +1 -1
  93. package/dist/entities/dashboard.entity.js +1 -1
  94. package/dist/entities/dashboard.entity.js.map +1 -1
  95. package/dist/entities/email-template.entity.d.ts.map +1 -1
  96. package/dist/entities/email-template.entity.js +4 -3
  97. package/dist/entities/email-template.entity.js.map +1 -1
  98. package/dist/entities/export-template.entity.js +2 -2
  99. package/dist/entities/export-template.entity.js.map +1 -1
  100. package/dist/entities/export-transaction.entity.js +2 -2
  101. package/dist/entities/export-transaction.entity.js.map +1 -1
  102. package/dist/entities/field-metadata.entity.d.ts +1 -0
  103. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  104. package/dist/entities/field-metadata.entity.js +8 -4
  105. package/dist/entities/field-metadata.entity.js.map +1 -1
  106. package/dist/entities/import-transaction-error-log.entity.js +1 -1
  107. package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
  108. package/dist/entities/import-transaction.entity.d.ts +0 -1
  109. package/dist/entities/import-transaction.entity.d.ts.map +1 -1
  110. package/dist/entities/import-transaction.entity.js +2 -7
  111. package/dist/entities/import-transaction.entity.js.map +1 -1
  112. package/dist/entities/legacy-common-with-id.entity.d.ts +5 -0
  113. package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -0
  114. package/dist/entities/legacy-common-with-id.entity.js +32 -0
  115. package/dist/entities/legacy-common-with-id.entity.js.map +1 -0
  116. package/dist/entities/legacy-common.entity.d.ts +13 -0
  117. package/dist/entities/legacy-common.entity.d.ts.map +1 -0
  118. package/dist/entities/legacy-common.entity.js +67 -0
  119. package/dist/entities/legacy-common.entity.js.map +1 -0
  120. package/dist/entities/list-of-values.entity.js +2 -2
  121. package/dist/entities/list-of-values.entity.js.map +1 -1
  122. package/dist/entities/locale.entity.js +1 -1
  123. package/dist/entities/locale.entity.js.map +1 -1
  124. package/dist/entities/media.entity.d.ts.map +1 -1
  125. package/dist/entities/media.entity.js +3 -3
  126. package/dist/entities/media.entity.js.map +1 -1
  127. package/dist/entities/menu-item-metadata.entity.js +4 -4
  128. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  129. package/dist/entities/model-metadata.entity.d.ts +2 -0
  130. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  131. package/dist/entities/model-metadata.entity.js +11 -3
  132. package/dist/entities/model-metadata.entity.js.map +1 -1
  133. package/dist/entities/mq-message-queue.entity.js +1 -1
  134. package/dist/entities/mq-message-queue.entity.js.map +1 -1
  135. package/dist/entities/mq-message.entity.d.ts +3 -3
  136. package/dist/entities/mq-message.entity.d.ts.map +1 -1
  137. package/dist/entities/mq-message.entity.js +10 -10
  138. package/dist/entities/mq-message.entity.js.map +1 -1
  139. package/dist/entities/saved-filters.entity.js +4 -4
  140. package/dist/entities/saved-filters.entity.js.map +1 -1
  141. package/dist/entities/scheduled-job.entity.js +4 -4
  142. package/dist/entities/scheduled-job.entity.js.map +1 -1
  143. package/dist/entities/security-rule.entity.js +2 -2
  144. package/dist/entities/security-rule.entity.js.map +1 -1
  145. package/dist/entities/setting.entity.js +2 -2
  146. package/dist/entities/setting.entity.js.map +1 -1
  147. package/dist/entities/sms-template.entity.js +2 -2
  148. package/dist/entities/sms-template.entity.js.map +1 -1
  149. package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
  150. package/dist/entities/user-activity-history.entity.js +1 -1
  151. package/dist/entities/user-activity-history.entity.js.map +1 -1
  152. package/dist/entities/user-view-metadata.entity.js +2 -2
  153. package/dist/entities/user-view-metadata.entity.js.map +1 -1
  154. package/dist/entities/user.entity.js +13 -15
  155. package/dist/entities/user.entity.js.map +1 -1
  156. package/dist/entities/view-metadata.entity.js +3 -3
  157. package/dist/entities/view-metadata.entity.js.map +1 -1
  158. package/dist/helpers/date.helper.d.ts +1 -1
  159. package/dist/helpers/date.helper.d.ts.map +1 -1
  160. package/dist/helpers/date.helper.js +24 -2
  161. package/dist/helpers/date.helper.js.map +1 -1
  162. package/dist/helpers/model-metadata-helper.service.d.ts +4 -1
  163. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  164. package/dist/helpers/model-metadata-helper.service.js +48 -30
  165. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  166. package/dist/helpers/module.helper.d.ts.map +1 -1
  167. package/dist/helpers/module.helper.js +1 -3
  168. package/dist/helpers/module.helper.js.map +1 -1
  169. package/dist/helpers/schematic.service.d.ts +9 -3
  170. package/dist/helpers/schematic.service.d.ts.map +1 -1
  171. package/dist/helpers/schematic.service.js +49 -32
  172. package/dist/helpers/schematic.service.js.map +1 -1
  173. package/dist/helpers/solid-registry.d.ts +3 -2
  174. package/dist/helpers/solid-registry.d.ts.map +1 -1
  175. package/dist/helpers/solid-registry.js +10 -0
  176. package/dist/helpers/solid-registry.js.map +1 -1
  177. package/dist/helpers/typeorm-db-helper.d.ts +3 -0
  178. package/dist/helpers/typeorm-db-helper.d.ts.map +1 -0
  179. package/dist/helpers/typeorm-db-helper.js +24 -0
  180. package/dist/helpers/typeorm-db-helper.js.map +1 -0
  181. package/dist/index.d.ts +4 -1
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +4 -1
  184. package/dist/index.js.map +1 -1
  185. package/dist/interfaces.d.ts +3 -0
  186. package/dist/interfaces.d.ts.map +1 -1
  187. package/dist/interfaces.js.map +1 -1
  188. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  189. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +6 -1
  190. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  191. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -1
  192. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  193. package/dist/seeders/module-metadata-seeder.service.js +39 -17
  194. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  195. package/dist/seeders/seed-data/solid-core-metadata.json +53 -468
  196. package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
  197. package/dist/seeders/system-fields-seeder.service.js +1 -1
  198. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  199. package/dist/services/ai-interaction.service.js +1 -1
  200. package/dist/services/ai-interaction.service.js.map +1 -1
  201. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
  202. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +6 -4
  203. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
  204. package/dist/services/crud-helper.service.d.ts +8 -0
  205. package/dist/services/crud-helper.service.d.ts.map +1 -1
  206. package/dist/services/crud-helper.service.js +28 -5
  207. package/dist/services/crud-helper.service.js.map +1 -1
  208. package/dist/services/crud.service.d.ts +4 -1
  209. package/dist/services/crud.service.d.ts.map +1 -1
  210. package/dist/services/crud.service.js +87 -7
  211. package/dist/services/crud.service.js.map +1 -1
  212. package/dist/services/field-metadata.service.d.ts +143 -6
  213. package/dist/services/field-metadata.service.d.ts.map +1 -1
  214. package/dist/services/field-metadata.service.js +211 -56
  215. package/dist/services/field-metadata.service.js.map +1 -1
  216. package/dist/services/menu-item-metadata.service.d.ts +3 -1
  217. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  218. package/dist/services/menu-item-metadata.service.js +31 -11
  219. package/dist/services/menu-item-metadata.service.js.map +1 -1
  220. package/dist/services/model-metadata.service.d.ts.map +1 -1
  221. package/dist/services/model-metadata.service.js +14 -3
  222. package/dist/services/model-metadata.service.js.map +1 -1
  223. package/dist/services/mq-message.service.d.ts.map +1 -1
  224. package/dist/services/mq-message.service.js +3 -4
  225. package/dist/services/mq-message.service.js.map +1 -1
  226. package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
  227. package/dist/services/queues/publisher-factory.service.js +4 -0
  228. package/dist/services/queues/publisher-factory.service.js.map +1 -1
  229. package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.d.ts +2 -2
  230. package/dist/services/selection-providers/list-of-values-selection-providers.service.d.ts.map +1 -0
  231. package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.js +3 -3
  232. package/dist/services/selection-providers/list-of-values-selection-providers.service.js.map +1 -0
  233. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts +20 -0
  234. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts.map +1 -0
  235. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js +87 -0
  236. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js.map +1 -0
  237. package/dist/services/setting.service.d.ts.map +1 -1
  238. package/dist/services/setting.service.js +2 -1
  239. package/dist/services/setting.service.js.map +1 -1
  240. package/dist/services/solid-introspect.service.d.ts +19 -3
  241. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  242. package/dist/services/solid-introspect.service.js +83 -11
  243. package/dist/services/solid-introspect.service.js.map +1 -1
  244. package/dist/services/view-metadata.service.d.ts +3 -1
  245. package/dist/services/view-metadata.service.d.ts.map +1 -1
  246. package/dist/services/view-metadata.service.js +31 -5
  247. package/dist/services/view-metadata.service.js.map +1 -1
  248. package/dist/solid-core.module.d.ts.map +1 -1
  249. package/dist/solid-core.module.js +5 -1
  250. package/dist/solid-core.module.js.map +1 -1
  251. package/dist/subscribers/audit.subscriber.d.ts +3 -2
  252. package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
  253. package/dist/subscribers/audit.subscriber.js +6 -12
  254. package/dist/subscribers/audit.subscriber.js.map +1 -1
  255. package/dist/subscribers/computed-entity-field.subscriber.d.ts +3 -2
  256. package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
  257. package/dist/subscribers/computed-entity-field.subscriber.js +7 -9
  258. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  259. package/dist/subscribers/created-by-updated-by.subscriber.d.ts +4 -2
  260. package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
  261. package/dist/subscribers/created-by-updated-by.subscriber.js +10 -8
  262. package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
  263. package/dist/subscribers/field-metadata.subscriber.d.ts.map +1 -1
  264. package/dist/subscribers/field-metadata.subscriber.js +0 -1
  265. package/dist/subscribers/field-metadata.subscriber.js.map +1 -1
  266. package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
  267. package/dist/subscribers/model-metadata.subscriber.js +3 -2
  268. package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
  269. package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts +3 -2
  270. package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts.map +1 -1
  271. package/dist/subscribers/soft-delete-aware-event.subscriber.js +6 -11
  272. package/dist/subscribers/soft-delete-aware-event.subscriber.js.map +1 -1
  273. package/dist/tsconfig.tsbuildinfo +1 -1
  274. package/package.json +1 -1
  275. package/sql/mssql/proc_CleanupModelMetadata.sql +175 -0
  276. package/sql/mssql/proc_CleanupModuleMetadata.sql +78 -0
  277. package/sql/mssql/scratchpad.sql +10 -0
  278. package/sql/postgres/proc_CleanupModelMetadata.sql +148 -0
  279. package/sql/postgres/proc_CleanupModuleMetadata.sql +50 -0
  280. package/sql/postgres/scratchpad.sql +12 -0
  281. package/sql-server-changes.txt +88 -0
  282. package/src/commands/mcp.command.ts +215 -0
  283. package/src/commands/refresh-model.command.ts +37 -5
  284. package/src/commands/remove-fields.command.ts +1 -1
  285. package/src/commands/seed.command.ts +34 -15
  286. package/src/controllers/authentication.controller.ts +1 -1
  287. package/src/controllers/email-template.controller.ts +1 -1
  288. package/src/controllers/field-metadata.controller.ts +7 -1
  289. package/src/controllers/media-storage-provider-metadata.controller.ts +1 -1
  290. package/src/controllers/model-metadata.controller.ts +1 -1
  291. package/src/controllers/module-metadata.controller.ts +1 -1
  292. package/src/controllers/otp-authentication.controller.ts +1 -1
  293. package/src/controllers/service.controller.ts +1 -1
  294. package/src/controllers/sms-template.controller.ts +1 -1
  295. package/src/controllers/test-queue.controller.ts +1 -1
  296. package/src/controllers/test.controller.ts +1 -1
  297. package/src/dtos/create-ai-interaction.dto.ts +16 -9
  298. package/src/dtos/create-field-metadata.dto.ts +42 -12
  299. package/src/dtos/create-import-transaction.dto.ts +0 -4
  300. package/src/dtos/create-model-metadata.dto.ts +10 -0
  301. package/src/dtos/create-role-metadata.dto.ts +8 -2
  302. package/src/dtos/resolve-s3-url.dto.ts +33 -0
  303. package/src/dtos/update-ai-interaction.dto.ts +16 -9
  304. package/src/dtos/update-field-metadata.dto.ts +1 -2
  305. package/src/dtos/update-import-transaction.dto.ts +0 -4
  306. package/src/entities/action-metadata.entity.ts +4 -4
  307. package/src/entities/ai-interaction.entity.ts +16 -12
  308. package/src/entities/chatter-message-details.entity.ts +18 -18
  309. package/src/entities/chatter-message.entity.ts +2 -2
  310. package/src/entities/common.entity.ts +19 -10
  311. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +2 -2
  312. package/src/entities/dashboard-question.entity.ts +3 -3
  313. package/src/entities/dashboard-variable.entity.ts +3 -3
  314. package/src/entities/dashboard.entity.ts +1 -1
  315. package/src/entities/email-template.entity.ts +4 -3
  316. package/src/entities/export-template.entity.ts +2 -2
  317. package/src/entities/export-transaction.entity.ts +2 -2
  318. package/src/entities/field-metadata.entity.ts +6 -3
  319. package/src/entities/import-transaction-error-log.entity.ts +2 -2
  320. package/src/entities/import-transaction.entity.ts +2 -5
  321. package/src/entities/legacy-common-with-id.entity.ts +11 -0
  322. package/src/entities/legacy-common.entity.ts +57 -0
  323. package/src/entities/list-of-values.entity.ts +2 -2
  324. package/src/entities/locale.entity.ts +1 -1
  325. package/src/entities/media.entity.ts +25 -25
  326. package/src/entities/menu-item-metadata.entity.ts +4 -4
  327. package/src/entities/model-metadata.entity.ts +9 -2
  328. package/src/entities/mq-message-queue.entity.ts +1 -1
  329. package/src/entities/mq-message.entity.ts +34 -34
  330. package/src/entities/saved-filters.entity.ts +5 -5
  331. package/src/entities/scheduled-job.entity.ts +4 -4
  332. package/src/entities/security-rule.entity.ts +2 -2
  333. package/src/entities/setting.entity.ts +2 -2
  334. package/src/entities/sms-template.entity.ts +2 -2
  335. package/src/entities/user-activity-history.entity.ts +14 -14
  336. package/src/entities/user-view-metadata.entity.ts +2 -2
  337. package/src/entities/user.entity.ts +15 -15
  338. package/src/entities/view-metadata.entity.ts +3 -3
  339. package/src/helpers/date.helper.ts +31 -10
  340. package/src/helpers/model-metadata-helper.service.ts +63 -32
  341. package/src/helpers/module.helper.ts +4 -3
  342. package/src/helpers/schematic.service.ts +72 -46
  343. package/src/helpers/solid-registry.ts +14 -2
  344. package/src/helpers/typeorm-db-helper.ts +26 -0
  345. package/src/index.ts +4 -1
  346. package/src/interfaces.ts +3 -0
  347. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +17 -21
  348. package/src/seeders/module-metadata-seeder.service.ts +73 -29
  349. package/src/seeders/seed-data/solid-core-metadata.json +55 -470
  350. package/src/seeders/system-fields-seeder.service.ts +34 -35
  351. package/src/services/ai-interaction.service.ts +1 -1
  352. package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +13 -9
  353. package/src/services/crud-helper.service.ts +32 -4
  354. package/src/services/crud.service.ts +158 -10
  355. package/src/services/field-metadata.service.ts +272 -67
  356. package/src/services/menu-item-metadata.service.ts +81 -50
  357. package/src/services/model-metadata.service.ts +18 -3
  358. package/src/services/mq-message.service.ts +16 -15
  359. package/src/services/queues/publisher-factory.service.ts +2 -1
  360. package/src/{providers → services/selection-providers}/list-of-values-selection-providers.service.ts +2 -2
  361. package/src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts +94 -0
  362. package/src/services/setting.service.ts +13 -10
  363. package/src/services/solid-introspect.service.ts +110 -10
  364. package/src/services/view-metadata.service.ts +48 -18
  365. package/src/solid-core.module.ts +5 -1
  366. package/src/subscribers/audit.subscriber.ts +12 -8
  367. package/src/subscribers/computed-entity-field.subscriber.ts +13 -7
  368. package/src/subscribers/created-by-updated-by.subscriber.ts +14 -8
  369. package/src/subscribers/field-metadata.subscriber.ts +1 -1
  370. package/src/subscribers/model-metadata.subscriber.ts +4 -2
  371. package/src/subscribers/soft-delete-aware-event.subscriber.ts +12 -6
  372. package/dist/providers/list-of-values-selection-providers.service.d.ts.map +0 -1
  373. package/dist/providers/list-of-values-selection-providers.service.js.map +0 -1
  374. package/src/commands/ingest-rag-chunking-strategy-for.md +0 -224
  375. package/src/entities/user.entity.ts.bkp +0 -144
  376. package/src/services/docker exec -it mssql //" +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"publisher-factory.service.js","sourceRoot":"","sources":["../../../src/services/queues/publisher-factory.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAwC;AACxC,2CAA4C;AAG5C,oEAAkE;AAClE,0EAAqE;AAI9D,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAGzB,YACqB,yBAAiD;QAAjD,8BAAyB,GAAzB,yBAAyB,CAAwB;QAHrD,WAAM,GAAG,IAAI,eAAM,CAAC,kBAAgB,CAAC,IAAI,CAAC,CAAC;IAK5D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwB,EAAE,aAAqB,EAAE,WAAoB;QAC/E,IAAI,kBAAkB,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,UAAU,CAAC;QACxF,IAAI,qBAAqB,GAAG,GAAG,aAAa,GAAG,IAAA,kBAAQ,EAAC,kBAAkB,CAAC,EAAE,CAAC;QAG9E,IAAI,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC7F,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAGxB,IAAI,kBAAkB,KAAK,UAAU,EAAE,CAAC;gBACpC,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBACjF,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,qBAAqB,EAAE,CAAC,CAAC;gBACrF,CAAC;YACL,CAAC;QACL,CAAC;QAGD,MAAM,oBAAoB,GAAsB,oBAAoB,CAAC,QAAQ,CAAC;QAC9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,oBAAoB,CAAC,IAAI,uBAAuB,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAEpJ,OAAO,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;CACJ,CAAA;AA/BY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAKuC,iDAAsB;GAJ7D,gBAAgB,CA+B5B","sourcesContent":["import { Logger } from '@nestjs/common';\nimport { Injectable } from '@nestjs/common';\n\nimport { QueueMessage, QueuePublisher } from 'src/interfaces/mq';\nimport { classify } from '@angular-devkit/core/src/utils/strings';\nimport { SolidIntrospectService } from '../solid-introspect.service';\n\n\n@Injectable()\nexport class PublisherFactory<T> {\n private readonly logger = new Logger(PublisherFactory.name);\n\n constructor(\n private readonly solidIntrospectionService: SolidIntrospectService\n ) {\n }\n\n async publish(message: QueueMessage<T>, publisherName: string, brokerToUse?: string): Promise<string> {\n let defaultBrokerToUse = brokerToUse || process.env.QUEUES_DEFAULT_BROKER || \"database\";\n let resolvedPublisherName = `${publisherName}${classify(defaultBrokerToUse)}`;\n\n // Register all ISolidDatabaseModules implementations\n let actualPublisherToUse = this.solidIntrospectionService.getProvider(resolvedPublisherName);\n if (!actualPublisherToUse) {\n\n // Extra check in place to make sure we do not have to refactor old publishers which have been created earlier. \n if (defaultBrokerToUse === 'rabbitmq') {\n actualPublisherToUse = this.solidIntrospectionService.getProvider(publisherName);\n if (!actualPublisherToUse) {\n throw new Error(`Unable to locate publisher with name ${resolvedPublisherName}`);\n }\n }\n }\n\n // type safe\n const typedActualPublisher: QueuePublisher<T> = actualPublisherToUse.instance;\n this.logger.debug(`Resolved publisher with name ${actualPublisherToUse.name}, and with options: ${JSON.stringify(typedActualPublisher.options())}`);\n\n return typedActualPublisher.publish(message);\n }\n}\n"]}
1
+ {"version":3,"file":"publisher-factory.service.js","sourceRoot":"","sources":["../../../src/services/queues/publisher-factory.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,2CAA4C;AAG5C,oEAAkE;AAClE,0EAAqE;AAI9D,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAGzB,YAEI,yBAAkE;QAAjD,8BAAyB,GAAzB,yBAAyB,CAAwB;QAJrD,WAAM,GAAG,IAAI,eAAM,CAAC,kBAAgB,CAAC,IAAI,CAAC,CAAC;IAM5D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwB,EAAE,aAAqB,EAAE,WAAoB;QAC/E,IAAI,kBAAkB,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,UAAU,CAAC;QACxF,IAAI,qBAAqB,GAAG,GAAG,aAAa,GAAG,IAAA,kBAAQ,EAAC,kBAAkB,CAAC,EAAE,CAAC;QAG9E,IAAI,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC7F,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAGxB,IAAI,kBAAkB,KAAK,UAAU,EAAE,CAAC;gBACpC,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBACjF,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,qBAAqB,EAAE,CAAC,CAAC;gBACrF,CAAC;YACL,CAAC;QACL,CAAC;QAGD,MAAM,oBAAoB,GAAsB,oBAAoB,CAAC,QAAQ,CAAC;QAC9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,oBAAoB,CAAC,IAAI,uBAAuB,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAEpJ,OAAO,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;CACJ,CAAA;AAhCY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAKJ,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iDAAsB,CAAC,CAAC,CAAA;qCACL,iDAAsB;GAL7D,gBAAgB,CAgC5B","sourcesContent":["import { forwardRef, Inject, Logger } from '@nestjs/common';\nimport { Injectable } from '@nestjs/common';\n\nimport { QueueMessage, QueuePublisher } from 'src/interfaces/mq';\nimport { classify } from '@angular-devkit/core/src/utils/strings';\nimport { SolidIntrospectService } from '../solid-introspect.service';\n\n\n@Injectable()\nexport class PublisherFactory<T> {\n private readonly logger = new Logger(PublisherFactory.name);\n\n constructor(\n @Inject(forwardRef(() => SolidIntrospectService))\n private readonly solidIntrospectionService: SolidIntrospectService\n ) {\n }\n\n async publish(message: QueueMessage<T>, publisherName: string, brokerToUse?: string): Promise<string> {\n let defaultBrokerToUse = brokerToUse || process.env.QUEUES_DEFAULT_BROKER || \"database\";\n let resolvedPublisherName = `${publisherName}${classify(defaultBrokerToUse)}`;\n\n // Register all ISolidDatabaseModules implementations\n let actualPublisherToUse = this.solidIntrospectionService.getProvider(resolvedPublisherName);\n if (!actualPublisherToUse) {\n\n // Extra check in place to make sure we do not have to refactor old publishers which have been created earlier. \n if (defaultBrokerToUse === 'rabbitmq') {\n actualPublisherToUse = this.solidIntrospectionService.getProvider(publisherName);\n if (!actualPublisherToUse) {\n throw new Error(`Unable to locate publisher with name ${resolvedPublisherName}`);\n }\n }\n }\n\n // type safe\n const typedActualPublisher: QueuePublisher<T> = actualPublisherToUse.instance;\n this.logger.debug(`Resolved publisher with name ${actualPublisherToUse.name}, and with options: ${JSON.stringify(typedActualPublisher.options())}`);\n\n return typedActualPublisher.publish(message);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { ListOfValuesService } from "../services/list-of-values.service";
2
- import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../interfaces";
1
+ import { ListOfValuesService } from "../list-of-values.service";
2
+ import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
3
3
  interface ListOfValuesProviderContext extends ISelectionProviderContext {
4
4
  type: string;
5
5
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-of-values-selection-providers.service.d.ts","sourceRoot":"","sources":["../../../src/services/selection-providers/list-of-values-selection-providers.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIhE,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAI3G,UAAU,2BAA4B,SAAQ,yBAAyB;IACnE,IAAI,EAAE,MAAM,CAAC;CAChB;AAID,qBAEa,6BAA8B,YAAW,kBAAkB,CAAC,2BAA2B,CAAC;IACrF,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAAnB,mBAAmB,EAAE,mBAAmB;IAErE,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAId,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,wBAAwB,GAAG,GAAG,CAAC;IAMhG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC;CA0B/G"}
@@ -10,10 +10,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ListOfValuesSelectionProvider = void 0;
13
- const list_of_values_service_1 = require("../services/list-of-values.service");
14
- const selection_provider_decorator_1 = require("../decorators/selection-provider.decorator");
13
+ const list_of_values_service_1 = require("../list-of-values.service");
14
+ const selection_provider_decorator_1 = require("../../decorators/selection-provider.decorator");
15
15
  const common_1 = require("@nestjs/common");
16
- const basic_filters_dto_1 = require("../dtos/basic-filters.dto");
16
+ const basic_filters_dto_1 = require("../../dtos/basic-filters.dto");
17
17
  const DEFAULT_LIMIT = 100;
18
18
  let ListOfValuesSelectionProvider = class ListOfValuesSelectionProvider {
19
19
  constructor(listOfValuesService) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-of-values-selection-providers.service.js","sourceRoot":"","sources":["../../../src/services/selection-providers/list-of-values-selection-providers.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,sEAAgE;AAEhE,gGAAgF;AAChF,2CAA4C;AAG5C,oEAA4D;AAM5D,MAAM,aAAa,GAAG,GAAG,CAAC;AAInB,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IACtC,YAA6B,mBAAwC;QAAxC,wBAAmB,GAAnB,mBAAmB,CAAqB;IAAI,CAAC;IAE1E,IAAI;QACA,OAAO,+BAA+B,CAAC;IAC3C,CAAC;IAED,IAAI;QACA,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAmB,EAAE,IAAiC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAElF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAAiC;QACzD,MAAM,gBAAgB,GAAG,IAAI,kCAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,gBAAgB,CAAC,OAAO,GAAG;gBACvB,IAAI,EAAE;oBACF,GAAG,EAAE,IAAI,CAAC,IAAI;iBACjB;aACJ,CAAC;QACN,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACR,gBAAgB,CAAC,OAAO,GAAG;gBACvB,GAAG,gBAAgB,CAAC,OAAO;gBAC3B,OAAO,EAAE;oBACL,UAAU,EAAE,IAAI,KAAK,GAAG;iBAC3B;aACJ,CAAC;QACN,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC3C,OAAO;gBACH,KAAK,EAAE,GAAG,CAAC,OAAO;gBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;aACnB,CAAA;QACL,CAAC,CAAC,CAAC;QACH,OAAO,eAAe,CAAC;IAC3B,CAAC;CACJ,CAAA;AA3CY,sEAA6B;wCAA7B,6BAA6B;IAFzC,IAAA,gDAAiB,GAAE;IACnB,IAAA,mBAAU,GAAE;qCAEyC,4CAAmB;GAD5D,6BAA6B,CA2CzC","sourcesContent":["\nimport { ListOfValuesService } from \"../list-of-values.service\";\nimport { PaginationQueryDto } from \"src/dtos/pagination-query.dto\";\nimport { SelectionProvider } from \"src/decorators/selection-provider.decorator\";\nimport { Injectable } from \"@nestjs/common\";\nimport { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from \"../../interfaces\";\nimport { filter } from \"rxjs\";\nimport { BasicFilterDto } from \"src/dtos/basic-filters.dto\";\n\ninterface ListOfValuesProviderContext extends ISelectionProviderContext {\n type: string;\n}\n\nconst DEFAULT_LIMIT = 100;\n\n@SelectionProvider()\n@Injectable()\nexport class ListOfValuesSelectionProvider implements ISelectionProvider<ListOfValuesProviderContext> {\n constructor(private readonly listOfValuesService: ListOfValuesService) { }\n\n name(): string {\n return 'ListOfValuesSelectionProvider';\n }\n\n help(): string {\n return \"# This is lov proivder\";\n }\n\n value(optionValue: string, ctxt: ListOfValuesProviderContext): Promise<ISelectionProviderValues | any> {\n const lov = this.listOfValuesService.findOneByValueAndType(optionValue, ctxt.type)\n\n throw new Error(\"Method not implemented.\");\n }\n\n async values(query: string, ctxt: ListOfValuesProviderContext): Promise<readonly ISelectionProviderValues[]> {\n const basicFilterQuery = new BasicFilterDto(DEFAULT_LIMIT, 0);\n if (ctxt.type) {\n basicFilterQuery.filters = {\n type: {\n $eq: ctxt.type\n }\n };\n }\n if (query) {\n basicFilterQuery.filters = {\n ...basicFilterQuery.filters,\n display: {\n $containsi: `%${query}%`\n }\n };\n }\n const lovs = await this.listOfValuesService.find(basicFilterQuery);\n const selectionValues = lovs.records.map(lov => {\n return {\n label: lov.display,\n value: lov.value\n }\n });\n return selectionValues;\n }\n}"]}
@@ -0,0 +1,20 @@
1
+ import { ListOfValuesService } from "../list-of-values.service";
2
+ import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
3
+ import { SolidIntrospectService } from "../solid-introspect.service";
4
+ interface PseudoForeignKeySelectionProviderContext extends ISelectionProviderContext {
5
+ modelName: string;
6
+ whereClauseFields: string[];
7
+ labelFieldName: string;
8
+ valueFieldName: string;
9
+ }
10
+ export declare class PseudoForeignKeySelectionProvider implements ISelectionProvider<PseudoForeignKeySelectionProviderContext> {
11
+ private readonly listOfValuesService;
12
+ readonly introspectService: SolidIntrospectService;
13
+ constructor(listOfValuesService: ListOfValuesService, introspectService: SolidIntrospectService);
14
+ name(): string;
15
+ help(): string;
16
+ value(optionValue: string, ctxt: PseudoForeignKeySelectionProviderContext): Promise<ISelectionProviderValues | any>;
17
+ values(query: string, ctxt: PseudoForeignKeySelectionProviderContext): Promise<readonly ISelectionProviderValues[]>;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=pseudo-foreign-key-selection-provider.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pseudo-foreign-key-selection-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE3G,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAIrE,UAAU,wCAAyC,SAAQ,yBAAyB;IAChF,SAAS,EAAE,MAAM,CAAC;IAElB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAID,qBAEa,iCAAkC,YAAW,kBAAkB,CAAC,wCAAwC,CAAC;IAE9G,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,QAAQ,CAAC,iBAAiB,EAAE,sBAAsB;gBADjC,mBAAmB,EAAE,mBAAmB,EAChD,iBAAiB,EAAE,sBAAsB;IAGtD,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAIR,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,wCAAwC,GAAG,OAAO,CAAC,wBAAwB,GAAG,GAAG,CAAC;IA0BnH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,wCAAwC,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC;CAgC5H"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PseudoForeignKeySelectionProvider = void 0;
13
+ const list_of_values_service_1 = require("../list-of-values.service");
14
+ const selection_provider_decorator_1 = require("../../decorators/selection-provider.decorator");
15
+ const common_1 = require("@nestjs/common");
16
+ const basic_filters_dto_1 = require("../../dtos/basic-filters.dto");
17
+ const solid_introspect_service_1 = require("../solid-introspect.service");
18
+ const strings_1 = require("@angular-devkit/core/src/utils/strings");
19
+ const DEFAULT_LIMIT = 100;
20
+ let PseudoForeignKeySelectionProvider = class PseudoForeignKeySelectionProvider {
21
+ constructor(listOfValuesService, introspectService) {
22
+ this.listOfValuesService = listOfValuesService;
23
+ this.introspectService = introspectService;
24
+ }
25
+ name() {
26
+ return 'PseudoForeignKeySelectionProvider';
27
+ }
28
+ help() {
29
+ return "# Use this provider to implement pseudo foreign key style relationships.";
30
+ }
31
+ async value(optionValue, ctxt) {
32
+ const basicFilterQuery = new basic_filters_dto_1.BasicFilterDto(DEFAULT_LIMIT, 0);
33
+ basicFilterQuery.filters = {
34
+ [ctxt.valueFieldName]: {
35
+ $eq: optionValue
36
+ }
37
+ };
38
+ const modelServiceInstanceWrapper = this.introspectService.getProvider(`${(0, strings_1.classify)(ctxt.modelName)}Service`);
39
+ if (!modelServiceInstanceWrapper) {
40
+ throw new common_1.BadRequestException(`Invalid model name (${ctxt.modelName}) specified in PseudoForeignKeySelectionProvider context.`);
41
+ }
42
+ const modelService = modelServiceInstanceWrapper.instance;
43
+ const recs = await modelService.find(basicFilterQuery);
44
+ if (!recs.records || recs.records.length == 0) {
45
+ throw new Error(`Invalid optionValue=${optionValue}, for PseudoForeignKeySelectionProvider with context: ${JSON.stringify(ctxt)}`);
46
+ }
47
+ return {
48
+ label: recs.records[0][ctxt.labelFieldName],
49
+ value: recs.records[0][ctxt.valueFieldName]
50
+ };
51
+ }
52
+ async values(query, ctxt) {
53
+ const basicFilterQuery = new basic_filters_dto_1.BasicFilterDto(ctxt.limit, ctxt.offset);
54
+ if (query) {
55
+ basicFilterQuery.filters = {
56
+ $or: ctxt.whereClauseFields.map((whereClauseField) => {
57
+ return {
58
+ [whereClauseField]: {
59
+ $containsi: `%${query}%`
60
+ }
61
+ };
62
+ })
63
+ };
64
+ }
65
+ const modelServiceInstanceWrapper = this.introspectService.getProvider(`${(0, strings_1.classify)(ctxt.modelName)}Service`);
66
+ if (!modelServiceInstanceWrapper) {
67
+ throw new common_1.BadRequestException(`Invalid model name (${ctxt.modelName}) specified in PseudoForeignKeySelectionProvider context.`);
68
+ }
69
+ const modelService = modelServiceInstanceWrapper.instance;
70
+ const recs = await modelService.find(basicFilterQuery);
71
+ const selectionValues = recs.records.map(rec => {
72
+ return {
73
+ label: rec[ctxt.labelFieldName],
74
+ value: rec[ctxt.valueFieldName]
75
+ };
76
+ });
77
+ return selectionValues;
78
+ }
79
+ };
80
+ exports.PseudoForeignKeySelectionProvider = PseudoForeignKeySelectionProvider;
81
+ exports.PseudoForeignKeySelectionProvider = PseudoForeignKeySelectionProvider = __decorate([
82
+ (0, selection_provider_decorator_1.SelectionProvider)(),
83
+ (0, common_1.Injectable)(),
84
+ __metadata("design:paramtypes", [list_of_values_service_1.ListOfValuesService,
85
+ solid_introspect_service_1.SolidIntrospectService])
86
+ ], PseudoForeignKeySelectionProvider);
87
+ //# sourceMappingURL=pseudo-foreign-key-selection-provider.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pseudo-foreign-key-selection-provider.service.js","sourceRoot":"","sources":["../../../src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { ListOfValuesService } from \"../list-of-values.service\";\nimport { SelectionProvider } from \"src/decorators/selection-provider.decorator\";\nimport { BadRequestException, Injectable } from \"@nestjs/common\";\nimport { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from \"../../interfaces\";\nimport { BasicFilterDto } from \"src/dtos/basic-filters.dto\";\nimport { SolidIntrospectService } from \"../solid-introspect.service\";\nimport { classify } from \"@angular-devkit/core/src/utils/strings\";\nimport { CRUDService } from \"../crud.service\";\n\ninterface PseudoForeignKeySelectionProviderContext extends ISelectionProviderContext {\n modelName: string;\n // ['countryName', 'countryCode'] - IN|INR\n whereClauseFields: string[];\n labelFieldName: string;\n valueFieldName: string;\n}\n\nconst DEFAULT_LIMIT = 100;\n\n@SelectionProvider()\n@Injectable()\nexport class PseudoForeignKeySelectionProvider implements ISelectionProvider<PseudoForeignKeySelectionProviderContext> {\n constructor(\n private readonly listOfValuesService: ListOfValuesService,\n readonly introspectService: SolidIntrospectService,\n ) { }\n\n name(): string {\n return 'PseudoForeignKeySelectionProvider';\n }\n\n help(): string {\n return \"# Use this provider to implement pseudo foreign key style relationships.\";\n }\n\n async value(optionValue: string, ctxt: PseudoForeignKeySelectionProviderContext): Promise<ISelectionProviderValues | any> {\n const basicFilterQuery = new BasicFilterDto(DEFAULT_LIMIT, 0);\n basicFilterQuery.filters = {\n [ctxt.valueFieldName]: {\n $eq: optionValue\n }\n };\n\n const modelServiceInstanceWrapper = this.introspectService.getProvider(`${classify(ctxt.modelName)}Service`);\n if (!modelServiceInstanceWrapper) {\n throw new BadRequestException(`Invalid model name (${ctxt.modelName}) specified in PseudoForeignKeySelectionProvider context.`);\n }\n\n const modelService: CRUDService<any> = modelServiceInstanceWrapper.instance;\n const recs = await modelService.find(basicFilterQuery);\n if (!recs.records || recs.records.length == 0) {\n throw new Error(`Invalid optionValue=${optionValue}, for PseudoForeignKeySelectionProvider with context: ${JSON.stringify(ctxt)}`)\n // return null;\n }\n\n return {\n label: recs.records[0][ctxt.labelFieldName],\n value: recs.records[0][ctxt.valueFieldName]\n }\n }\n\n async values(query: string, ctxt: PseudoForeignKeySelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {\n const basicFilterQuery = new BasicFilterDto(ctxt.limit, ctxt.offset);\n\n // Next we get hold of the userkey field in the parent model.\n if (query) {\n basicFilterQuery.filters = {\n $or: ctxt.whereClauseFields.map((whereClauseField) => {\n return {\n [whereClauseField]: {\n $containsi: `%${query}%`\n }\n }\n })\n };\n }\n\n const modelServiceInstanceWrapper = this.introspectService.getProvider(`${classify(ctxt.modelName)}Service`);\n if (!modelServiceInstanceWrapper) {\n throw new BadRequestException(`Invalid model name (${ctxt.modelName}) specified in PseudoForeignKeySelectionProvider context.`);\n }\n\n const modelService: CRUDService<any> = modelServiceInstanceWrapper.instance;\n\n const recs = await modelService.find(basicFilterQuery);\n const selectionValues = recs.records.map(rec => {\n return {\n label: rec[ctxt.labelFieldName],\n value: rec[ctxt.valueFieldName]\n }\n });\n return selectionValues;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"setting.service.d.ts","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,qBACa,cAAe,SAAQ,WAAW,CAAC,OAAO,CAAC;IAEpD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IACtB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAExD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACd,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAhB9C,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EACL,gBAAgB,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,EAErE,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EAE5D,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,SAAS,EACZ,qBAAqB,EAAE,qBAAqB,EACpB,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC;IAMrE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgEpC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAuDlD,OAAO,CAAC,kBAAkB;IA8CpB,cAAc,CAAC,UAAU,EAAE,MAAM;IA8BjC,cAAc,CAClB,QAAQ,GAAE,gBAAgB,EAAO,EACjC,aAAa,GAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAM,GAC7C,OAAO,CAAC,OAAO,EAAE,CAAC;IA0Ff,cAAc,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;CAuC5F"}
1
+ {"version":3,"file":"setting.service.d.ts","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,qBACa,cAAe,SAAQ,WAAW,CAAC,OAAO,CAAC;IAEpD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IACtB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAExD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACd,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAhB9C,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EACL,gBAAgB,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,EAErE,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EAE5D,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,SAAS,EACZ,qBAAqB,EAAE,qBAAqB,EACpB,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC;IAMrE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgEpC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAuDlD,OAAO,CAAC,kBAAkB;IA8CpB,cAAc,CAAC,UAAU,EAAE,MAAM;IA8BjC,cAAc,CAClB,QAAQ,GAAE,gBAAgB,EAAO,EACjC,aAAa,GAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAM,GAC7C,OAAO,CAAC,OAAO,EAAE,CAAC;IA6Ff,cAAc,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;CAuC5F"}
@@ -266,7 +266,8 @@ let SettingService = class SettingService extends crud_service_1.CRUDService {
266
266
  continue;
267
267
  }
268
268
  const key = settingDto.key;
269
- const value = settingDto.value ?? '';
269
+ const rawValue = settingDto.value;
270
+ const value = rawValue === null || rawValue === undefined ? null : String(rawValue);
270
271
  const settingType = settingDto.type ?? 'system';
271
272
  const existingSetting = existingSettings.find(s => s.key === key);
272
273
  if (existingSetting) {
@@ -1 +1 @@
1
- {"version":3,"file":"setting.service.js","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { ConfigService, ConfigType } from '@nestjs/config';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { CRUDService } from 'src/services/crud.service';\nimport { FileService } from 'src/services/file.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport commonConfig from 'src/config/common.config';\nimport { iamConfig } from 'src/config/iam.config';\nimport { Setting } from '../entities/setting.entity';\nimport { RequestContextService } from './request-context.service';\nimport { User } from 'src/entities/user.entity';\nimport { CreateSettingDto } from 'src/dtos/create-setting.dto';\nimport { SettingRepository } from 'src/repository/setting.repository';\n\n@Injectable()\nexport class SettingService extends CRUDService<Setting> {\n constructor(\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @Inject(iamConfig.KEY) private readonly iamConfiguration: ConfigType<typeof iamConfig>,\n @Inject(commonConfig.KEY)\n private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(Setting, 'default')\n // readonly repo: Repository<Setting>,\n readonly repo: SettingRepository,\n readonly moduleRef: ModuleRef,\n private readonly requestContextService: RequestContextService,\n @InjectRepository(User) private readonly userRepository: Repository<User>,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'setting', 'solid-core', moduleRef\n );\n }\n\n async seedDefaultSettings(): Promise<void> {\n const settingsSeederData = {\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,\n passwordLessAuth: this.iamConfiguration.passwordLessAuth,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\",\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: process.env.SOLID_APP_SUBTITLE || \"Lorem Ipsum\",\n appDescription: process.env.SOLID_APP_DESCRIPTION || \"lorem ipsum\",\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail: null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n authenticationPasswordRegex: this.iamConfiguration.PASSWORD_REGEX,\n authenticationPasswordRegexErrorMessage: this.iamConfiguration.PASSWORD_REGEX_ERROR_MESSAGE,\n authenticationPasswordComplexityDescription: this.iamConfiguration.PASSWORD_COMPLEXITY_DESC,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n showNameFieldsForRegistration:this.iamConfiguration.showNameFieldsForRegistration,\n forceChangePasswordOnFirstLogin: this.iamConfiguration.forceChangePasswordOnFirstLogin\n };\n\n const existingSettings = await this.repo.find();\n const existingKeys = new Set(existingSettings.map(s => s.key));\n\n const settingsToInsert: Setting[] = [];\n for (const [key, value] of Object.entries(settingsSeederData)) {\n if (!existingKeys.has(key)) {\n const setting = new Setting();\n setting.key = key;\n setting.value = typeof value === 'boolean' ? value.toString() :\n Array.isArray(value) ? value.join(',') :\n value === null || value === undefined ? null : String(value);\n settingsToInsert.push(setting);\n }\n }\n\n if (settingsToInsert.length > 0) {\n await this.repo.save(settingsToInsert);\n }\n }\n\n async wrapSettings(): Promise<Record<string, any>> {\n const settingsArray: Setting[] = await this.repo.find();\n\n if (!settingsArray || settingsArray.length === 0) {\n return this.getDefaultSettings();\n }\n\n const settingsMap: Record<string, any> = {};\n const arrayKeysToSkip = [\n 'authenticationPasswordRegex',\n 'authenticationPasswordRegexErrorMessage',\n 'authenticationPasswordComplexityDescription',\n ];\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n let value = setting.value;\n try {\n settingsMap[setting.key] = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n settingsMap[setting.key] = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n settingsMap[setting.key] = Number(value);\n } else if (!arrayKeysToSkip.includes(setting.key) && value.includes(',')) {\n settingsMap[setting.key] = value.split(',').map(item => item.trim());\n } else {\n settingsMap[setting.key] = value;\n }\n }\n\n // if (value === 'true' || value === 'false') {\n // settingsMap[setting.key] = value === 'true';\n // }\n // else if (!isNaN(Number(value)) && value.trim() !== '') {\n // settingsMap[setting.key] = Number(value);\n // }\n // else if (value.includes(',')) {\n // settingsMap[setting.key] = value.split(',').map(item => item.trim());\n // }\n // else {\n // settingsMap[setting.key] = value;\n // }\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n\n const mergedSettings = Object.keys(defaultSettings).reduce((acc, key) => {\n acc[key] = settingsMap[key] !== undefined ? settingsMap[key] : defaultSettings[key];\n return acc;\n }, {} as Record<string, any>);\n\n return mergedSettings;\n }\n\n private getDefaultSettings(): Record<string, any> {\n return {\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,\n passwordLessAuth: this.iamConfiguration.passwordLessAuth,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\", //in_form_view | in_image_view\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: null,\n appDescription: null,\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n forceChangePasswordOnFirstLogin: this.iamConfiguration.forceChangePasswordOnFirstLogin,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail: null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n authenticationPasswordRegex: this.iamConfiguration.PASSWORD_REGEX,\n authenticationPasswordRegexErrorMessage: this.iamConfiguration.PASSWORD_REGEX_ERROR_MESSAGE,\n authenticationPasswordComplexityDescription: this.iamConfiguration.PASSWORD_COMPLEXITY_DESC,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n iamAutoGeneratedPassword:this.iamConfiguration.iamAutoGeneratedPassword,\n showNameFieldsForRegistration:this.iamConfiguration.showNameFieldsForRegistration\n };\n }\n\n async getConfigValue(settingKey: string) {\n try {\n const settingsArray: Setting[] = await this.repo.find();\n const settingEntry = settingsArray.find(setting => setting.key === settingKey);\n\n if (settingEntry && settingEntry.value !== null && settingEntry.value !== undefined) {\n const value = settingEntry.value;\n\n if (value === 'true' || value === 'false') {\n return value === 'true';\n }\n else if (!isNaN(Number(value)) && value.trim() !== '') {\n return Number(value);\n }\n else if (value.includes(',')) {\n return value.split(',').map(item => item.trim());\n }\n else {\n return value;\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n } catch (error) {\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n }\n }\n\n async updateSettings(\n settings: CreateSettingDto[] = [],\n uploadedFiles: Array<Express.Multer.File> = []\n ): Promise<Setting[]> {\n const activeUser = this.requestContextService.getActiveUser();\n const userId = activeUser?.sub;\n\n const existingSettings = await this.repo.find();\n\n const settingsToUpdate: Setting[] = [];\n const settingsToCreate: Setting[] = [];\n\n let user: User | null = null;\n const hasUserSettings = settings.some(dto => dto.type === 'user');\n if (hasUserSettings && userId) {\n user = await this.userRepository.findOne({ where: { id: userId } });\n }\n\n // Handle uploaded files\n if (uploadedFiles?.length) {\n for (const file of uploadedFiles) {\n const settingKey = file.fieldname;\n const relativeFileName = `${file.filename}-${file.originalname}`;\n const storagePath = `${this.configService.get('app-builder.fileStorageDir')}/${relativeFileName}`;\n const baseUrl = process.env.BASE_URL || '';\n const fileUrl = `${baseUrl}/${storagePath}`;\n\n await this.fileService.copyFile(file.path, storagePath);\n await this.fileService.deleteFile(file.path);\n\n const matchedDto = settings.find(dto => dto.key === settingKey);\n const settingType = matchedDto?.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === settingKey);\n if (existingSetting) {\n existingSetting.value = fileUrl;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = settingKey;\n newSetting.value = fileUrl;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n }\n\n // Handle non-file settings\n for (const settingDto of settings) {\n if (uploadedFiles?.some(file => file.fieldname === settingDto.key)) {\n continue; // skip if already handled via file\n }\n\n const key = settingDto.key;\n const value = settingDto.value ?? '';\n const settingType = settingDto.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === key);\n if (existingSetting) {\n existingSetting.value = value;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = key;\n newSetting.value = value;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n\n if (settingsToUpdate.length > 0) {\n await this.repo.save(settingsToUpdate);\n }\n\n if (settingsToCreate.length > 0) {\n await this.repo.save(settingsToCreate);\n }\n\n return [...settingsToUpdate, ...settingsToCreate];\n }\n\n async getAllSettings(): Promise<{ system: Record<string, any>, user: Record<string, any> }> {\n const settingsArray = await this.repo.find({ relations: ['user'] });\n\n const system: Record<string, any> = {};\n const user: Record<string, any> = {};\n const arrayKeysToSkip = [\n 'authenticationPasswordRegex',\n 'authenticationPasswordRegexErrorMessage',\n 'authenticationPasswordComplexityDescription',\n ];\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n const value = setting.value;\n let parsedValue: any;\n\n try {\n parsedValue = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n parsedValue = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n parsedValue = Number(value);\n } else if (!arrayKeysToSkip.includes(setting.key) && value.includes(',')) {\n parsedValue = value.split(',').map(item => item.trim());\n } else {\n parsedValue = value;\n }\n }\n if (setting.type === 'user') {\n user[setting.key] = parsedValue;\n } else {\n system[setting.key] = parsedValue;\n }\n }\n }\n\n return { system, user };\n }\n\n}\n"]}
1
+ {"version":3,"file":"setting.service.js","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { ConfigService, ConfigType } from '@nestjs/config';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { CRUDService } from 'src/services/crud.service';\nimport { FileService } from 'src/services/file.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport commonConfig from 'src/config/common.config';\nimport { iamConfig } from 'src/config/iam.config';\nimport { Setting } from '../entities/setting.entity';\nimport { RequestContextService } from './request-context.service';\nimport { User } from 'src/entities/user.entity';\nimport { CreateSettingDto } from 'src/dtos/create-setting.dto';\nimport { SettingRepository } from 'src/repository/setting.repository';\n\n@Injectable()\nexport class SettingService extends CRUDService<Setting> {\n constructor(\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @Inject(iamConfig.KEY) private readonly iamConfiguration: ConfigType<typeof iamConfig>,\n @Inject(commonConfig.KEY)\n private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(Setting, 'default')\n // readonly repo: Repository<Setting>,\n readonly repo: SettingRepository,\n readonly moduleRef: ModuleRef,\n private readonly requestContextService: RequestContextService,\n @InjectRepository(User) private readonly userRepository: Repository<User>,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'setting', 'solid-core', moduleRef\n );\n }\n\n async seedDefaultSettings(): Promise<void> {\n const settingsSeederData = {\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,\n passwordLessAuth: this.iamConfiguration.passwordLessAuth,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\",\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: process.env.SOLID_APP_SUBTITLE || \"Lorem Ipsum\",\n appDescription: process.env.SOLID_APP_DESCRIPTION || \"lorem ipsum\",\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail: null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n authenticationPasswordRegex: this.iamConfiguration.PASSWORD_REGEX,\n authenticationPasswordRegexErrorMessage: this.iamConfiguration.PASSWORD_REGEX_ERROR_MESSAGE,\n authenticationPasswordComplexityDescription: this.iamConfiguration.PASSWORD_COMPLEXITY_DESC,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n showNameFieldsForRegistration: this.iamConfiguration.showNameFieldsForRegistration,\n forceChangePasswordOnFirstLogin: this.iamConfiguration.forceChangePasswordOnFirstLogin\n };\n\n const existingSettings = await this.repo.find();\n const existingKeys = new Set(existingSettings.map(s => s.key));\n\n const settingsToInsert: Setting[] = [];\n for (const [key, value] of Object.entries(settingsSeederData)) {\n if (!existingKeys.has(key)) {\n const setting = new Setting();\n setting.key = key;\n setting.value = typeof value === 'boolean' ? value.toString() :\n Array.isArray(value) ? value.join(',') :\n value === null || value === undefined ? null : String(value);\n settingsToInsert.push(setting);\n }\n }\n\n if (settingsToInsert.length > 0) {\n await this.repo.save(settingsToInsert);\n }\n }\n\n async wrapSettings(): Promise<Record<string, any>> {\n const settingsArray: Setting[] = await this.repo.find();\n\n if (!settingsArray || settingsArray.length === 0) {\n return this.getDefaultSettings();\n }\n\n const settingsMap: Record<string, any> = {};\n const arrayKeysToSkip = [\n 'authenticationPasswordRegex',\n 'authenticationPasswordRegexErrorMessage',\n 'authenticationPasswordComplexityDescription',\n ];\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n let value = setting.value;\n try {\n settingsMap[setting.key] = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n settingsMap[setting.key] = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n settingsMap[setting.key] = Number(value);\n } else if (!arrayKeysToSkip.includes(setting.key) && value.includes(',')) {\n settingsMap[setting.key] = value.split(',').map(item => item.trim());\n } else {\n settingsMap[setting.key] = value;\n }\n }\n\n // if (value === 'true' || value === 'false') {\n // settingsMap[setting.key] = value === 'true';\n // }\n // else if (!isNaN(Number(value)) && value.trim() !== '') {\n // settingsMap[setting.key] = Number(value);\n // }\n // else if (value.includes(',')) {\n // settingsMap[setting.key] = value.split(',').map(item => item.trim());\n // }\n // else {\n // settingsMap[setting.key] = value;\n // }\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n\n const mergedSettings = Object.keys(defaultSettings).reduce((acc, key) => {\n acc[key] = settingsMap[key] !== undefined ? settingsMap[key] : defaultSettings[key];\n return acc;\n }, {} as Record<string, any>);\n\n return mergedSettings;\n }\n\n private getDefaultSettings(): Record<string, any> {\n return {\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,\n passwordLessAuth: this.iamConfiguration.passwordLessAuth,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\", //in_form_view | in_image_view\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: null,\n appDescription: null,\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n forceChangePasswordOnFirstLogin: this.iamConfiguration.forceChangePasswordOnFirstLogin,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail: null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n authenticationPasswordRegex: this.iamConfiguration.PASSWORD_REGEX,\n authenticationPasswordRegexErrorMessage: this.iamConfiguration.PASSWORD_REGEX_ERROR_MESSAGE,\n authenticationPasswordComplexityDescription: this.iamConfiguration.PASSWORD_COMPLEXITY_DESC,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n iamAutoGeneratedPassword: this.iamConfiguration.iamAutoGeneratedPassword,\n showNameFieldsForRegistration: this.iamConfiguration.showNameFieldsForRegistration\n };\n }\n\n async getConfigValue(settingKey: string) {\n try {\n const settingsArray: Setting[] = await this.repo.find();\n const settingEntry = settingsArray.find(setting => setting.key === settingKey);\n\n if (settingEntry && settingEntry.value !== null && settingEntry.value !== undefined) {\n const value = settingEntry.value;\n\n if (value === 'true' || value === 'false') {\n return value === 'true';\n }\n else if (!isNaN(Number(value)) && value.trim() !== '') {\n return Number(value);\n }\n else if (value.includes(',')) {\n return value.split(',').map(item => item.trim());\n }\n else {\n return value;\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n } catch (error) {\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n }\n }\n\n async updateSettings(\n settings: CreateSettingDto[] = [],\n uploadedFiles: Array<Express.Multer.File> = []\n ): Promise<Setting[]> {\n const activeUser = this.requestContextService.getActiveUser();\n const userId = activeUser?.sub;\n\n const existingSettings = await this.repo.find();\n\n const settingsToUpdate: Setting[] = [];\n const settingsToCreate: Setting[] = [];\n\n let user: User | null = null;\n const hasUserSettings = settings.some(dto => dto.type === 'user');\n if (hasUserSettings && userId) {\n user = await this.userRepository.findOne({ where: { id: userId } });\n }\n\n // Handle uploaded files\n if (uploadedFiles?.length) {\n for (const file of uploadedFiles) {\n const settingKey = file.fieldname;\n const relativeFileName = `${file.filename}-${file.originalname}`;\n const storagePath = `${this.configService.get('app-builder.fileStorageDir')}/${relativeFileName}`;\n const baseUrl = process.env.BASE_URL || '';\n const fileUrl = `${baseUrl}/${storagePath}`;\n\n await this.fileService.copyFile(file.path, storagePath);\n await this.fileService.deleteFile(file.path);\n\n const matchedDto = settings.find(dto => dto.key === settingKey);\n const settingType = matchedDto?.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === settingKey);\n if (existingSetting) {\n existingSetting.value = fileUrl;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = settingKey;\n newSetting.value = fileUrl;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n }\n\n // Handle non-file settings\n for (const settingDto of settings) {\n if (uploadedFiles?.some(file => file.fieldname === settingDto.key)) {\n continue; // skip if already handled via file\n }\n\n const key = settingDto.key;\n // const value = settingDto.value ?? '';\n const rawValue = settingDto.value;\n const value = rawValue === null || rawValue === undefined ? null : String(rawValue);\n\n const settingType = settingDto.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === key);\n if (existingSetting) {\n existingSetting.value = value;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = key;\n newSetting.value = value;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n\n if (settingsToUpdate.length > 0) {\n await this.repo.save(settingsToUpdate);\n }\n\n if (settingsToCreate.length > 0) {\n await this.repo.save(settingsToCreate);\n }\n\n return [...settingsToUpdate, ...settingsToCreate];\n }\n\n async getAllSettings(): Promise<{ system: Record<string, any>, user: Record<string, any> }> {\n const settingsArray = await this.repo.find({ relations: ['user'] });\n\n const system: Record<string, any> = {};\n const user: Record<string, any> = {};\n const arrayKeysToSkip = [\n 'authenticationPasswordRegex',\n 'authenticationPasswordRegexErrorMessage',\n 'authenticationPasswordComplexityDescription',\n ];\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n const value = setting.value;\n let parsedValue: any;\n\n try {\n parsedValue = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n parsedValue = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n parsedValue = Number(value);\n } else if (!arrayKeysToSkip.includes(setting.key) && value.includes(',')) {\n parsedValue = value.split(',').map(item => item.trim());\n } else {\n parsedValue = value;\n }\n }\n if (setting.type === 'user') {\n user[setting.key] = parsedValue;\n } else {\n system[setting.key] = parsedValue;\n }\n }\n }\n\n return { system, user };\n }\n\n}\n"]}
@@ -1,16 +1,32 @@
1
1
  import { OnApplicationBootstrap } from '@nestjs/common';
2
- import { DiscoveryService, MetadataScanner, Reflector } from '@nestjs/core';
2
+ import { DiscoveryService, MetadataScanner, ModuleRef, Reflector } from '@nestjs/core';
3
3
  import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
4
4
  import { SolidRegistry } from 'src/helpers/solid-registry';
5
5
  import { CRUDService } from './crud.service';
6
+ import { RequestContextService } from './request-context.service';
7
+ import { CreatedByUpdatedBySubscriber } from 'src/subscribers/created-by-updated-by.subscriber';
8
+ import { AuditSubscriber } from 'src/subscribers/audit.subscriber';
9
+ import { ComputedEntityFieldSubscriber } from 'src/subscribers/computed-entity-field.subscriber';
10
+ import { SoftDeleteAwareEventSubscriber } from 'src/subscribers/soft-delete-aware-event.subscriber';
11
+ import { ChatterMessageService } from './chatter-message.service';
12
+ import { ModelMetadataRepository } from 'src/repository/model-metadata.repository';
13
+ import { ModelMetadataHelperService, PublisherFactory } from 'src';
14
+ export declare const coreSubscriberClasses: (typeof CreatedByUpdatedBySubscriber | typeof AuditSubscriber | typeof ComputedEntityFieldSubscriber | typeof SoftDeleteAwareEventSubscriber)[];
6
15
  export declare class SolidIntrospectService implements OnApplicationBootstrap {
7
16
  private readonly discoveryService;
8
17
  private readonly reflector;
9
18
  private readonly metadataScanner;
10
19
  private readonly solidRegistry;
11
- constructor(discoveryService: DiscoveryService, reflector: Reflector, metadataScanner: MetadataScanner, solidRegistry: SolidRegistry);
20
+ private readonly moduleRef;
21
+ private readonly requestContextService;
22
+ private readonly chatterMessageService;
23
+ private readonly modelMetadataHelperService;
24
+ private readonly modelMetadataRepo;
25
+ private readonly publisherFactory;
26
+ constructor(discoveryService: DiscoveryService, reflector: Reflector, metadataScanner: MetadataScanner, solidRegistry: SolidRegistry, moduleRef: ModuleRef, requestContextService: RequestContextService, chatterMessageService: ChatterMessageService, modelMetadataHelperService: ModelMetadataHelperService, modelMetadataRepo: ModelMetadataRepository, publisherFactory: PublisherFactory<any>);
12
27
  private readonly logger;
13
- onApplicationBootstrap(): void;
28
+ onApplicationBootstrap(): Promise<void>;
29
+ bootstrapCoreTypeOrmSubscribers(dbModules: Array<InstanceWrapper<any>>): Promise<void>;
14
30
  isDashboardQuestionDataProvider(providerWrapper: InstanceWrapper<any>): boolean;
15
31
  private isSeeder;
16
32
  private isErrorCodeProvider;
@@ -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,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAIzE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAS7C,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;gBAHb,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa;IAG/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAClE,sBAAsB;IA4HtB,+BAA+B,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC;IAWrE,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;IAY3B,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,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,EAA0C,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAChG,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;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAkC,MAAM,kDAAkD,CAAC;AACjI,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAEnE,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,qBAAqB;IAEtC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAGlC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAZhB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,qBAAqB,EAAE,qBAAqB,EAE5C,qBAAqB,EAAE,qBAAqB,EAC5C,0BAA0B,EAAE,0BAA0B,EACtD,iBAAiB,EAAE,uBAAuB,EAG1C,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC;IAI1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAC5D,sBAAsB;IA+HtB,+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;IAWhB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;IAY3B,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,4BAA4B;IAYpC,OAAO,CAAC,QAAQ;IAuBhB,cAAc,CAAC,iBAAiB,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;IAK3D,WAAW,CAAC,YAAY,EAAE,MAAM;CAGjC"}
@@ -8,32 +8,56 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  var SolidIntrospectService_1;
12
15
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.SolidIntrospectService = void 0;
16
+ exports.SolidIntrospectService = exports.coreSubscriberClasses = void 0;
14
17
  const strings_1 = require("@angular-devkit/core/src/utils/strings");
15
18
  const common_1 = require("@nestjs/common");
16
19
  const core_1 = require("@nestjs/core");
20
+ const typeorm_1 = require("@nestjs/typeorm");
17
21
  const computed_field_provider_decorator_1 = require("../decorators/computed-field-provider.decorator");
18
- const selection_provider_decorator_1 = require("../decorators/selection-provider.decorator");
19
- const solid_database_module_decorator_1 = require("../decorators/solid-database-module.decorator");
20
- const solid_registry_1 = require("../helpers/solid-registry");
21
- const scheduled_job_provider_decorator_1 = require("../decorators/scheduled-job-provider.decorator");
22
- const dashboard_selection_provider_decorator_1 = require("../decorators/dashboard-selection-provider.decorator");
23
22
  const dashboard_question_data_provider_decorator_1 = require("../decorators/dashboard-question-data-provider.decorator");
24
- const mail_provider_decorator_1 = require("../decorators/mail-provider.decorator");
25
- const whatsapp_provider_decorator_1 = require("../decorators/whatsapp-provider.decorator");
23
+ const dashboard_selection_provider_decorator_1 = require("../decorators/dashboard-selection-provider.decorator");
26
24
  const error_codes_provider_decorator_1 = require("../decorators/error-codes-provider.decorator");
25
+ const mail_provider_decorator_1 = require("../decorators/mail-provider.decorator");
26
+ const scheduled_job_provider_decorator_1 = require("../decorators/scheduled-job-provider.decorator");
27
27
  const security_rule_config_provider_decorator_1 = require("../decorators/security-rule-config-provider.decorator");
28
+ const selection_provider_decorator_1 = require("../decorators/selection-provider.decorator");
29
+ const solid_database_module_decorator_1 = require("../decorators/solid-database-module.decorator");
30
+ const whatsapp_provider_decorator_1 = require("../decorators/whatsapp-provider.decorator");
31
+ const solid_registry_1 = require("../helpers/solid-registry");
32
+ const request_context_service_1 = require("./request-context.service");
33
+ const created_by_updated_by_subscriber_1 = require("../subscribers/created-by-updated-by.subscriber");
34
+ const audit_subscriber_1 = require("../subscribers/audit.subscriber");
35
+ const computed_entity_field_subscriber_1 = require("../subscribers/computed-entity-field.subscriber");
36
+ const soft_delete_aware_event_subscriber_1 = require("../subscribers/soft-delete-aware-event.subscriber");
37
+ const chatter_message_service_1 = require("./chatter-message.service");
38
+ const model_metadata_repository_1 = require("../repository/model-metadata.repository");
39
+ const src_1 = require("..");
40
+ exports.coreSubscriberClasses = [
41
+ audit_subscriber_1.AuditSubscriber,
42
+ computed_entity_field_subscriber_1.ComputedEntityFieldSubscriber,
43
+ created_by_updated_by_subscriber_1.CreatedByUpdatedBySubscriber,
44
+ soft_delete_aware_event_subscriber_1.SoftDeleteAwareEventSubscriber
45
+ ];
28
46
  let SolidIntrospectService = SolidIntrospectService_1 = class SolidIntrospectService {
29
- constructor(discoveryService, reflector, metadataScanner, solidRegistry) {
47
+ constructor(discoveryService, reflector, metadataScanner, solidRegistry, moduleRef, requestContextService, chatterMessageService, modelMetadataHelperService, modelMetadataRepo, publisherFactory) {
30
48
  this.discoveryService = discoveryService;
31
49
  this.reflector = reflector;
32
50
  this.metadataScanner = metadataScanner;
33
51
  this.solidRegistry = solidRegistry;
52
+ this.moduleRef = moduleRef;
53
+ this.requestContextService = requestContextService;
54
+ this.chatterMessageService = chatterMessageService;
55
+ this.modelMetadataHelperService = modelMetadataHelperService;
56
+ this.modelMetadataRepo = modelMetadataRepo;
57
+ this.publisherFactory = publisherFactory;
34
58
  this.logger = new common_1.Logger(SolidIntrospectService_1.name);
35
59
  }
36
- onApplicationBootstrap() {
60
+ async onApplicationBootstrap() {
37
61
  this.logger.log('Introspecting the application for Solid metadata');
38
62
  const seeders = this.discoveryService
39
63
  .getProviders()
@@ -115,6 +139,47 @@ let SolidIntrospectService = SolidIntrospectService_1 = class SolidIntrospectSer
115
139
  securityRuleConfigProviders.forEach((securityRuleConfigProvider) => {
116
140
  this.solidRegistry.registerSecurityRuleConfigProvider(securityRuleConfigProvider);
117
141
  });
142
+ await this.bootstrapCoreTypeOrmSubscribers(solidDatabaseModules);
143
+ }
144
+ async bootstrapCoreTypeOrmSubscribers(dbModules) {
145
+ for (const wrapper of dbModules) {
146
+ const instance = wrapper.instance;
147
+ if (!instance || typeof instance.name !== 'function') {
148
+ this.logger.warn('Skipping a solid DB module wrapper with no instance or name() method');
149
+ continue;
150
+ }
151
+ const dsName = instance.name();
152
+ const token = dsName ? (0, typeorm_1.getDataSourceToken)(dsName) : (0, typeorm_1.getDataSourceToken)();
153
+ let ds;
154
+ try {
155
+ ds = this.moduleRef.get(token, { strict: false });
156
+ }
157
+ catch (err) {
158
+ this.logger.warn(`DataSource token for "${dsName ?? 'default'}" not found: ${err?.message ?? err}`);
159
+ }
160
+ if (!ds) {
161
+ this.logger.warn(`No DataSource found for module "${dsName}". Skipping subscriber registration.`);
162
+ continue;
163
+ }
164
+ if (!ds.isInitialized) {
165
+ try {
166
+ await ds.initialize();
167
+ }
168
+ catch (err) {
169
+ this.logger.error(`Failed to initialize DataSource "${dsName}": ${err}`);
170
+ continue;
171
+ }
172
+ }
173
+ for (const SubClass of exports.coreSubscriberClasses) {
174
+ const alreadyRegistered = ds.subscribers.some((s) => s.constructor?.name === SubClass.name);
175
+ if (alreadyRegistered) {
176
+ this.logger.debug(`Subscriber ${SubClass.name} already registered on datasource ${dsName ?? 'default'}`);
177
+ continue;
178
+ }
179
+ const subscriberInstance = await this.moduleRef.resolve(SubClass, undefined, { strict: false });
180
+ subscriberInstance.bindToDataSource(ds);
181
+ }
182
+ }
118
183
  }
119
184
  isDashboardQuestionDataProvider(providerWrapper) {
120
185
  const { instance } = providerWrapper;
@@ -220,9 +285,16 @@ let SolidIntrospectService = SolidIntrospectService_1 = class SolidIntrospectSer
220
285
  exports.SolidIntrospectService = SolidIntrospectService;
221
286
  exports.SolidIntrospectService = SolidIntrospectService = SolidIntrospectService_1 = __decorate([
222
287
  (0, common_1.Injectable)(),
288
+ __param(9, (0, common_1.Inject)((0, common_1.forwardRef)(() => src_1.PublisherFactory))),
223
289
  __metadata("design:paramtypes", [core_1.DiscoveryService,
224
290
  core_1.Reflector,
225
291
  core_1.MetadataScanner,
226
- solid_registry_1.SolidRegistry])
292
+ solid_registry_1.SolidRegistry,
293
+ core_1.ModuleRef,
294
+ request_context_service_1.RequestContextService,
295
+ chatter_message_service_1.ChatterMessageService,
296
+ src_1.ModelMetadataHelperService,
297
+ model_metadata_repository_1.ModelMetadataRepository,
298
+ src_1.PublisherFactory])
227
299
  ], SolidIntrospectService);
228
300
  //# sourceMappingURL=solid-introspect.service.js.map