@solidstarters/solid-core 1.2.193 → 1.2.201

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 (630) hide show
  1. package/dist/commands/fixtures/fixtures-setup.command.d.ts +15 -0
  2. package/dist/commands/fixtures/fixtures-setup.command.d.ts.map +1 -0
  3. package/dist/commands/fixtures/fixtures-setup.command.js +58 -0
  4. package/dist/commands/fixtures/fixtures-setup.command.js.map +1 -0
  5. package/dist/commands/fixtures/fixtures-tear-down.command.d.ts +16 -0
  6. package/dist/commands/fixtures/fixtures-tear-down.command.d.ts.map +1 -0
  7. package/dist/commands/fixtures/fixtures-tear-down.command.js +59 -0
  8. package/dist/commands/fixtures/fixtures-tear-down.command.js.map +1 -0
  9. package/dist/commands/mcp.command.d.ts +20 -0
  10. package/dist/commands/mcp.command.d.ts.map +1 -0
  11. package/dist/commands/mcp.command.js +208 -0
  12. package/dist/commands/mcp.command.js.map +1 -0
  13. package/dist/commands/refresh-model.command.d.ts +8 -5
  14. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  15. package/dist/commands/refresh-model.command.js +36 -0
  16. package/dist/commands/refresh-model.command.js.map +1 -1
  17. package/dist/commands/remove-fields.command.js +1 -1
  18. package/dist/commands/remove-fields.command.js.map +1 -1
  19. package/dist/commands/seed.command.d.ts +2 -0
  20. package/dist/commands/seed.command.d.ts.map +1 -1
  21. package/dist/commands/seed.command.js +28 -1
  22. package/dist/commands/seed.command.js.map +1 -1
  23. package/dist/constants/error-messages.d.ts +2 -0
  24. package/dist/constants/error-messages.d.ts.map +1 -1
  25. package/dist/constants/error-messages.js +4 -0
  26. package/dist/constants/error-messages.js.map +1 -1
  27. package/dist/controllers/authentication.controller.js +1 -1
  28. package/dist/controllers/authentication.controller.js.map +1 -1
  29. package/dist/controllers/email-template.controller.js +1 -1
  30. package/dist/controllers/email-template.controller.js.map +1 -1
  31. package/dist/controllers/field-metadata.controller.d.ts +136 -4
  32. package/dist/controllers/field-metadata.controller.d.ts.map +1 -1
  33. package/dist/controllers/field-metadata.controller.js +14 -1
  34. package/dist/controllers/field-metadata.controller.js.map +1 -1
  35. package/dist/controllers/media-storage-provider-metadata.controller.js +1 -1
  36. package/dist/controllers/media-storage-provider-metadata.controller.js.map +1 -1
  37. package/dist/controllers/model-metadata.controller.js +1 -1
  38. package/dist/controllers/model-metadata.controller.js.map +1 -1
  39. package/dist/controllers/model-sequence.controller.d.ts +43 -0
  40. package/dist/controllers/model-sequence.controller.d.ts.map +1 -0
  41. package/dist/controllers/model-sequence.controller.js +179 -0
  42. package/dist/controllers/model-sequence.controller.js.map +1 -0
  43. package/dist/controllers/module-metadata.controller.js +1 -1
  44. package/dist/controllers/module-metadata.controller.js.map +1 -1
  45. package/dist/controllers/otp-authentication.controller.js +1 -1
  46. package/dist/controllers/otp-authentication.controller.js.map +1 -1
  47. package/dist/controllers/service.controller.js +1 -1
  48. package/dist/controllers/service.controller.js.map +1 -1
  49. package/dist/controllers/setting.controller.d.ts +1 -0
  50. package/dist/controllers/setting.controller.d.ts.map +1 -1
  51. package/dist/controllers/setting.controller.js +15 -0
  52. package/dist/controllers/setting.controller.js.map +1 -1
  53. package/dist/controllers/sms-template.controller.js +1 -1
  54. package/dist/controllers/sms-template.controller.js.map +1 -1
  55. package/dist/controllers/test-queue.controller.js +1 -1
  56. package/dist/controllers/test-queue.controller.js.map +1 -1
  57. package/dist/controllers/test.controller.js +1 -1
  58. package/dist/controllers/test.controller.js.map +1 -1
  59. package/dist/dtos/basic-filters.dto.d.ts +3 -1
  60. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  61. package/dist/dtos/basic-filters.dto.js +8 -2
  62. package/dist/dtos/basic-filters.dto.js.map +1 -1
  63. package/dist/dtos/basic-group-filters.dto.d.ts +6 -0
  64. package/dist/dtos/basic-group-filters.dto.d.ts.map +1 -0
  65. package/dist/dtos/basic-group-filters.dto.js +46 -0
  66. package/dist/dtos/basic-group-filters.dto.js.map +1 -0
  67. package/dist/dtos/create-ai-interaction.dto.d.ts +2 -0
  68. package/dist/dtos/create-ai-interaction.dto.d.ts.map +1 -1
  69. package/dist/dtos/create-ai-interaction.dto.js +14 -1
  70. package/dist/dtos/create-ai-interaction.dto.js.map +1 -1
  71. package/dist/dtos/create-field-metadata.dto.d.ts +22 -5
  72. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  73. package/dist/dtos/create-field-metadata.dto.js +34 -8
  74. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  75. package/dist/dtos/create-import-transaction.dto.d.ts +0 -1
  76. package/dist/dtos/create-import-transaction.dto.d.ts.map +1 -1
  77. package/dist/dtos/create-import-transaction.dto.js +1 -7
  78. package/dist/dtos/create-import-transaction.dto.js.map +1 -1
  79. package/dist/dtos/create-model-metadata.dto.d.ts +2 -0
  80. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  81. package/dist/dtos/create-model-metadata.dto.js +13 -1
  82. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  83. package/dist/dtos/create-model-sequence.dto.d.ts +14 -0
  84. package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -0
  85. package/dist/dtos/create-model-sequence.dto.js +90 -0
  86. package/dist/dtos/create-model-sequence.dto.js.map +1 -0
  87. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  88. package/dist/dtos/create-role-metadata.dto.js +6 -1
  89. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  90. package/dist/dtos/get-mcp-url.dto.d.ts +5 -0
  91. package/dist/dtos/get-mcp-url.dto.d.ts.map +1 -0
  92. package/dist/dtos/get-mcp-url.dto.js +31 -0
  93. package/dist/dtos/get-mcp-url.dto.js.map +1 -0
  94. package/dist/dtos/resolve-s3-url.dto.d.ts +10 -0
  95. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -0
  96. package/dist/dtos/resolve-s3-url.dto.js +49 -0
  97. package/dist/dtos/resolve-s3-url.dto.js.map +1 -0
  98. package/dist/dtos/update-ai-interaction.dto.d.ts +2 -0
  99. package/dist/dtos/update-ai-interaction.dto.d.ts.map +1 -1
  100. package/dist/dtos/update-ai-interaction.dto.js +13 -1
  101. package/dist/dtos/update-ai-interaction.dto.js.map +1 -1
  102. package/dist/dtos/update-field-metadata.dto.d.ts.map +1 -1
  103. package/dist/dtos/update-field-metadata.dto.js.map +1 -1
  104. package/dist/dtos/update-import-transaction.dto.d.ts +0 -1
  105. package/dist/dtos/update-import-transaction.dto.d.ts.map +1 -1
  106. package/dist/dtos/update-import-transaction.dto.js +1 -7
  107. package/dist/dtos/update-import-transaction.dto.js.map +1 -1
  108. package/dist/dtos/update-model-sequence.dto.d.ts +15 -0
  109. package/dist/dtos/update-model-sequence.dto.d.ts.map +1 -0
  110. package/dist/dtos/update-model-sequence.dto.js +94 -0
  111. package/dist/dtos/update-model-sequence.dto.js.map +1 -0
  112. package/dist/entities/action-metadata.entity.js +4 -4
  113. package/dist/entities/action-metadata.entity.js.map +1 -1
  114. package/dist/entities/ai-interaction.entity.d.ts +2 -0
  115. package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
  116. package/dist/entities/ai-interaction.entity.js +15 -6
  117. package/dist/entities/ai-interaction.entity.js.map +1 -1
  118. package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
  119. package/dist/entities/chatter-message-details.entity.js +1 -1
  120. package/dist/entities/chatter-message-details.entity.js.map +1 -1
  121. package/dist/entities/chatter-message.entity.js +1 -1
  122. package/dist/entities/chatter-message.entity.js.map +1 -1
  123. package/dist/entities/common.entity.d.ts +2 -3
  124. package/dist/entities/common.entity.d.ts.map +1 -1
  125. package/dist/entities/common.entity.js +10 -11
  126. package/dist/entities/common.entity.js.map +1 -1
  127. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +2 -2
  128. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
  129. package/dist/entities/dashboard-question.entity.js +3 -3
  130. package/dist/entities/dashboard-question.entity.js.map +1 -1
  131. package/dist/entities/dashboard-variable.entity.js +3 -3
  132. package/dist/entities/dashboard-variable.entity.js.map +1 -1
  133. package/dist/entities/dashboard.entity.js +1 -1
  134. package/dist/entities/dashboard.entity.js.map +1 -1
  135. package/dist/entities/email-template.entity.d.ts.map +1 -1
  136. package/dist/entities/email-template.entity.js +4 -3
  137. package/dist/entities/email-template.entity.js.map +1 -1
  138. package/dist/entities/export-template.entity.js +2 -2
  139. package/dist/entities/export-template.entity.js.map +1 -1
  140. package/dist/entities/export-transaction.entity.js +2 -2
  141. package/dist/entities/export-transaction.entity.js.map +1 -1
  142. package/dist/entities/field-metadata.entity.d.ts +1 -0
  143. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  144. package/dist/entities/field-metadata.entity.js +8 -4
  145. package/dist/entities/field-metadata.entity.js.map +1 -1
  146. package/dist/entities/import-transaction-error-log.entity.js +1 -1
  147. package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
  148. package/dist/entities/import-transaction.entity.d.ts +0 -1
  149. package/dist/entities/import-transaction.entity.d.ts.map +1 -1
  150. package/dist/entities/import-transaction.entity.js +2 -7
  151. package/dist/entities/import-transaction.entity.js.map +1 -1
  152. package/dist/entities/legacy-common-with-id.entity.d.ts +5 -0
  153. package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -0
  154. package/dist/entities/legacy-common-with-id.entity.js +32 -0
  155. package/dist/entities/legacy-common-with-id.entity.js.map +1 -0
  156. package/dist/entities/legacy-common.entity.d.ts +13 -0
  157. package/dist/entities/legacy-common.entity.d.ts.map +1 -0
  158. package/dist/entities/legacy-common.entity.js +68 -0
  159. package/dist/entities/legacy-common.entity.js.map +1 -0
  160. package/dist/entities/list-of-values.entity.js +2 -2
  161. package/dist/entities/list-of-values.entity.js.map +1 -1
  162. package/dist/entities/locale.entity.js +1 -1
  163. package/dist/entities/locale.entity.js.map +1 -1
  164. package/dist/entities/media.entity.d.ts.map +1 -1
  165. package/dist/entities/media.entity.js +3 -3
  166. package/dist/entities/media.entity.js.map +1 -1
  167. package/dist/entities/menu-item-metadata.entity.js +4 -4
  168. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  169. package/dist/entities/model-metadata.entity.d.ts +2 -0
  170. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  171. package/dist/entities/model-metadata.entity.js +11 -3
  172. package/dist/entities/model-metadata.entity.js.map +1 -1
  173. package/dist/entities/model-sequence.entity.d.ts +15 -0
  174. package/dist/entities/model-sequence.entity.d.ts.map +1 -0
  175. package/dist/entities/model-sequence.entity.js +67 -0
  176. package/dist/entities/model-sequence.entity.js.map +1 -0
  177. package/dist/entities/mq-message-queue.entity.js +1 -1
  178. package/dist/entities/mq-message-queue.entity.js.map +1 -1
  179. package/dist/entities/mq-message.entity.d.ts +3 -3
  180. package/dist/entities/mq-message.entity.d.ts.map +1 -1
  181. package/dist/entities/mq-message.entity.js +10 -10
  182. package/dist/entities/mq-message.entity.js.map +1 -1
  183. package/dist/entities/saved-filters.entity.js +4 -4
  184. package/dist/entities/saved-filters.entity.js.map +1 -1
  185. package/dist/entities/scheduled-job.entity.js +4 -4
  186. package/dist/entities/scheduled-job.entity.js.map +1 -1
  187. package/dist/entities/security-rule.entity.js +2 -2
  188. package/dist/entities/security-rule.entity.js.map +1 -1
  189. package/dist/entities/setting.entity.js +2 -2
  190. package/dist/entities/setting.entity.js.map +1 -1
  191. package/dist/entities/sms-template.entity.js +2 -2
  192. package/dist/entities/sms-template.entity.js.map +1 -1
  193. package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
  194. package/dist/entities/user-activity-history.entity.js +1 -1
  195. package/dist/entities/user-activity-history.entity.js.map +1 -1
  196. package/dist/entities/user-view-metadata.entity.js +2 -2
  197. package/dist/entities/user-view-metadata.entity.js.map +1 -1
  198. package/dist/entities/user.entity.js +13 -15
  199. package/dist/entities/user.entity.js.map +1 -1
  200. package/dist/entities/view-metadata.entity.js +3 -3
  201. package/dist/entities/view-metadata.entity.js.map +1 -1
  202. package/dist/helpers/date.helper.d.ts +1 -1
  203. package/dist/helpers/date.helper.d.ts.map +1 -1
  204. package/dist/helpers/date.helper.js +24 -2
  205. package/dist/helpers/date.helper.js.map +1 -1
  206. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.d.ts.map +1 -1
  207. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js +13 -2
  208. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
  209. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +0 -1
  210. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  211. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +4 -9
  212. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  213. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts +0 -1
  214. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
  215. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +7 -8
  216. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
  217. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +0 -1
  218. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  219. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +4 -9
  220. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  221. package/dist/helpers/model-metadata-helper.service.d.ts +4 -1
  222. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  223. package/dist/helpers/model-metadata-helper.service.js +52 -30
  224. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  225. package/dist/helpers/module-metadata-helper.service.d.ts +1 -0
  226. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  227. package/dist/helpers/module-metadata-helper.service.js +9 -0
  228. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  229. package/dist/helpers/module.helper.d.ts +1 -0
  230. package/dist/helpers/module.helper.d.ts.map +1 -1
  231. package/dist/helpers/module.helper.js +26 -2
  232. package/dist/helpers/module.helper.js.map +1 -1
  233. package/dist/helpers/schematic.service.d.ts +9 -3
  234. package/dist/helpers/schematic.service.d.ts.map +1 -1
  235. package/dist/helpers/schematic.service.js +49 -32
  236. package/dist/helpers/schematic.service.js.map +1 -1
  237. package/dist/helpers/solid-registry.d.ts +14 -2
  238. package/dist/helpers/solid-registry.d.ts.map +1 -1
  239. package/dist/helpers/solid-registry.js +10 -0
  240. package/dist/helpers/solid-registry.js.map +1 -1
  241. package/dist/helpers/typeorm-db-helper.d.ts +3 -0
  242. package/dist/helpers/typeorm-db-helper.d.ts.map +1 -0
  243. package/dist/helpers/typeorm-db-helper.js +24 -0
  244. package/dist/helpers/typeorm-db-helper.js.map +1 -0
  245. package/dist/index.d.ts +7 -2
  246. package/dist/index.d.ts.map +1 -1
  247. package/dist/index.js +8 -3
  248. package/dist/index.js.map +1 -1
  249. package/dist/interfaces.d.ts +3 -0
  250. package/dist/interfaces.d.ts.map +1 -1
  251. package/dist/interfaces.js.map +1 -1
  252. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts +1 -0
  253. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts.map +1 -1
  254. package/dist/jobs/computed-field-evaluation-subscriber.service.js +16 -4
  255. package/dist/jobs/computed-field-evaluation-subscriber.service.js.map +1 -1
  256. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  257. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +6 -1
  258. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  259. package/dist/repository/media.repository.d.ts.map +1 -1
  260. package/dist/repository/media.repository.js +4 -0
  261. package/dist/repository/media.repository.js.map +1 -1
  262. package/dist/repository/model-sequence.repository.d.ts +14 -0
  263. package/dist/repository/model-sequence.repository.d.ts.map +1 -0
  264. package/dist/repository/model-sequence.repository.js +103 -0
  265. package/dist/repository/model-sequence.repository.js.map +1 -0
  266. package/dist/seeders/module-metadata-seeder.service.d.ts +8 -13
  267. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  268. package/dist/seeders/module-metadata-seeder.service.js +103 -43
  269. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  270. package/dist/seeders/seed-data/solid-core-metadata.json +553 -652
  271. package/dist/seeders/system-fields-seeder.service.d.ts +1 -0
  272. package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
  273. package/dist/seeders/system-fields-seeder.service.js +12 -3
  274. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  275. package/dist/services/action-metadata.service.d.ts.map +1 -1
  276. package/dist/services/action-metadata.service.js +1 -0
  277. package/dist/services/action-metadata.service.js.map +1 -1
  278. package/dist/services/ai-interaction.service.d.ts.map +1 -1
  279. package/dist/services/ai-interaction.service.js +2 -1
  280. package/dist/services/ai-interaction.service.js.map +1 -1
  281. package/dist/services/authentication.service.d.ts.map +1 -1
  282. package/dist/services/authentication.service.js +22 -14
  283. package/dist/services/authentication.service.js.map +1 -1
  284. package/dist/services/chatter-message-details.service.d.ts.map +1 -1
  285. package/dist/services/chatter-message-details.service.js +1 -0
  286. package/dist/services/chatter-message-details.service.js.map +1 -1
  287. package/dist/services/chatter-message.service.d.ts.map +1 -1
  288. package/dist/services/chatter-message.service.js +7 -3
  289. package/dist/services/chatter-message.service.js.map +1 -1
  290. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
  291. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +10 -6
  292. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
  293. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +15 -0
  294. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -0
  295. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +72 -0
  296. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -0
  297. package/dist/services/crud-helper.service.d.ts +31 -6
  298. package/dist/services/crud-helper.service.d.ts.map +1 -1
  299. package/dist/services/crud-helper.service.js +285 -50
  300. package/dist/services/crud-helper.service.js.map +1 -1
  301. package/dist/services/crud.service.d.ts +7 -2
  302. package/dist/services/crud.service.d.ts.map +1 -1
  303. package/dist/services/crud.service.js +135 -26
  304. package/dist/services/crud.service.js.map +1 -1
  305. package/dist/services/database/database-bootstrap.service.d.ts +12 -0
  306. package/dist/services/database/database-bootstrap.service.d.ts.map +1 -0
  307. package/dist/services/database/database-bootstrap.service.js +115 -0
  308. package/dist/services/database/database-bootstrap.service.js.map +1 -0
  309. package/dist/services/email-template.service.d.ts +7 -7
  310. package/dist/services/email-template.service.d.ts.map +1 -1
  311. package/dist/services/email-template.service.js +8 -7
  312. package/dist/services/email-template.service.js.map +1 -1
  313. package/dist/services/excel.service.d.ts +10 -0
  314. package/dist/services/excel.service.d.ts.map +1 -1
  315. package/dist/services/excel.service.js +100 -0
  316. package/dist/services/excel.service.js.map +1 -1
  317. package/dist/services/field-metadata.service.d.ts +146 -6
  318. package/dist/services/field-metadata.service.d.ts.map +1 -1
  319. package/dist/services/field-metadata.service.js +218 -58
  320. package/dist/services/field-metadata.service.js.map +1 -1
  321. package/dist/services/file.service.d.ts +1 -0
  322. package/dist/services/file.service.d.ts.map +1 -1
  323. package/dist/services/file.service.js +9 -0
  324. package/dist/services/file.service.js.map +1 -1
  325. package/dist/services/fixtures.service.d.ts +13 -0
  326. package/dist/services/fixtures.service.d.ts.map +1 -0
  327. package/dist/services/fixtures.service.js +95 -0
  328. package/dist/services/fixtures.service.js.map +1 -0
  329. package/dist/services/genai/ingest-metadata.service.d.ts.map +1 -1
  330. package/dist/services/genai/ingest-metadata.service.js +1 -1
  331. package/dist/services/genai/ingest-metadata.service.js.map +1 -1
  332. package/dist/services/import-transaction-error-log.service.d.ts.map +1 -1
  333. package/dist/services/import-transaction-error-log.service.js +1 -0
  334. package/dist/services/import-transaction-error-log.service.js.map +1 -1
  335. package/dist/services/import-transaction.service.d.ts.map +1 -1
  336. package/dist/services/import-transaction.service.js +7 -1
  337. package/dist/services/import-transaction.service.js.map +1 -1
  338. package/dist/services/list-of-values.service.d.ts +2 -2
  339. package/dist/services/list-of-values.service.d.ts.map +1 -1
  340. package/dist/services/list-of-values.service.js +2 -1
  341. package/dist/services/list-of-values.service.js.map +1 -1
  342. package/dist/services/locale.service.d.ts.map +1 -1
  343. package/dist/services/locale.service.js +1 -0
  344. package/dist/services/locale.service.js.map +1 -1
  345. package/dist/services/mail/smtp-email.service.js +0 -1
  346. package/dist/services/mail/smtp-email.service.js.map +1 -1
  347. package/dist/services/media.service.d.ts +3 -3
  348. package/dist/services/media.service.d.ts.map +1 -1
  349. package/dist/services/media.service.js +6 -4
  350. package/dist/services/media.service.js.map +1 -1
  351. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  352. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +17 -6
  353. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  354. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  355. package/dist/services/mediaStorageProviders/file-storage-provider.js +0 -13
  356. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  357. package/dist/services/menu-item-metadata.service.d.ts +3 -1
  358. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  359. package/dist/services/menu-item-metadata.service.js +35 -11
  360. package/dist/services/menu-item-metadata.service.js.map +1 -1
  361. package/dist/services/model-metadata.service.d.ts.map +1 -1
  362. package/dist/services/model-metadata.service.js +16 -45
  363. package/dist/services/model-metadata.service.js.map +1 -1
  364. package/dist/services/model-sequence.service.d.ts +23 -0
  365. package/dist/services/model-sequence.service.d.ts.map +1 -0
  366. package/dist/services/model-sequence.service.js +55 -0
  367. package/dist/services/model-sequence.service.js.map +1 -0
  368. package/dist/services/module-metadata.service.d.ts +1 -0
  369. package/dist/services/module-metadata.service.d.ts.map +1 -1
  370. package/dist/services/module-metadata.service.js +35 -1
  371. package/dist/services/module-metadata.service.js.map +1 -1
  372. package/dist/services/mq-message.service.d.ts.map +1 -1
  373. package/dist/services/mq-message.service.js +3 -4
  374. package/dist/services/mq-message.service.js.map +1 -1
  375. package/dist/services/permission-metadata.service.d.ts +5 -5
  376. package/dist/services/permission-metadata.service.d.ts.map +1 -1
  377. package/dist/services/permission-metadata.service.js +6 -5
  378. package/dist/services/permission-metadata.service.js.map +1 -1
  379. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  380. package/dist/services/queues/database-subscriber.service.js +2 -1
  381. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  382. package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
  383. package/dist/services/queues/publisher-factory.service.js +4 -0
  384. package/dist/services/queues/publisher-factory.service.js.map +1 -1
  385. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  386. package/dist/services/queues/rabbitmq-subscriber.service.js +2 -2
  387. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  388. package/dist/services/role-metadata.service.d.ts.map +1 -1
  389. package/dist/services/role-metadata.service.js +1 -0
  390. package/dist/services/role-metadata.service.js.map +1 -1
  391. package/dist/services/scheduled-job.service.d.ts +6 -6
  392. package/dist/services/scheduled-job.service.d.ts.map +1 -1
  393. package/dist/services/scheduled-job.service.js +8 -8
  394. package/dist/services/scheduled-job.service.js.map +1 -1
  395. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  396. package/dist/services/scheduled-jobs/scheduler.service.js +4 -0
  397. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  398. package/dist/services/security-rule.service.d.ts.map +1 -1
  399. package/dist/services/security-rule.service.js +1 -0
  400. package/dist/services/security-rule.service.js.map +1 -1
  401. package/dist/services/selection-providers/list-of-models-selection-provider.service.d.ts.map +1 -1
  402. package/dist/services/selection-providers/list-of-models-selection-provider.service.js +4 -0
  403. package/dist/services/selection-providers/list-of-models-selection-provider.service.js.map +1 -1
  404. package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.d.ts +2 -2
  405. package/dist/services/selection-providers/list-of-values-selection-providers.service.d.ts.map +1 -0
  406. package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.js +3 -3
  407. package/dist/services/selection-providers/list-of-values-selection-providers.service.js.map +1 -0
  408. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts +20 -0
  409. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts.map +1 -0
  410. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js +87 -0
  411. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js.map +1 -0
  412. package/dist/services/setting.service.d.ts +7 -5
  413. package/dist/services/setting.service.d.ts.map +1 -1
  414. package/dist/services/setting.service.js +28 -5
  415. package/dist/services/setting.service.js.map +1 -1
  416. package/dist/services/sms-template.service.d.ts +7 -7
  417. package/dist/services/sms-template.service.d.ts.map +1 -1
  418. package/dist/services/sms-template.service.js +8 -7
  419. package/dist/services/sms-template.service.js.map +1 -1
  420. package/dist/services/solid-introspect.service.d.ts +10 -3
  421. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  422. package/dist/services/solid-introspect.service.js +66 -12
  423. package/dist/services/solid-introspect.service.js.map +1 -1
  424. package/dist/services/solid-ts-morph.service.js +2 -2
  425. package/dist/services/solid-ts-morph.service.js.map +1 -1
  426. package/dist/services/user-activity-history.service.d.ts.map +1 -1
  427. package/dist/services/user-activity-history.service.js +1 -0
  428. package/dist/services/user-activity-history.service.js.map +1 -1
  429. package/dist/services/user-view-metadata.service.d.ts.map +1 -1
  430. package/dist/services/user-view-metadata.service.js +3 -2
  431. package/dist/services/user-view-metadata.service.js.map +1 -1
  432. package/dist/services/user.service.d.ts.map +1 -1
  433. package/dist/services/user.service.js +1 -0
  434. package/dist/services/user.service.js.map +1 -1
  435. package/dist/services/view-metadata.service.d.ts +3 -1
  436. package/dist/services/view-metadata.service.d.ts.map +1 -1
  437. package/dist/services/view-metadata.service.js +33 -5
  438. package/dist/services/view-metadata.service.js.map +1 -1
  439. package/dist/solid-core-cli-db.module.d.ts.map +1 -1
  440. package/dist/solid-core-cli-db.module.js +5 -2
  441. package/dist/solid-core-cli-db.module.js.map +1 -1
  442. package/dist/solid-core.module.d.ts.map +1 -1
  443. package/dist/solid-core.module.js +23 -1
  444. package/dist/solid-core.module.js.map +1 -1
  445. package/dist/subscribers/audit.subscriber.d.ts +3 -2
  446. package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
  447. package/dist/subscribers/audit.subscriber.js +8 -10
  448. package/dist/subscribers/audit.subscriber.js.map +1 -1
  449. package/dist/subscribers/computed-entity-field.subscriber.d.ts +7 -4
  450. package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
  451. package/dist/subscribers/computed-entity-field.subscriber.js +60 -21
  452. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  453. package/dist/subscribers/created-by-updated-by.subscriber.d.ts +4 -2
  454. package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
  455. package/dist/subscribers/created-by-updated-by.subscriber.js +10 -8
  456. package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
  457. package/dist/subscribers/field-metadata.subscriber.d.ts.map +1 -1
  458. package/dist/subscribers/field-metadata.subscriber.js +0 -1
  459. package/dist/subscribers/field-metadata.subscriber.js.map +1 -1
  460. package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
  461. package/dist/subscribers/model-metadata.subscriber.js +3 -2
  462. package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
  463. package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts +3 -2
  464. package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts.map +1 -1
  465. package/dist/subscribers/soft-delete-aware-event.subscriber.js +6 -11
  466. package/dist/subscribers/soft-delete-aware-event.subscriber.js.map +1 -1
  467. package/dist/transformers/typeorm/local-date-time-transformer.d.ts +5 -0
  468. package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -0
  469. package/dist/transformers/typeorm/local-date-time-transformer.js +26 -0
  470. package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -0
  471. package/dist/tsconfig.tsbuildinfo +1 -1
  472. package/docs/grouping-enhancements.md +89 -0
  473. package/package.json +1 -1
  474. package/sql/default/mssql/proc_CleanupModelMetadata.sql +175 -0
  475. package/sql/default/mssql/proc_CleanupModuleMetadata.sql +78 -0
  476. package/sql/default/mssql/scratchpad.sql.txt +10 -0
  477. package/sql/default/postgres/proc_CleanupModelMetadata.sql +148 -0
  478. package/sql/default/postgres/proc_CleanupModuleMetadata.sql +50 -0
  479. package/sql/default/postgres/scratchpad.sql.txt +12 -0
  480. package/sql-server-changes.txt +88 -0
  481. package/src/commands/fixtures/fixtures-setup.command.ts +44 -0
  482. package/src/commands/fixtures/fixtures-tear-down.command.ts +45 -0
  483. package/src/commands/mcp.command.ts +215 -0
  484. package/src/commands/refresh-model.command.ts +39 -5
  485. package/src/commands/remove-fields.command.ts +1 -1
  486. package/src/commands/seed.command.ts +34 -15
  487. package/src/constants/error-messages.ts +7 -1
  488. package/src/controllers/authentication.controller.ts +1 -1
  489. package/src/controllers/email-template.controller.ts +1 -1
  490. package/src/controllers/field-metadata.controller.ts +7 -1
  491. package/src/controllers/media-storage-provider-metadata.controller.ts +1 -1
  492. package/src/controllers/model-metadata.controller.ts +1 -1
  493. package/src/controllers/model-sequence.controller.ts +93 -0
  494. package/src/controllers/module-metadata.controller.ts +1 -1
  495. package/src/controllers/otp-authentication.controller.ts +1 -1
  496. package/src/controllers/service.controller.ts +1 -1
  497. package/src/controllers/setting.controller.ts +33 -21
  498. package/src/controllers/sms-template.controller.ts +1 -1
  499. package/src/controllers/test-queue.controller.ts +1 -1
  500. package/src/controllers/test.controller.ts +1 -1
  501. package/src/dtos/basic-filters.dto.ts +6 -1
  502. package/src/dtos/basic-group-filters.dto.ts +23 -0
  503. package/src/dtos/create-ai-interaction.dto.ts +16 -9
  504. package/src/dtos/create-field-metadata.dto.ts +43 -13
  505. package/src/dtos/create-import-transaction.dto.ts +0 -4
  506. package/src/dtos/create-model-metadata.dto.ts +10 -0
  507. package/src/dtos/create-model-sequence.dto.ts +51 -0
  508. package/src/dtos/create-role-metadata.dto.ts +23 -4
  509. package/src/dtos/get-mcp-url.dto.ts +13 -0
  510. package/src/dtos/resolve-s3-url.dto.ts +31 -0
  511. package/src/dtos/update-ai-interaction.dto.ts +16 -9
  512. package/src/dtos/update-field-metadata.dto.ts +1 -2
  513. package/src/dtos/update-import-transaction.dto.ts +0 -4
  514. package/src/dtos/update-model-sequence.dto.ts +53 -0
  515. package/src/entities/action-metadata.entity.ts +4 -4
  516. package/src/entities/ai-interaction.entity.ts +16 -12
  517. package/src/entities/chatter-message-details.entity.ts +18 -18
  518. package/src/entities/chatter-message.entity.ts +2 -2
  519. package/src/entities/common.entity.ts +20 -11
  520. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +2 -2
  521. package/src/entities/dashboard-question.entity.ts +3 -3
  522. package/src/entities/dashboard-variable.entity.ts +3 -3
  523. package/src/entities/dashboard.entity.ts +1 -1
  524. package/src/entities/email-template.entity.ts +4 -3
  525. package/src/entities/export-template.entity.ts +2 -2
  526. package/src/entities/export-transaction.entity.ts +2 -2
  527. package/src/entities/field-metadata.entity.ts +6 -3
  528. package/src/entities/import-transaction-error-log.entity.ts +2 -2
  529. package/src/entities/import-transaction.entity.ts +2 -5
  530. package/src/entities/legacy-common-with-id.entity.ts +11 -0
  531. package/src/entities/legacy-common.entity.ts +58 -0
  532. package/src/entities/list-of-values.entity.ts +2 -2
  533. package/src/entities/locale.entity.ts +1 -1
  534. package/src/entities/media.entity.ts +25 -25
  535. package/src/entities/menu-item-metadata.entity.ts +4 -4
  536. package/src/entities/model-metadata.entity.ts +9 -2
  537. package/src/entities/model-sequence.entity.ts +32 -0
  538. package/src/entities/mq-message-queue.entity.ts +1 -1
  539. package/src/entities/mq-message.entity.ts +34 -34
  540. package/src/entities/saved-filters.entity.ts +5 -5
  541. package/src/entities/scheduled-job.entity.ts +4 -4
  542. package/src/entities/security-rule.entity.ts +2 -2
  543. package/src/entities/setting.entity.ts +2 -2
  544. package/src/entities/sms-template.entity.ts +2 -2
  545. package/src/entities/user-activity-history.entity.ts +14 -14
  546. package/src/entities/user-view-metadata.entity.ts +2 -2
  547. package/src/entities/user.entity.ts +15 -15
  548. package/src/entities/view-metadata.entity.ts +3 -3
  549. package/src/helpers/date.helper.ts +31 -10
  550. package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +18 -5
  551. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +9 -9
  552. package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +16 -8
  553. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +9 -9
  554. package/src/helpers/model-metadata-helper.service.ts +67 -34
  555. package/src/helpers/module-metadata-helper.service.ts +18 -1
  556. package/src/helpers/module.helper.ts +37 -1
  557. package/src/helpers/schematic.service.ts +72 -46
  558. package/src/helpers/solid-registry.ts +28 -2
  559. package/src/helpers/typeorm-db-helper.ts +26 -0
  560. package/src/index.ts +7 -2
  561. package/src/interfaces.ts +3 -0
  562. package/src/jobs/computed-field-evaluation-subscriber.service.ts +15 -4
  563. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +17 -21
  564. package/src/repository/media.repository.ts +3 -2
  565. package/src/repository/model-sequence.repository.ts +97 -0
  566. package/src/seeders/module-metadata-seeder.service.ts +176 -58
  567. package/src/seeders/seed-data/solid-core-metadata.json +555 -654
  568. package/src/seeders/system-fields-seeder.service.ts +39 -36
  569. package/src/services/action-metadata.service.ts +3 -2
  570. package/src/services/ai-interaction.service.ts +3 -2
  571. package/src/services/authentication.service.ts +46 -14
  572. package/src/services/chatter-message-details.service.ts +2 -1
  573. package/src/services/chatter-message.service.ts +10 -4
  574. package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +17 -12
  575. package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +86 -0
  576. package/src/services/crud-helper.service.ts +319 -53
  577. package/src/services/crud.service.ts +233 -34
  578. package/src/services/database/database-bootstrap.service.ts +91 -0
  579. package/src/services/email-template.service.ts +11 -13
  580. package/src/services/excel.service.ts +146 -3
  581. package/src/services/field-metadata.service.ts +322 -70
  582. package/src/services/file.service.ts +9 -0
  583. package/src/services/fixtures.service.ts +108 -0
  584. package/src/services/genai/ingest-metadata.service.ts +4 -3
  585. package/src/services/import-transaction-error-log.service.ts +2 -1
  586. package/src/services/import-transaction.service.ts +8 -4
  587. package/src/services/list-of-values.service.ts +4 -4
  588. package/src/services/locale.service.ts +2 -1
  589. package/src/services/mail/smtp-email.service.ts +1 -1
  590. package/src/services/media.service.ts +10 -11
  591. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +22 -7
  592. package/src/services/mediaStorageProviders/file-storage-provider.ts +18 -13
  593. package/src/services/menu-item-metadata.service.ts +87 -52
  594. package/src/services/model-metadata.service.ts +68 -47
  595. package/src/services/model-sequence.service.ts +33 -0
  596. package/src/services/module-metadata.service.ts +49 -2
  597. package/src/services/mq-message.service.ts +16 -15
  598. package/src/services/permission-metadata.service.ts +8 -9
  599. package/src/services/queues/database-subscriber.service.ts +3 -1
  600. package/src/services/queues/publisher-factory.service.ts +2 -1
  601. package/src/services/queues/rabbitmq-subscriber.service.ts +4 -2
  602. package/src/services/role-metadata.service.ts +1 -0
  603. package/src/services/scheduled-job.service.ts +9 -9
  604. package/src/services/scheduled-jobs/scheduler.service.ts +5 -0
  605. package/src/services/security-rule.service.ts +1 -0
  606. package/src/services/selection-providers/list-of-models-selection-provider.service.ts +5 -2
  607. package/src/{providers → services/selection-providers}/list-of-values-selection-providers.service.ts +2 -2
  608. package/src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts +94 -0
  609. package/src/services/setting.service.ts +46 -16
  610. package/src/services/sms-template.service.ts +11 -13
  611. package/src/services/solid-introspect.service.ts +97 -10
  612. package/src/services/solid-ts-morph.service.ts +2 -2
  613. package/src/services/user-activity-history.service.ts +3 -2
  614. package/src/services/user-view-metadata.service.ts +4 -3
  615. package/src/services/user.service.ts +2 -1
  616. package/src/services/view-metadata.service.ts +52 -21
  617. package/src/solid-core-cli-db.module.ts +5 -4
  618. package/src/solid-core.module.ts +23 -1
  619. package/src/subscribers/audit.subscriber.ts +14 -9
  620. package/src/subscribers/computed-entity-field.subscriber.ts +71 -22
  621. package/src/subscribers/created-by-updated-by.subscriber.ts +14 -8
  622. package/src/subscribers/field-metadata.subscriber.ts +1 -1
  623. package/src/subscribers/model-metadata.subscriber.ts +4 -2
  624. package/src/subscribers/soft-delete-aware-event.subscriber.ts +12 -6
  625. package/src/transformers/typeorm/local-date-time-transformer.ts +30 -0
  626. package/dist/providers/list-of-values-selection-providers.service.d.ts.map +0 -1
  627. package/dist/providers/list-of-values-selection-providers.service.js.map +0 -1
  628. package/src/commands/ingest-rag-chunking-strategy-for.md +0 -224
  629. package/src/entities/user.entity.ts.bkp +0 -144
  630. package/src/services/docker exec -it mssql //" +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-subscriber.service.js","sourceRoot":"","sources":["../../../src/services/queues/rabbitmq-subscriber.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger, OnModuleInit } from '@nestjs/common';\nimport * as amqp from 'amqplib';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { QueueMessage, QueueSubscriber } from '../../interfaces/mq';\nimport { MqMessageQueueService } from '../mq-message-queue.service';\nimport { MqMessageService } from '../mq-message.service';\n\n\nexport abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscriber<T> { // TODO This can be made a generic type for better type visibility\n private readonly logger = new Logger(RabbitMqSubscriber.name);\n private readonly url: string;\n private readonly serviceRole: string;\n\n constructor(\n protected readonly mqMessageService: MqMessageService,\n protected readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n this.url = process.env.QUEUES_RABBIT_MQ_URL;\n this.serviceRole = process.env.QUEUES_SERVICE_ROLE;\n if (!this.url) {\n this.logger.debug('RabbitMqPublisher url is not defined in the environment variables');\n }\n if (!this.serviceRole) {\n this.logger.debug('Queue service Role is not defined in the environment variables');\n }\n // this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);\n }\n\n abstract subscribe(message: QueueMessage<T>);\n\n abstract options(): QueuesModuleOptions;\n\n async establishConnection(): Promise<amqp.Connection> {\n\n const url = new URL(this.url);\n\n // this.logger.debug(`user: ${url.username}`);\n // // just for local debug, don’t log in prod\n // this.logger.debug(`pass: ${url.password}`);\n // this.logger.debug(`path (vhost): ${url.pathname}`);\n\n const connection = await amqp.connect({\n protocol: url.protocol.replace(':', ''),\n hostname: url.hostname,\n port: parseInt(url.port),\n username: url.username,\n password: decodeURIComponent(url.password),\n frameMax: 131072,\n });\n\n return connection\n }\n\n async onModuleInit(): Promise<void> {\n // we will start subscriber only if the current service role is subscriber. \n if (this.url && ['both', 'subscriber'].includes(this.serviceRole)) {\n\n // this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);\n // const connection = await amqp.connect(this.url);\n\n let connection;\n try {\n connection = await this.establishConnection();\n // this.logger.debug(`RabbitMqSubscriber connection established: ${JSON.stringify(this.options())} and url: ${this.url}`);\n }\n catch (err) {\n this.logger.error(`Failed to connect to RabbitMQ: ${(err as Error).message}`, (err as Error).stack);\n throw err;\n }\n\n const channel = await connection.createChannel();\n // this.logger.debug(`RabbitMqSubscriber channel created: ${JSON.stringify(this.options())} and url: ${url}`);\n\n const options = this.options();\n\n const queueName = options.queueName;\n const exchangeName = `${queueName}.exchange`;\n const routingKey = `${queueName}.routing-key`;\n\n await channel.assertExchange(exchangeName, 'direct', {});\n // this.logger.debug(`RabbitMqSubscriber channel asserted: ${JSON.stringify(this.options())} and url: ${url}`);\n\n const queue = await channel.assertQueue(queueName, {});\n // this.logger.debug(`RabbitMqSubscriber queue asserted: ${JSON.stringify(this.options())} and url: ${url}`);\n\n await channel.bindQueue(queue.queue, exchangeName, routingKey);\n // this.logger.debug(`RabbitMqSubscriber queue bound: ${JSON.stringify(this.options())} and url: ${url}`);\n\n // Consume messages from the queue\n channel.consume(\n queue.queue,\n async (rawMessage) => {\n if (rawMessage) {\n const messageContentString = rawMessage.content.toString();\n this.logger.debug(`RabbitMqSubscriber Received raw message: ${messageContentString}`);\n\n let message: QueueMessage<T> = null;\n\n try {\n message = JSON.parse(messageContentString) as QueueMessage<T>;\n\n // this is the first time we are receiving the message so we set the currentRetry to 0\n if (!message.retryCount) message.retryCount = 0;\n if (!message.retryInterval) message.retryInterval = 1000;\n if (!message.currentRetry) message.currentRetry = 0;\n\n await this.processMessage(message, rawMessage, channel);\n }\n catch (error) {\n this.logger.error(`Error processing message: ${error.message}`);\n\n // if an error occurs then if retryCount is set we start retrying. \n if (message) {\n if (message.currentRetry < message.retryCount) {\n await this.updateStatusInDatabase('retrying', message);\n\n message.currentRetry++;\n this.logger.warn(`Retrying message (${message.currentRetry}/${message.retryCount}) after ${message.retryInterval}ms`);\n setTimeout(() => {\n this.retryMessage(message, rawMessage, channel);\n }, message.retryInterval);\n } else {\n await this.updateStatusInDatabase('failed', message, error.message, '');\n\n this.logger.error(`Message failed after ${message.retryCount} attempts: ${error.message}`);\n channel.ack(rawMessage); // Discard the message after max retries\n }\n }\n\n }\n }\n },\n // { noAck: true },\n {},\n );\n\n this.logger.log(`RabbitMqSubscriber ready to consume messages: ${JSON.stringify(this.options())} and url: ${this.url}`);\n }\n }\n\n /**\n * Abstract method for message processing logic.\n */\n protected async processMessage(message: QueueMessage<T>, rawMessage, channel): Promise<void> {\n await this.updateStatusInDatabase('started', message);\n\n // Capture the results of handling the task.\n const result = await this.subscribe(message);\n\n // Ack the message. \n channel.ack(rawMessage);\n\n // TODO: Update the database to indicate that the task is finished.\n await this.updateStatusInDatabase('succeeded', message, '', result ? JSON.stringify(result, null, 2) : '');\n\n }\n\n /**\n * Retry the message by invoking the processing logic again.\n */\n private async retryMessage(message: QueueMessage<T>, rawMessage, channel) {\n try {\n await this.processMessage(message, rawMessage, channel);\n } catch (error) {\n if (message.currentRetry < message.retryCount) {\n await this.updateStatusInDatabase('retrying', message);\n\n message.currentRetry++;\n this.logger.warn(`Retrying message (${message.currentRetry}/${message.retryCount}) after ${message.retryInterval}ms: ${error.message}`);\n setTimeout(() => {\n this.retryMessage(message, rawMessage, channel);\n }, message.retryInterval);\n } else {\n\n this.logger.error(`Message failed after ${message.retryCount} attempts: ${error.message}`);\n\n // Discard the message after max retries\n channel.ack(rawMessage);\n\n // TODO: Store the error in the database and update the status accordingly.\n await this.updateStatusInDatabase('failed', message, error.message, '');\n\n }\n }\n }\n\n private async updateStatusInDatabase(stage: string, message: QueueMessage<T>, error: string = '', result: string = '') {\n\n // TODO: make an entry in the relevant database table, generate a unique id earlier.\n try {\n // 1. resolve the queue first\n const mqMessage = await this.mqMessageService.repo.findOne({\n where: {\n messageId: message.messageId,\n }\n });\n\n if (mqMessage) {\n const updatedFields = {\n stage: stage\n };\n if (stage === 'failed' || stage === 'succeeded') {\n updatedFields['finishedAt'] = new Date();\n updatedFields['elapsedMillis'] = updatedFields['finishedAt'].getTime() - mqMessage.startedAt.getTime();\n }\n if (stage === 'succeeded') {\n updatedFields['output'] = result;\n }\n if (stage === 'failed') {\n updatedFields['error'] = error;\n }\n await this.mqMessageService.repo.update(mqMessage.id, updatedFields);\n }\n }\n catch (error) {\n this.logger.error(error.message, error.stack);\n }\n\n }\n\n}"]}
1
+ {"version":3,"file":"rabbitmq-subscriber.service.js","sourceRoot":"","sources":["../../../src/services/queues/rabbitmq-subscriber.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger, OnModuleInit } from '@nestjs/common';\nimport * as amqp from 'amqplib';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { QueueMessage, QueueSubscriber } from '../../interfaces/mq';\nimport { MqMessageQueueService } from '../mq-message-queue.service';\nimport { MqMessageService } from '../mq-message.service';\n\n\nexport abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscriber<T> { // TODO This can be made a generic type for better type visibility\n private readonly logger = new Logger(RabbitMqSubscriber.name);\n private readonly url: string;\n private readonly serviceRole: string;\n\n constructor(\n protected readonly mqMessageService: MqMessageService,\n protected readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n this.url = process.env.QUEUES_RABBIT_MQ_URL;\n this.serviceRole = process.env.QUEUES_SERVICE_ROLE;\n if (!this.url) {\n this.logger.debug('RabbitMqPublisher url is not defined in the environment variables');\n }\n if (!this.serviceRole) {\n this.logger.debug('Queue service Role is not defined in the environment variables');\n }\n // this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);\n }\n\n abstract subscribe(message: QueueMessage<T>);\n\n abstract options(): QueuesModuleOptions;\n\n async establishConnection(): Promise<amqp.Connection> {\n\n const url = new URL(this.url);\n\n // this.logger.debug(`user: ${url.username}`);\n // // just for local debug, don’t log in prod\n // this.logger.debug(`pass: ${url.password}`);\n // this.logger.debug(`path (vhost): ${url.pathname}`);\n\n const connection = await amqp.connect({\n protocol: url.protocol.replace(':', ''),\n hostname: url.hostname,\n port: parseInt(url.port),\n username: url.username,\n password: decodeURIComponent(url.password),\n frameMax: 131072,\n });\n\n return connection\n }\n\n async onModuleInit(): Promise<void> {\n const solidCliRunning = process.env.SOLID_CLI_RUNNING || \"false\";\n\n // we will start subscriber only if the current service role is subscriber. \n if (this.url && ['both', 'subscriber'].includes(this.serviceRole) && solidCliRunning === \"false\") {\n\n // this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);\n // const connection = await amqp.connect(this.url);\n\n let connection;\n try {\n connection = await this.establishConnection();\n // this.logger.debug(`RabbitMqSubscriber connection established: ${JSON.stringify(this.options())} and url: ${this.url}`);\n }\n catch (err) {\n this.logger.error(`Failed to connect to RabbitMQ: ${(err as Error).message}`, (err as Error).stack);\n throw err;\n }\n\n const channel = await connection.createChannel();\n // this.logger.debug(`RabbitMqSubscriber channel created: ${JSON.stringify(this.options())} and url: ${url}`);\n\n const options = this.options();\n\n const queueName = options.queueName;\n const exchangeName = `${queueName}.exchange`;\n const routingKey = `${queueName}.routing-key`;\n\n await channel.assertExchange(exchangeName, 'direct', {});\n // this.logger.debug(`RabbitMqSubscriber channel asserted: ${JSON.stringify(this.options())} and url: ${url}`);\n\n const queue = await channel.assertQueue(queueName, {});\n // this.logger.debug(`RabbitMqSubscriber queue asserted: ${JSON.stringify(this.options())} and url: ${url}`);\n\n await channel.bindQueue(queue.queue, exchangeName, routingKey);\n // this.logger.debug(`RabbitMqSubscriber queue bound: ${JSON.stringify(this.options())} and url: ${url}`);\n\n // Consume messages from the queue\n channel.consume(\n queue.queue,\n async (rawMessage) => {\n if (rawMessage) {\n const messageContentString = rawMessage.content.toString();\n // this.logger.debug(`RabbitMqSubscriber Received raw message: ${messageContentString}`);\n\n let message: QueueMessage<T> = null;\n\n try {\n message = JSON.parse(messageContentString) as QueueMessage<T>;\n\n // this is the first time we are receiving the message so we set the currentRetry to 0\n if (!message.retryCount) message.retryCount = 0;\n if (!message.retryInterval) message.retryInterval = 1000;\n if (!message.currentRetry) message.currentRetry = 0;\n\n await this.processMessage(message, rawMessage, channel);\n }\n catch (error) {\n this.logger.error(`Error processing message: ${error.message}`);\n\n // if an error occurs then if retryCount is set we start retrying. \n if (message) {\n if (message.currentRetry < message.retryCount) {\n await this.updateStatusInDatabase('retrying', message);\n\n message.currentRetry++;\n this.logger.warn(`Retrying message (${message.currentRetry}/${message.retryCount}) after ${message.retryInterval}ms`);\n setTimeout(() => {\n this.retryMessage(message, rawMessage, channel);\n }, message.retryInterval);\n } else {\n await this.updateStatusInDatabase('failed', message, error.message, '');\n\n this.logger.error(`Message failed after ${message.retryCount} attempts: ${error.message}`);\n channel.ack(rawMessage); // Discard the message after max retries\n }\n }\n\n }\n }\n },\n // { noAck: true },\n {},\n );\n\n this.logger.log(`RabbitMqSubscriber ready to consume messages: ${JSON.stringify(this.options())} and url: ${this.url}`);\n }\n }\n\n /**\n * Abstract method for message processing logic.\n */\n protected async processMessage(message: QueueMessage<T>, rawMessage, channel): Promise<void> {\n await this.updateStatusInDatabase('started', message);\n\n // Capture the results of handling the task.\n const result = await this.subscribe(message);\n\n // Ack the message. \n channel.ack(rawMessage);\n\n // TODO: Update the database to indicate that the task is finished.\n await this.updateStatusInDatabase('succeeded', message, '', result ? JSON.stringify(result, null, 2) : '');\n\n }\n\n /**\n * Retry the message by invoking the processing logic again.\n */\n private async retryMessage(message: QueueMessage<T>, rawMessage, channel) {\n try {\n await this.processMessage(message, rawMessage, channel);\n } catch (error) {\n if (message.currentRetry < message.retryCount) {\n await this.updateStatusInDatabase('retrying', message);\n\n message.currentRetry++;\n this.logger.warn(`Retrying message (${message.currentRetry}/${message.retryCount}) after ${message.retryInterval}ms: ${error.message}`);\n setTimeout(() => {\n this.retryMessage(message, rawMessage, channel);\n }, message.retryInterval);\n } else {\n\n this.logger.error(`Message failed after ${message.retryCount} attempts: ${error.message}`);\n\n // Discard the message after max retries\n channel.ack(rawMessage);\n\n // TODO: Store the error in the database and update the status accordingly.\n await this.updateStatusInDatabase('failed', message, error.message, '');\n\n }\n }\n }\n\n private async updateStatusInDatabase(stage: string, message: QueueMessage<T>, error: string = '', result: string = '') {\n\n // TODO: make an entry in the relevant database table, generate a unique id earlier.\n try {\n // 1. resolve the queue first\n const mqMessage = await this.mqMessageService.repo.findOne({\n where: {\n messageId: message.messageId,\n }\n });\n\n if (mqMessage) {\n const updatedFields = {\n stage: stage\n };\n if (stage === 'failed' || stage === 'succeeded') {\n updatedFields['finishedAt'] = new Date();\n updatedFields['elapsedMillis'] = updatedFields['finishedAt'].getTime() - mqMessage.startedAt.getTime();\n }\n if (stage === 'succeeded') {\n updatedFields['output'] = result;\n }\n if (stage === 'failed') {\n updatedFields['error'] = error;\n }\n await this.mqMessageService.repo.update(mqMessage.id, updatedFields);\n }\n }\n catch (error) {\n this.logger.error(error.message, error.stack);\n }\n\n }\n\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"role-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/role-metadata.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,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,EAAE,aAAa,EAAM,MAAM,SAAS,CAAC;AAG5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,qBACa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAK9D,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;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;IAGrC,QAAQ,CAAC,oBAAoB,EAAE,4BAA4B;IAC3D,QAAQ,CAAC,SAAS,EAAE,SAAS;IAlB/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;gBAIpD,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,sBAAsB,EAG5B,oBAAoB,EAAE,4BAA4B,EAClD,SAAS,EAAE,SAAS;IAMzB,cAAc,CAAC,QAAQ,EAAE,MAAM;IAgB/B,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,EAAE;IAmDrD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAIxF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE;YAItD,qBAAqB;IAiE7B,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;YAsBrF,uBAAuB;CAWtC"}
1
+ {"version":3,"file":"role-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/role-metadata.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,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,EAAE,aAAa,EAAM,MAAM,SAAS,CAAC;AAG5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,qBACa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAK9D,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IAEnD,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;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;IAGrC,QAAQ,CAAC,oBAAoB,EAAE,4BAA4B;IAC3D,QAAQ,CAAC,SAAS,EAAE,SAAS;IAnB/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;gBAIpD,oBAAoB,EAAE,oBAAoB,EAE1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,sBAAsB,EAG5B,oBAAoB,EAAE,4BAA4B,EAClD,SAAS,EAAE,SAAS;IAMzB,cAAc,CAAC,QAAQ,EAAE,MAAM;IAgB/B,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,EAAE;IAmDrD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAIxF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE;YAItD,qBAAqB;IAiE7B,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;YAsBrF,uBAAuB;CAWtC"}
@@ -165,6 +165,7 @@ exports.RoleMetadataService = RoleMetadataService;
165
165
  exports.RoleMetadataService = RoleMetadataService = RoleMetadataService_1 = __decorate([
166
166
  (0, common_1.Injectable)(),
167
167
  __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
168
+ __param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => module_metadata_service_1.ModuleMetadataService))),
168
169
  __param(6, (0, typeorm_1.InjectEntityManager)()),
169
170
  __metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
170
171
  module_metadata_service_1.ModuleMetadataService,
@@ -1 +1 @@
1
- {"version":3,"file":"role-metadata.service.js","sourceRoot":"","sources":["../../src/services/role-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\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 { EntityManager, In } from 'typeorm';\n\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';\nimport { RoleMetadataRepository } from 'src/repository/role-metadata.repository';\nimport { CreateRoleMetadataDto } from '../dtos/create-role-metadata.dto';\nimport { PermissionMetadata } from '../entities/permission-metadata.entity';\nimport { RoleMetadata } from '../entities/role-metadata.entity';\n\n@Injectable()\nexport class RoleMetadataService extends CRUDService<RoleMetadata> {\n private readonly logger = new Logger(RoleMetadataService.name);\n\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\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 @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(RoleMetadata, 'default')\n // readonly repo: Repository<RoleMetadata>,\n readonly repo: RoleMetadataRepository,\n // @InjectRepository(PermissionMetadata)\n // private readonly permissionRepository: Repository<PermissionMetadata>,\n readonly permissionRepository: PermissionMetadataRepository,\n readonly moduleRef: ModuleRef\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'roleMetadata', 'solid-core', moduleRef);\n }\n\n async findRoleByName(roleName: string) {\n const entity = await this.repo.findOne({\n where: {\n name: roleName\n },\n relations: {\n permissions: true\n }\n });\n if (!entity) {\n throw new NotFoundException(`Entity #${roleName} not found`);\n }\n return entity;\n }\n\n // OK\n async createRolesIfNotExists(roles: CreateRoleMetadataDto[]) {\n for (let id = 0; id < roles.length; id++) {\n try {\n const roleObj = roles[id];\n // this.logger.log(`Resolving role: ${JSON.stringify(roleObj)}`);\n\n const existingRole = await this.repo.findOne({\n where: {\n name: roleObj.name,\n },\n relations: {},\n });\n\n // Create only if not existing already.\n if (!existingRole) {\n this.logger.debug(`Role ${roleObj.name} does not exist, hence creating`);\n\n let permissions = [];\n\n if (roleObj.permissions && roleObj.permissions.length > 0) {\n await Promise.all(\n roleObj.permissions.map(permission => this.preloadPermissionByName(permission.name)),\n );\n }\n\n // const role = this.repo.create({ ...roleObj, permissions });\n const role = this.repo.create({ ...roleObj });\n await this.repo.save(role);\n } else {\n /*\n this.logger.debug(`Role ${roleObj.name} already exists`);\n const existingPermissions = existingRole.permissions.map(permission => permission.name);\n const newPermissions = roleObj.permissions.map(permission => permission.name);\n const permissionsToAdd = newPermissions.filter(permission => !existingPermissions.includes(permission));\n const permissionsToRemove = existingPermissions.filter(permission => !newPermissions.includes(permission));\n this.logger.debug(`Permissions to add: ${JSON.stringify(permissionsToAdd)}`);\n if (permissionsToAdd.length > 0) {\n await this.addPermissionsToRole(roleObj.name, permissionsToAdd);\n }\n this.logger.debug(`Permissions to remove: ${JSON.stringify(permissionsToRemove)}`);\n if (permissionsToRemove.length > 0) {\n await this.removePermissionsFromRole(roleObj.name, permissionsToRemove);\n }\n */\n }\n } catch (error) {\n this.logger.error(error);\n }\n }\n }\n\n async addAllPermissionsToRole(roleName: string): Promise<RoleMetadata> {\n return await this._addPermissionsToRole(roleName, null);\n }\n\n async addPermissionsToRole(roleName: string, permissionNames: string[]): Promise<RoleMetadata> {\n return await this._addPermissionsToRole(roleName, permissionNames);\n }\n\n async addPermissionToRole(roleName: string, permissionName: string[]) {\n return await this._addPermissionsToRole(roleName, permissionName);\n }\n\n private async _addPermissionsToRole(roleName: string, permissionNames: string[]): Promise<RoleMetadata> {\n const role = await this.repo.findOne({\n where: { name: roleName },\n relations: {\n permissions: true\n }\n });\n if (!role) {\n throw new Error(`Role '${roleName}' not found.`);\n }\n\n // this.logger.log(`Found role ${roleName}`);\n\n // The new set of permissions which are to be added to this role.\n let newPermissions: PermissionMetadata[];\n\n // Load all the specified permissions in the system. \n if (permissionNames && permissionNames.length != 0) {\n // this.logger.log(`Loading specified permissions.`);\n\n newPermissions = await this.permissionRepository.find({ where: { name: In(permissionNames) } });\n if (newPermissions.length !== permissionNames.length) {\n throw new Error(`One or more permissions not found.`);\n }\n }\n else {\n // this.logger.log(`Loading all permissions in system.`);\n\n // Load all permissions in the system. \n // TODO: Do we want to convert this to a paginated query to avoid having to load a very large permissions table into memory?\n newPermissions = await this.permissionRepository.find();\n if (newPermissions.length == 0) {\n throw new Error(`No permissions configured in the system. Did you forget to run the PermissionSeederService?`);\n }\n }\n\n // this.logger.log(`Adding ${newPermissions.length} permissions to role ${roleName}.`);\n\n // if there are already permissions assigned. \n if (role.permissions && role.permissions.length > 0) {\n for (let i = 0; i < newPermissions.length; i++) {\n const newPermission = newPermissions[i];\n let newPermissionFound = true;\n for (let j = 0; j < role.permissions.length; j++) {\n const existingPermission = role.permissions[j];\n if (existingPermission.name === newPermission.name) {\n newPermissionFound = false;\n break;\n }\n }\n\n if (newPermissionFound) {\n role.permissions.push(newPermission);\n }\n }\n\n }\n // else we create a new permissions set. \n else {\n role.permissions = newPermissions;\n }\n\n return await this.repo.save(role);\n }\n\n async removePermissionsFromRole(roleName: string, permissionNames: string[]): Promise<RoleMetadata> {\n\n // load the role with the respective permissions.\n const role = await this.repo.findOne({\n where: {\n name: roleName\n },\n relations: {\n permissions: true\n }\n });\n\n if (!role) {\n throw new Error(ERROR_MESSAGES.ROLE_NOT_FOUND(roleName));\n }\n\n // modify the permissions array.\n role.permissions = role.permissions.filter(permission => !permissionNames.includes(permission.name));\n\n return await this.repo.save(role);\n }\n\n private async preloadPermissionByName(name: string): Promise<PermissionMetadata> {\n const existingPermission = await this.permissionRepository.findOne({\n where: { name },\n });\n if (!existingPermission) {\n throw new NotFoundException(ERROR_MESSAGES.PERMISSION_NOT_EXIST(name));\n }\n return existingPermission;\n }\n\n\n}\n"]}
1
+ {"version":3,"file":"role-metadata.service.js","sourceRoot":"","sources":["../../src/services/role-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\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 { EntityManager, In } from 'typeorm';\n\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';\nimport { RoleMetadataRepository } from 'src/repository/role-metadata.repository';\nimport { CreateRoleMetadataDto } from '../dtos/create-role-metadata.dto';\nimport { PermissionMetadata } from '../entities/permission-metadata.entity';\nimport { RoleMetadata } from '../entities/role-metadata.entity';\n\n@Injectable()\nexport class RoleMetadataService extends CRUDService<RoleMetadata> {\n private readonly logger = new Logger(RoleMetadataService.name);\n\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\n readonly modelMetadataService: ModelMetadataService,\n @Inject(forwardRef(() => ModuleMetadataService))\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(RoleMetadata, 'default')\n // readonly repo: Repository<RoleMetadata>,\n readonly repo: RoleMetadataRepository,\n // @InjectRepository(PermissionMetadata)\n // private readonly permissionRepository: Repository<PermissionMetadata>,\n readonly permissionRepository: PermissionMetadataRepository,\n readonly moduleRef: ModuleRef\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'roleMetadata', 'solid-core', moduleRef);\n }\n\n async findRoleByName(roleName: string) {\n const entity = await this.repo.findOne({\n where: {\n name: roleName\n },\n relations: {\n permissions: true\n }\n });\n if (!entity) {\n throw new NotFoundException(`Entity #${roleName} not found`);\n }\n return entity;\n }\n\n // OK\n async createRolesIfNotExists(roles: CreateRoleMetadataDto[]) {\n for (let id = 0; id < roles.length; id++) {\n try {\n const roleObj = roles[id];\n // this.logger.log(`Resolving role: ${JSON.stringify(roleObj)}`);\n\n const existingRole = await this.repo.findOne({\n where: {\n name: roleObj.name,\n },\n relations: {},\n });\n\n // Create only if not existing already.\n if (!existingRole) {\n this.logger.debug(`Role ${roleObj.name} does not exist, hence creating`);\n\n let permissions = [];\n\n if (roleObj.permissions && roleObj.permissions.length > 0) {\n await Promise.all(\n roleObj.permissions.map(permission => this.preloadPermissionByName(permission.name)),\n );\n }\n\n // const role = this.repo.create({ ...roleObj, permissions });\n const role = this.repo.create({ ...roleObj });\n await this.repo.save(role);\n } else {\n /*\n this.logger.debug(`Role ${roleObj.name} already exists`);\n const existingPermissions = existingRole.permissions.map(permission => permission.name);\n const newPermissions = roleObj.permissions.map(permission => permission.name);\n const permissionsToAdd = newPermissions.filter(permission => !existingPermissions.includes(permission));\n const permissionsToRemove = existingPermissions.filter(permission => !newPermissions.includes(permission));\n this.logger.debug(`Permissions to add: ${JSON.stringify(permissionsToAdd)}`);\n if (permissionsToAdd.length > 0) {\n await this.addPermissionsToRole(roleObj.name, permissionsToAdd);\n }\n this.logger.debug(`Permissions to remove: ${JSON.stringify(permissionsToRemove)}`);\n if (permissionsToRemove.length > 0) {\n await this.removePermissionsFromRole(roleObj.name, permissionsToRemove);\n }\n */\n }\n } catch (error) {\n this.logger.error(error);\n }\n }\n }\n\n async addAllPermissionsToRole(roleName: string): Promise<RoleMetadata> {\n return await this._addPermissionsToRole(roleName, null);\n }\n\n async addPermissionsToRole(roleName: string, permissionNames: string[]): Promise<RoleMetadata> {\n return await this._addPermissionsToRole(roleName, permissionNames);\n }\n\n async addPermissionToRole(roleName: string, permissionName: string[]) {\n return await this._addPermissionsToRole(roleName, permissionName);\n }\n\n private async _addPermissionsToRole(roleName: string, permissionNames: string[]): Promise<RoleMetadata> {\n const role = await this.repo.findOne({\n where: { name: roleName },\n relations: {\n permissions: true\n }\n });\n if (!role) {\n throw new Error(`Role '${roleName}' not found.`);\n }\n\n // this.logger.log(`Found role ${roleName}`);\n\n // The new set of permissions which are to be added to this role.\n let newPermissions: PermissionMetadata[];\n\n // Load all the specified permissions in the system. \n if (permissionNames && permissionNames.length != 0) {\n // this.logger.log(`Loading specified permissions.`);\n\n newPermissions = await this.permissionRepository.find({ where: { name: In(permissionNames) } });\n if (newPermissions.length !== permissionNames.length) {\n throw new Error(`One or more permissions not found.`);\n }\n }\n else {\n // this.logger.log(`Loading all permissions in system.`);\n\n // Load all permissions in the system. \n // TODO: Do we want to convert this to a paginated query to avoid having to load a very large permissions table into memory?\n newPermissions = await this.permissionRepository.find();\n if (newPermissions.length == 0) {\n throw new Error(`No permissions configured in the system. Did you forget to run the PermissionSeederService?`);\n }\n }\n\n // this.logger.log(`Adding ${newPermissions.length} permissions to role ${roleName}.`);\n\n // if there are already permissions assigned. \n if (role.permissions && role.permissions.length > 0) {\n for (let i = 0; i < newPermissions.length; i++) {\n const newPermission = newPermissions[i];\n let newPermissionFound = true;\n for (let j = 0; j < role.permissions.length; j++) {\n const existingPermission = role.permissions[j];\n if (existingPermission.name === newPermission.name) {\n newPermissionFound = false;\n break;\n }\n }\n\n if (newPermissionFound) {\n role.permissions.push(newPermission);\n }\n }\n\n }\n // else we create a new permissions set. \n else {\n role.permissions = newPermissions;\n }\n\n return await this.repo.save(role);\n }\n\n async removePermissionsFromRole(roleName: string, permissionNames: string[]): Promise<RoleMetadata> {\n\n // load the role with the respective permissions.\n const role = await this.repo.findOne({\n where: {\n name: roleName\n },\n relations: {\n permissions: true\n }\n });\n\n if (!role) {\n throw new Error(ERROR_MESSAGES.ROLE_NOT_FOUND(roleName));\n }\n\n // modify the permissions array.\n role.permissions = role.permissions.filter(permission => !permissionNames.includes(permission.name));\n\n return await this.repo.save(role);\n }\n\n private async preloadPermissionByName(name: string): Promise<PermissionMetadata> {\n const existingPermission = await this.permissionRepository.findOne({\n where: { name },\n });\n if (!existingPermission) {\n throw new NotFoundException(ERROR_MESSAGES.PERMISSION_NOT_EXIST(name));\n }\n return existingPermission;\n }\n\n\n}\n"]}
@@ -1,13 +1,13 @@
1
+ import { ConfigService } from '@nestjs/config';
1
2
  import { DiscoveryService, ModuleRef } from "@nestjs/core";
2
- import { EntityManager } from 'typeorm';
3
3
  import { ScheduledJob } from 'src/entities/scheduled-job.entity';
4
- import { ModelMetadataService } from './model-metadata.service';
5
- import { ModuleMetadataService } from './module-metadata.service';
6
- import { ConfigService } from '@nestjs/config';
7
- import { FileService } from './file.service';
4
+ import { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';
5
+ import { EntityManager } from 'typeorm';
8
6
  import { CrudHelperService } from './crud-helper.service';
9
7
  import { CRUDService } from './crud.service';
10
- import { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';
8
+ import { FileService } from './file.service';
9
+ import { ModelMetadataService } from './model-metadata.service';
10
+ import { ModuleMetadataService } from './module-metadata.service';
11
11
  export declare class ScheduledJobService extends CRUDService<ScheduledJob> {
12
12
  readonly modelMetadataService: ModelMetadataService;
13
13
  readonly moduleMetadataService: ModuleMetadataService;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-job.service.d.ts","sourceRoot":"","sources":["../../src/services/scheduled-job.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAc,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,qBACa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAI9D,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;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAd/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;gBAGpD,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,sBAAsB,EAC5B,SAAS,EAAE,SAAS;CAKhC"}
1
+ {"version":3,"file":"scheduled-job.service.d.ts","sourceRoot":"","sources":["../../src/services/scheduled-job.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,qBACa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAK9D,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;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAf/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;gBAIpD,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,sBAAsB,EAC5B,SAAS,EAAE,SAAS;CAKhC"}
@@ -15,17 +15,16 @@ var ScheduledJobService_1;
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.ScheduledJobService = void 0;
17
17
  const common_1 = require("@nestjs/common");
18
- const typeorm_1 = require("@nestjs/typeorm");
18
+ const config_1 = require("@nestjs/config");
19
19
  const core_1 = require("@nestjs/core");
20
+ const typeorm_1 = require("@nestjs/typeorm");
21
+ const scheduled_job_repository_1 = require("../repository/scheduled-job.repository");
20
22
  const typeorm_2 = require("typeorm");
21
- const model_metadata_service_1 = require("./model-metadata.service");
22
- const module_metadata_service_1 = require("./module-metadata.service");
23
- const config_1 = require("@nestjs/config");
24
- const file_service_1 = require("./file.service");
25
23
  const crud_helper_service_1 = require("./crud-helper.service");
26
24
  const crud_service_1 = require("./crud.service");
27
- const common_2 = require("@nestjs/common");
28
- const scheduled_job_repository_1 = require("../repository/scheduled-job.repository");
25
+ const file_service_1 = require("./file.service");
26
+ const model_metadata_service_1 = require("./model-metadata.service");
27
+ const module_metadata_service_1 = require("./module-metadata.service");
29
28
  let ScheduledJobService = ScheduledJobService_1 = class ScheduledJobService extends crud_service_1.CRUDService {
30
29
  constructor(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, moduleRef) {
31
30
  super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'scheduledJob', 'solid-core', moduleRef);
@@ -38,12 +37,13 @@ let ScheduledJobService = ScheduledJobService_1 = class ScheduledJobService exte
38
37
  this.entityManager = entityManager;
39
38
  this.repo = repo;
40
39
  this.moduleRef = moduleRef;
41
- this.logger = new common_2.Logger(ScheduledJobService_1.name);
40
+ this.logger = new common_1.Logger(ScheduledJobService_1.name);
42
41
  }
43
42
  };
44
43
  exports.ScheduledJobService = ScheduledJobService;
45
44
  exports.ScheduledJobService = ScheduledJobService = ScheduledJobService_1 = __decorate([
46
45
  (0, common_1.Injectable)(),
46
+ __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
47
47
  __param(6, (0, typeorm_1.InjectEntityManager)()),
48
48
  __metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
49
49
  module_metadata_service_1.ModuleMetadataService,
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-job.service.js","sourceRoot":"","sources":["../../src/services/scheduled-job.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAwE;AACxE,uCAA2D;AAC3D,qCAAoD;AAEpD,qEAAgE;AAChE,uEAAkE;AAClE,2CAA+C;AAC/C,iDAA6C;AAC7C,+DAA0D;AAC1D,iDAA6C;AAC7C,2CAAwC;AACxC,qFAAiF;AAG1E,IAAM,mBAAmB,2BAAzB,MAAM,mBAAoB,SAAQ,0BAAyB;IAGhE,YACW,oBAA0C,EAC1C,qBAA4C,EAC5C,aAA4B,EAC5B,WAAwB,EACxB,gBAAkC,EAClC,iBAAoC,EAE7C,aAAqC,EAG5B,IAA4B,EAC5B,SAAoB;QAG7B,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAdzK,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAAwB;QAC5B,cAAS,GAAT,SAAS,CAAW;QAdd,WAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IAkB/D,CAAC;CACF,CAAA;AApBY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;IAWR,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCANS,6CAAoB;QACnB,+CAAqB;QAC7B,sBAAa;QACf,0BAAW;QACN,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAGtB,iDAAsB;QACjB,gBAAS;GAfpB,mBAAmB,CAoB/B","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { EntityManager, Repository } from 'typeorm';\nimport { ScheduledJob } from 'src/entities/scheduled-job.entity';\nimport { ModelMetadataService } from './model-metadata.service';\nimport { ModuleMetadataService } from './module-metadata.service';\nimport { ConfigService } from '@nestjs/config';\nimport { FileService } from './file.service';\nimport { CrudHelperService } from './crud-helper.service';\nimport { CRUDService } from './crud.service';\nimport { Logger } from '@nestjs/common';\nimport { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';\n\n@Injectable()\nexport class ScheduledJobService extends CRUDService<ScheduledJob> {\n private readonly logger = new Logger(ScheduledJobService.name);\n\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 @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ScheduledJob)\n // readonly repo: Repository<ScheduledJob>,\n readonly repo: ScheduledJobRepository,\n readonly moduleRef: ModuleRef\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'scheduledJob', 'solid-core', moduleRef);\n }\n}\n"]}
1
+ {"version":3,"file":"scheduled-job.service.js","sourceRoot":"","sources":["../../src/services/scheduled-job.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwE;AACxE,2CAA+C;AAC/C,uCAA2D;AAC3D,6CAAsD;AAEtD,qFAAiF;AACjF,qCAAwC;AACxC,+DAA0D;AAC1D,iDAA6C;AAC7C,iDAA6C;AAC7C,qEAAgE;AAChE,uEAAkE;AAG3D,IAAM,mBAAmB,2BAAzB,MAAM,mBAAoB,SAAQ,0BAAyB;IAGhE,YAEE,oBAAmD,EAC1C,qBAA4C,EAC5C,aAA4B,EAC5B,WAAwB,EACxB,gBAAkC,EAClC,iBAAoC,EAE7C,aAAqC,EAG5B,IAA4B,EAC5B,SAAoB;QAG7B,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAdzK,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAAwB;QAC5B,cAAS,GAAT,SAAS,CAAW;QAfd,WAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IAmB/D,CAAC;CACF,CAAA;AArBY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6CAAoB,CAAC,CAAC,CAAA;IAO9C,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCANS,6CAAoB;QACnB,+CAAqB;QAC7B,sBAAa;QACf,0BAAW;QACN,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAGtB,iDAAsB;QACjB,gBAAS;GAhBpB,mBAAmB,CAqB/B","sourcesContent":["import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { ScheduledJob } from 'src/entities/scheduled-job.entity';\nimport { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';\nimport { EntityManager } from 'typeorm';\nimport { CrudHelperService } from './crud-helper.service';\nimport { CRUDService } from './crud.service';\nimport { FileService } from './file.service';\nimport { ModelMetadataService } from './model-metadata.service';\nimport { ModuleMetadataService } from './module-metadata.service';\n\n@Injectable()\nexport class ScheduledJobService extends CRUDService<ScheduledJob> {\n private readonly logger = new Logger(ScheduledJobService.name);\n\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\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 @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ScheduledJob)\n // readonly repo: Repository<ScheduledJob>,\n readonly repo: ScheduledJobRepository,\n readonly moduleRef: ModuleRef\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'scheduledJob', 'solid-core', moduleRef);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.service.d.ts","sourceRoot":"","sources":["../../../src/services/scheduled-jobs/scheduler.service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBACa,oBAAqB,YAAW,iBAAiB;IAMtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IANlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;gBAK3C,gBAAgB,EAAE,sBAAsB,EACxC,aAAa,EAAE,aAAa;IAI3C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmDvC,OAAO,CAAC,YAAY;IAmCpB,OAAO,CAAC,gBAAgB;CAyB3B"}
1
+ {"version":3,"file":"scheduler.service.d.ts","sourceRoot":"","sources":["../../../src/services/scheduled-jobs/scheduler.service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBACa,oBAAqB,YAAW,iBAAiB;IAMtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IANlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;gBAK3C,gBAAgB,EAAE,sBAAsB,EACxC,aAAa,EAAE,aAAa;IAI3C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwDvC,OAAO,CAAC,YAAY;IAmCpB,OAAO,CAAC,gBAAgB;CAyB3B"}
@@ -23,6 +23,10 @@ let SchedulerServiceImpl = SchedulerServiceImpl_1 = class SchedulerServiceImpl {
23
23
  this.logger = new common_1.Logger(SchedulerServiceImpl_1.name);
24
24
  }
25
25
  async runScheduledJobs() {
26
+ const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
27
+ if (solidCliRunning === "true") {
28
+ return;
29
+ }
26
30
  const now = new Date();
27
31
  const dueJobs = await this.scheduledJobRepo.find({
28
32
  where: [
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.service.js","sourceRoot":"","sources":["../../../src/services/scheduled-jobs/scheduler.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { IsNull, LessThanOrEqual } from 'typeorm';\n\nimport { Cron, CronExpression } from '@nestjs/schedule';\nimport { ScheduledJob } from 'src/entities/scheduled-job.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';\nimport { ISchedulerService } from './scheduler.interface';\n\n@Injectable()\nexport class SchedulerServiceImpl implements ISchedulerService {\n private readonly logger = new Logger(SchedulerServiceImpl.name);\n\n constructor(\n // @InjectRepository(ScheduledJob)\n // private readonly scheduledJobRepo: Repository<ScheduledJob>,\n private readonly scheduledJobRepo: ScheduledJobRepository,\n private readonly solidRegistry: SolidRegistry,\n ) { }\n\n @Cron(CronExpression.EVERY_MINUTE)\n async runScheduledJobs(): Promise<void> {\n const now = new Date();\n\n // this.logger.log(`[${now.getTime()}]: scheduler service started run...`);\n const dueJobs = await this.scheduledJobRepo.find({\n where: [\n {\n isActive: true,\n nextRunAt: LessThanOrEqual(now),\n },\n // Newly created jobs are also picked for examination \n {\n isActive: true,\n nextRunAt: IsNull(),\n },\n ],\n });\n\n // this.logger.log(`[${now.getTime()}]: scheduler service identified ${dueJobs.length} jobs to run...`);\n\n for (const job of dueJobs) {\n this.logger.log(`[${now.getTime()}]: scheduler service attempting to run job ${job.job}`);\n try {\n if (!this.shouldRunNow(job, now)) {\n this.logger.log(`[${now.getTime()}]: scheduler service skipping job ${job.job}`);\n continue;\n }\n\n const handler = this.solidRegistry.getScheduledJobProviderInstance(job.job);\n if (!handler) {\n // this.logger.warn(`[${now.getTime()}]: scheduler service skipping because job handler not found: ${job.job}`);\n continue;\n }\n\n // this.logger.log(`[${now.getTime()}]: scheduler service about to run job ${job.job}`);\n await handler.execute(job);\n // this.logger.log(`[${now.getTime()}]: scheduler service finished running job ${job.job}`);\n\n job.isActive = true;\n job.lastRunAt = now;\n job.nextRunAt = this.computeNextRunAt(job, now);\n this.logger.log(`[${now.getTime()}]: scheduler service coomputed next run for ${job.job} as ${job.nextRunAt}`);\n\n await this.scheduledJobRepo.save(job);\n this.logger.log(`[${now.getTime()}]: scheduler service finished running job: ${job.job}`);\n } catch (err) {\n this.logger.error(`[${now.getTime()}]: scheduler service failed to run job ${job.job}`, err.stack);\n }\n }\n }\n\n private shouldRunNow(job: ScheduledJob, now: Date): boolean {\n const today = now.toISOString().split('T')[0]; // yyyy-mm-dd\n const timeNow = now.toTimeString().slice(0, 5); // hh:mm\n\n // 1. Check startDate / endDate\n if (job.startDate && new Date(today) < new Date(job.startDate)) return false;\n if (job.endDate && new Date(today) > new Date(job.endDate)) return false;\n\n // 2. Check startTime / endTime\n if (job.startTime) {\n const jobStart = job.startTime.toTimeString().slice(0, 5);\n if (timeNow < jobStart) return false;\n }\n if (job.endTime) {\n const jobEnd = job.endTime.toTimeString().slice(0, 5);\n if (timeNow > jobEnd) return false;\n }\n\n // 3. Check dayOfWeek (for weekly)\n if (job.frequency.toLowerCase() === 'weekly' && job.dayOfWeek) {\n const todayName = now.toLocaleString('en-US', { weekday: 'long' }); // e.g., \"Monday\"\n // const days = job.dayOfWeek.split(',').map(d => d.trim());\n const days = JSON.parse(job.dayOfWeek) as string[];\n if (!days.includes(todayName)) return false;\n }\n\n // 4. Check dayOfMonth (for monthly)\n if (job.frequency.toLowerCase() === 'monthly' && job.dayOfMonth) {\n const dom = now.getDate();\n if (dom !== job.dayOfMonth) return false;\n }\n\n return true;\n }\n\n private computeNextRunAt(job: ScheduledJob, from: Date): Date {\n const base = new Date(from);\n\n switch (job.frequency.toLowerCase()) {\n // case 'once':\n // return null; // don't reschedule\n case 'every minute':\n return new Date(base.getTime() + 1 * 60 * 1000);\n case 'hourly':\n return new Date(base.getTime() + 60 * 60 * 1000);\n case 'daily':\n return new Date(base.getTime() + 24 * 60 * 60 * 1000);\n case 'weekly':\n return new Date(base.getTime() + 7 * 24 * 60 * 60 * 1000);\n case 'monthly':\n const next = new Date(base);\n next.setMonth(base.getMonth() + 1);\n return next;\n // case 'custom':\n // // Optional: let job handler decide via metadata or registry\n // return new Date(base.getTime() + 24 * 60 * 60 * 1000);\n default:\n return new Date(base.getTime() + 24 * 60 * 60 * 1000);\n }\n }\n}"]}
1
+ {"version":3,"file":"scheduler.service.js","sourceRoot":"","sources":["../../../src/services/scheduled-jobs/scheduler.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { IsNull, LessThanOrEqual } from 'typeorm';\n\nimport { Cron, CronExpression } from '@nestjs/schedule';\nimport { ScheduledJob } from 'src/entities/scheduled-job.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';\nimport { ISchedulerService } from './scheduler.interface';\n\n@Injectable()\nexport class SchedulerServiceImpl implements ISchedulerService {\n private readonly logger = new Logger(SchedulerServiceImpl.name);\n\n constructor(\n // @InjectRepository(ScheduledJob)\n // private readonly scheduledJobRepo: Repository<ScheduledJob>,\n private readonly scheduledJobRepo: ScheduledJobRepository,\n private readonly solidRegistry: SolidRegistry,\n ) { }\n\n @Cron(CronExpression.EVERY_MINUTE)\n async runScheduledJobs(): Promise<void> {\n const solidCliRunning = process.env.SOLID_CLI_RUNNING || \"false\";\n if (solidCliRunning === \"true\") {\n return;\n }\n\n const now = new Date();\n\n // this.logger.log(`[${now.getTime()}]: scheduler service started run...`);\n const dueJobs = await this.scheduledJobRepo.find({\n where: [\n {\n isActive: true,\n nextRunAt: LessThanOrEqual(now),\n },\n // Newly created jobs are also picked for examination \n {\n isActive: true,\n nextRunAt: IsNull(),\n },\n ],\n });\n\n // this.logger.log(`[${now.getTime()}]: scheduler service identified ${dueJobs.length} jobs to run...`);\n\n for (const job of dueJobs) {\n this.logger.log(`[${now.getTime()}]: scheduler service attempting to run job ${job.job}`);\n try {\n if (!this.shouldRunNow(job, now)) {\n this.logger.log(`[${now.getTime()}]: scheduler service skipping job ${job.job}`);\n continue;\n }\n\n const handler = this.solidRegistry.getScheduledJobProviderInstance(job.job);\n if (!handler) {\n // this.logger.warn(`[${now.getTime()}]: scheduler service skipping because job handler not found: ${job.job}`);\n continue;\n }\n\n // this.logger.log(`[${now.getTime()}]: scheduler service about to run job ${job.job}`);\n await handler.execute(job);\n // this.logger.log(`[${now.getTime()}]: scheduler service finished running job ${job.job}`);\n\n job.isActive = true;\n job.lastRunAt = now;\n job.nextRunAt = this.computeNextRunAt(job, now);\n this.logger.log(`[${now.getTime()}]: scheduler service coomputed next run for ${job.job} as ${job.nextRunAt}`);\n\n await this.scheduledJobRepo.save(job);\n this.logger.log(`[${now.getTime()}]: scheduler service finished running job: ${job.job}`);\n } catch (err) {\n this.logger.error(`[${now.getTime()}]: scheduler service failed to run job ${job.job}`, err.stack);\n }\n }\n }\n\n private shouldRunNow(job: ScheduledJob, now: Date): boolean {\n const today = now.toISOString().split('T')[0]; // yyyy-mm-dd\n const timeNow = now.toTimeString().slice(0, 5); // hh:mm\n\n // 1. Check startDate / endDate\n if (job.startDate && new Date(today) < new Date(job.startDate)) return false;\n if (job.endDate && new Date(today) > new Date(job.endDate)) return false;\n\n // 2. Check startTime / endTime\n if (job.startTime) {\n const jobStart = job.startTime.toTimeString().slice(0, 5);\n if (timeNow < jobStart) return false;\n }\n if (job.endTime) {\n const jobEnd = job.endTime.toTimeString().slice(0, 5);\n if (timeNow > jobEnd) return false;\n }\n\n // 3. Check dayOfWeek (for weekly)\n if (job.frequency.toLowerCase() === 'weekly' && job.dayOfWeek) {\n const todayName = now.toLocaleString('en-US', { weekday: 'long' }); // e.g., \"Monday\"\n // const days = job.dayOfWeek.split(',').map(d => d.trim());\n const days = JSON.parse(job.dayOfWeek) as string[];\n if (!days.includes(todayName)) return false;\n }\n\n // 4. Check dayOfMonth (for monthly)\n if (job.frequency.toLowerCase() === 'monthly' && job.dayOfMonth) {\n const dom = now.getDate();\n if (dom !== job.dayOfMonth) return false;\n }\n\n return true;\n }\n\n private computeNextRunAt(job: ScheduledJob, from: Date): Date {\n const base = new Date(from);\n\n switch (job.frequency.toLowerCase()) {\n // case 'once':\n // return null; // don't reschedule\n case 'every minute':\n return new Date(base.getTime() + 1 * 60 * 1000);\n case 'hourly':\n return new Date(base.getTime() + 60 * 60 * 1000);\n case 'daily':\n return new Date(base.getTime() + 24 * 60 * 60 * 1000);\n case 'weekly':\n return new Date(base.getTime() + 7 * 24 * 60 * 60 * 1000);\n case 'monthly':\n const next = new Date(base);\n next.setMonth(base.getMonth() + 1);\n return next;\n // case 'custom':\n // // Optional: let job handler decide via metadata or registry\n // return new Date(base.getTime() + 24 * 60 * 60 * 1000);\n default:\n return new Date(base.getTime() + 24 * 60 * 60 * 1000);\n }\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"security-rule.service.d.ts","sourceRoot":"","sources":["../../src/services/security-rule.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAc,MAAM,SAAS,CAAC;AAEpD,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,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAE7C,qBACa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAE,YAAW,sBAAsB;IAEhG,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;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAIrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa;gBAb5B,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAI5B,IAAI,EAAE,sBAAsB,EAC5B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa;IAMvC,sBAAsB;IAKhB,iBAAiB;CAYxB"}
1
+ {"version":3,"file":"security-rule.service.d.ts","sourceRoot":"","sources":["../../src/services/security-rule.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAc,MAAM,SAAS,CAAC;AAEpD,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,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAE7C,qBACa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAE,YAAW,sBAAsB;IAGhG,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;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAIrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa;gBAb5B,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAI5B,IAAI,EAAE,sBAAsB,EAC5B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa;IAMvC,sBAAsB;IAKhB,iBAAiB;CAYxB"}
@@ -55,6 +55,7 @@ let SecurityRuleService = class SecurityRuleService extends crud_service_1.CRUDS
55
55
  exports.SecurityRuleService = SecurityRuleService;
56
56
  exports.SecurityRuleService = SecurityRuleService = __decorate([
57
57
  (0, common_1.Injectable)(),
58
+ __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
58
59
  __param(6, (0, typeorm_1.InjectEntityManager)()),
59
60
  __param(7, (0, common_1.Inject)((0, common_1.forwardRef)(() => src_1.SecurityRuleRepository))),
60
61
  __metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
@@ -1 +1 @@
1
- {"version":3,"file":"security-rule.service.js","sourceRoot":"","sources":["../../src/services/security-rule.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwF;AACxF,6CAAwE;AACxE,uCAA2D;AAC3D,qCAAoD;AAEpD,iDAAwD;AACxD,qEAA2E;AAC3E,uEAA6E;AAC7E,2CAA+C;AAC/C,iDAAwD;AACxD,+DAAqE;AAIrE,8DAA2D;AAC3D,4BAA6C;AAGtC,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,0BAAyB;IAChE,YACW,oBAA0C,EAC1C,qBAA4C,EAC5C,aAA4B,EAC5B,WAAwB,EACxB,gBAAkC,EAClC,iBAAoC,EAEpC,aAA4B,EAI5B,IAA4B,EAC5B,SAAoB,EACpB,aAA4B;QAGrC,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAhBzK,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAI5B,SAAI,GAAJ,IAAI,CAAwB;QAC5B,cAAS,GAAT,SAAS,CAAW;QACpB,kBAAa,GAAb,aAAa,CAAe;IAIvC,CAAC;IAED,sBAAsB;QAEpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CACxC;YACE,SAAS,EAAE;gBACT,aAAa,EAAE,IAAI;gBACnB,IAAI,EAAE,IAAI;aACX;SACF,CACF,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;CAEF,CAAA;AAtCY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;IASR,WAAA,IAAA,6BAAmB,GAAE,CAAA;IAIrB,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,4BAAsB,CAAC,CAAC,CAAA;qCAVlB,6CAAoB;QACnB,+CAAqB;QAC7B,sBAAa;QACf,0BAAW;QACN,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAItB,4BAAsB;QACjB,gBAAS;QACL,8BAAa;GAf5B,mBAAmB,CAsC/B","sourcesContent":["import { forwardRef, Inject, Injectable, OnApplicationBootstrap } from '@nestjs/common';\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport { ConfigService } from '@nestjs/config';\nimport { FileService } from 'src/services/file.service';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\n\n\nimport { SecurityRule } from '../entities/security-rule.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { SecurityRuleRepository } from 'src';\n\n@Injectable()\nexport class SecurityRuleService extends CRUDService<SecurityRule> implements OnApplicationBootstrap {\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 @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(SecurityRule, 'default')\n // readonly repo: Repository<SecurityRule>,\n @Inject(forwardRef(() => SecurityRuleRepository))\n readonly repo: SecurityRuleRepository,\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry,\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'securityRule', 'solid-core', moduleRef);\n }\n\n onApplicationBootstrap() {\n // Load the security rules from the database\n this.loadSecurityRules();\n }\n\n async loadSecurityRules() {\n const securityRules = await this.repo.find(\n {\n relations: {\n modelMetadata: true,\n role: true,\n }\n }\n );\n this.solidRegistry.registerSecurityRules(securityRules);\n }\n\n}\n"]}
1
+ {"version":3,"file":"security-rule.service.js","sourceRoot":"","sources":["../../src/services/security-rule.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwF;AACxF,6CAAwE;AACxE,uCAA2D;AAC3D,qCAAoD;AAEpD,iDAAwD;AACxD,qEAA2E;AAC3E,uEAA6E;AAC7E,2CAA+C;AAC/C,iDAAwD;AACxD,+DAAqE;AAIrE,8DAA2D;AAC3D,4BAA6C;AAGtC,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,0BAAyB;IAChE,YAEW,oBAA0C,EAC1C,qBAA4C,EAC5C,aAA4B,EAC5B,WAAwB,EACxB,gBAAkC,EAClC,iBAAoC,EAEpC,aAA4B,EAI5B,IAA4B,EAC5B,SAAoB,EACpB,aAA4B;QAGrC,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAhBzK,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAI5B,SAAI,GAAJ,IAAI,CAAwB;QAC5B,cAAS,GAAT,SAAS,CAAW;QACpB,kBAAa,GAAb,aAAa,CAAe;IAIvC,CAAC;IAED,sBAAsB;QAEpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CACxC;YACE,SAAS,EAAE;gBACT,aAAa,EAAE,IAAI;gBACnB,IAAI,EAAE,IAAI;aACX;SACF,CACF,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;CAEF,CAAA;AAvCY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6CAAoB,CAAC,CAAC,CAAA;IAO9C,WAAA,IAAA,6BAAmB,GAAE,CAAA;IAIrB,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,4BAAsB,CAAC,CAAC,CAAA;qCAVlB,6CAAoB;QACnB,+CAAqB;QAC7B,sBAAa;QACf,0BAAW;QACN,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAItB,4BAAsB;QACjB,gBAAS;QACL,8BAAa;GAhB5B,mBAAmB,CAuC/B","sourcesContent":["import { forwardRef, Inject, Injectable, OnApplicationBootstrap } from '@nestjs/common';\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport { ConfigService } from '@nestjs/config';\nimport { FileService } from 'src/services/file.service';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\n\n\nimport { SecurityRule } from '../entities/security-rule.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { SecurityRuleRepository } from 'src';\n\n@Injectable()\nexport class SecurityRuleService extends CRUDService<SecurityRule> implements OnApplicationBootstrap {\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\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 @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(SecurityRule, 'default')\n // readonly repo: Repository<SecurityRule>,\n @Inject(forwardRef(() => SecurityRuleRepository))\n readonly repo: SecurityRuleRepository,\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry,\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'securityRule', 'solid-core', moduleRef);\n }\n\n onApplicationBootstrap() {\n // Load the security rules from the database\n this.loadSecurityRules();\n }\n\n async loadSecurityRules() {\n const securityRules = await this.repo.find(\n {\n relations: {\n modelMetadata: true,\n role: true,\n }\n }\n );\n this.solidRegistry.registerSecurityRules(securityRules);\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"list-of-models-selection-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/selection-providers/list-of-models-selection-provider.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG3G,qBAEa,6BAA8B,YAAW,kBAAkB,CAAC,yBAAyB,CAAC;IAC/F,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;gBAChD,oBAAoB,EAAE,oBAAoB;IAGtD,IAAI,IAAI,MAAM;IAGd,IAAI,IAAI,MAAM;IAGR,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,GAAG,GAAG,CAAC;IAmBpG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC;CA+B7G"}
1
+ {"version":3,"file":"list-of-models-selection-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/selection-providers/list-of-models-selection-provider.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG3G,qBAEa,6BAA8B,YAAW,kBAAkB,CAAC,yBAAyB,CAAC;IAC/F,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;gBAGxD,oBAAoB,EAAE,oBAAoB;IAI9C,IAAI,IAAI,MAAM;IAGd,IAAI,IAAI,MAAM;IAGR,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,GAAG,GAAG,CAAC;IAmBpG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC;CA+B7G"}
@@ -8,6 +8,9 @@ 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
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.ListOfModelsSelectionProvider = void 0;
13
16
  const common_1 = require("@nestjs/common");
@@ -64,6 +67,7 @@ exports.ListOfModelsSelectionProvider = ListOfModelsSelectionProvider;
64
67
  exports.ListOfModelsSelectionProvider = ListOfModelsSelectionProvider = __decorate([
65
68
  (0, selection_provider_decorator_1.SelectionProvider)(),
66
69
  (0, common_1.Injectable)(),
70
+ __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
67
71
  __metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService])
68
72
  ], ListOfModelsSelectionProvider);
69
73
  //# sourceMappingURL=list-of-models-selection-provider.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-of-models-selection-provider.service.js","sourceRoot":"","sources":["../../../src/services/selection-providers/list-of-models-selection-provider.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,sEAA2E;AAC3E,gGAAgF;AAMzE,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAEtC,YAAY,oBAA0C;QAClD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACrD,CAAC;IACD,IAAI;QACA,OAAO,4DAA4D,CAAC;IACxE,CAAC;IACD,IAAI;QACA,OAAO,+BAA+B,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,IAA+B;QAG5D,MAAM,SAAS,GAAG;YACd,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,EAAE;YACjB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,CAAC;SACZ,CAAA;QACD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAE7E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAA+B;QAIvD,MAAM,SAAS,GAAG;YACd,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,EAAE;YACjB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC;SACZ,CAAA;QACD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7E,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;YACvC,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7F,CAAC,CAAA;QAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAMhE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC1B,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;IAEP,CAAC;CACJ,CAAA;AA7DY,sEAA6B;wCAA7B,6BAA6B;IAFzC,IAAA,gDAAiB,GAAE;IACnB,IAAA,mBAAU,GAAE;qCAGyB,6CAAoB;GAF7C,6BAA6B,CA6DzC","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { ModelMetadataService } from \"src/services/model-metadata.service\";\nimport { SelectionProvider } from \"src/decorators/selection-provider.decorator\";\nimport { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from \"../../interfaces\";\n\n\n@SelectionProvider()\n@Injectable()\nexport class ListOfModelsSelectionProvider implements ISelectionProvider<ISelectionProviderContext> {\n private readonly modelMetadataService: ModelMetadataService;\n constructor(modelMetadataService: ModelMetadataService) {\n this.modelMetadataService = modelMetadataService;\n }\n help(): string {\n return \"# Allows one to dynamically fetch models Across all models\";\n }\n name(): string {\n return 'ListOfModelsSelectionProvider';\n }\n async value(optionValue: string, ctxt: ISelectionProviderContext): Promise<ISelectionProviderValues | any> {\n // Create a unified array with unique languages\n\n const queryData = {\n fields: [],\n filters: [],\n sort: [],\n populate: [],\n populateMedia: [],\n groupBy: [],\n limit: 100,\n offset: 0,\n }\n const models = (await this.modelMetadataService.findMany(queryData)).records;\n\n const model = models.filter(i => i.singularName === optionValue)[0];\n return { label: model.displayName, value: model.singularName }\n }\n\n async values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {\n // Filter function \n\n // TODO: Instead of using limit 1000, we can pass filters here so that we are able to query directly.\n const queryData = {\n fields: [],\n filters: [],\n sort: [],\n populate: [],\n populateMedia: [],\n groupBy: [],\n limit: 1000,\n offset: 0,\n }\n const models = (await this.modelMetadataService.findMany(queryData)).records;\n const getModelsByQuery = (query: string) => {\n const lowerCaseQuery = query.toLowerCase();\n return models.filter(model => model.singularName.toLowerCase().includes(lowerCaseQuery));\n }\n\n const filteredModels = query ? getModelsByQuery(query) : models;\n\n // return filteredModels.map(i => {\n // return { label: i.singularName, value: String(i.id) };\n // });\n\n return filteredModels.map(i => {\n return { label: i.displayName, value: i.singularName };\n });\n\n }\n}"]}
1
+ {"version":3,"file":"list-of-models-selection-provider.service.js","sourceRoot":"","sources":["../../../src/services/selection-providers/list-of-models-selection-provider.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAgE;AAChE,sEAA2E;AAC3E,gGAAgF;AAMzE,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAEtC,YAEI,oBAA0C;QAE1C,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACrD,CAAC;IACD,IAAI;QACA,OAAO,4DAA4D,CAAC;IACxE,CAAC;IACD,IAAI;QACA,OAAO,+BAA+B,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,IAA+B;QAG5D,MAAM,SAAS,GAAG;YACd,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,EAAE;YACjB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,CAAC;SACZ,CAAA;QACD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAE7E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAA+B;QAIvD,MAAM,SAAS,GAAG;YACd,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,EAAE;YACjB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC;SACZ,CAAA;QACD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7E,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;YACvC,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7F,CAAC,CAAA;QAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAMhE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC1B,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;IAEP,CAAC;CACJ,CAAA;AAhEY,sEAA6B;wCAA7B,6BAA6B;IAFzC,IAAA,gDAAiB,GAAE;IACnB,IAAA,mBAAU,GAAE;IAIJ,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6CAAoB,CAAC,CAAC,CAAA;qCACzB,6CAAoB;GAJrC,6BAA6B,CAgEzC","sourcesContent":["import { forwardRef, Inject, Injectable } from \"@nestjs/common\";\nimport { ModelMetadataService } from \"src/services/model-metadata.service\";\nimport { SelectionProvider } from \"src/decorators/selection-provider.decorator\";\nimport { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from \"../../interfaces\";\n\n\n@SelectionProvider()\n@Injectable()\nexport class ListOfModelsSelectionProvider implements ISelectionProvider<ISelectionProviderContext> {\n private readonly modelMetadataService: ModelMetadataService;\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\n modelMetadataService: ModelMetadataService\n ) {\n this.modelMetadataService = modelMetadataService;\n }\n help(): string {\n return \"# Allows one to dynamically fetch models Across all models\";\n }\n name(): string {\n return 'ListOfModelsSelectionProvider';\n }\n async value(optionValue: string, ctxt: ISelectionProviderContext): Promise<ISelectionProviderValues | any> {\n // Create a unified array with unique languages\n\n const queryData = {\n fields: [],\n filters: [],\n sort: [],\n populate: [],\n populateMedia: [],\n groupBy: [],\n limit: 100,\n offset: 0,\n }\n const models = (await this.modelMetadataService.findMany(queryData)).records;\n\n const model = models.filter(i => i.singularName === optionValue)[0];\n return { label: model.displayName, value: model.singularName }\n }\n\n async values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {\n // Filter function \n\n // TODO: Instead of using limit 1000, we can pass filters here so that we are able to query directly.\n const queryData = {\n fields: [],\n filters: [],\n sort: [],\n populate: [],\n populateMedia: [],\n groupBy: [],\n limit: 1000,\n offset: 0,\n }\n const models = (await this.modelMetadataService.findMany(queryData)).records;\n const getModelsByQuery = (query: string) => {\n const lowerCaseQuery = query.toLowerCase();\n return models.filter(model => model.singularName.toLowerCase().includes(lowerCaseQuery));\n }\n\n const filteredModels = query ? getModelsByQuery(query) : models;\n\n // return filteredModels.map(i => {\n // return { label: i.singularName, value: String(i.id) };\n // });\n\n return filteredModels.map(i => {\n return { label: i.displayName, value: i.singularName };\n });\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