@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,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CrudHelperService = exports.FilterCombinator = void 0;
3
+ exports.CrudHelperService = exports.UserIdFields = exports.FilterCombinator = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
5
  const strings_1 = require("@angular-devkit/core/src/utils/strings");
6
6
  const solid_registry_1 = require("../helpers/solid-registry");
@@ -11,6 +11,11 @@ var FilterCombinator;
11
11
  FilterCombinator["AND"] = "$and";
12
12
  FilterCombinator["OR"] = "$or";
13
13
  })(FilterCombinator || (exports.FilterCombinator = FilterCombinator = {}));
14
+ var UserIdFields;
15
+ (function (UserIdFields) {
16
+ UserIdFields["CREATED_BY"] = "createdBy";
17
+ UserIdFields["UPDATED_BY"] = "updatedBy";
18
+ })(UserIdFields || (exports.UserIdFields = UserIdFields = {}));
14
19
  class CrudHelperService {
15
20
  constructor() {
16
21
  this.logger = new common_1.Logger(CrudHelperService.name);
@@ -29,6 +34,16 @@ class CrudHelperService {
29
34
  const matchingPermssions = activeUser.permissions.filter((p) => permissionNames.includes(p));
30
35
  return matchingPermssions.length > 0;
31
36
  };
37
+ this.hasPublishPermissionOnModel = (activeUser, modelName) => {
38
+ const permissionNames = [`${(0, strings_1.classify)(modelName)}Controller.publish`];
39
+ const matchingPermssions = activeUser.permissions.filter((p) => permissionNames.includes(p));
40
+ return matchingPermssions.length > 0;
41
+ };
42
+ this.hasUnpublishPermissionOnModel = (activeUser, modelName) => {
43
+ const permissionNames = [`${(0, strings_1.classify)(modelName)}Controller.publish`];
44
+ const matchingPermssions = activeUser.permissions.filter((p) => permissionNames.includes(p));
45
+ return matchingPermssions.length > 0;
46
+ };
32
47
  this.hasDeletePermissionOnModel = (activeUser, modelName) => {
33
48
  const permissionNames = [`${(0, strings_1.classify)(modelName)}Controller.delete`, `${(0, strings_1.classify)(modelName)}Controller.deleteMany`];
34
49
  const matchingPermssions = activeUser.permissions.filter((p) => permissionNames.includes(p));
@@ -48,11 +63,21 @@ class CrudHelperService {
48
63
  orderOptions(sort = []) {
49
64
  const orderOptions = {};
50
65
  sort.forEach((s) => {
51
- const [field, order] = s.split(':');
52
- orderOptions[field] = order?.toUpperCase() ?? 'ASC';
53
- if (!['ASC', 'DESC'].includes(orderOptions[field])) {
66
+ const parts = s.split(':');
67
+ let order;
68
+ let field;
69
+ if (parts.length > 1) {
70
+ order = parts.pop();
71
+ field = parts.join(':');
72
+ }
73
+ else {
74
+ field = parts[0];
75
+ }
76
+ const normalizedOrder = order ? order.toUpperCase() : 'ASC';
77
+ if (!['ASC', 'DESC'].includes(normalizedOrder)) {
54
78
  throw new Error(`Invalid sort order provided: ${order}`);
55
79
  }
80
+ orderOptions[field] = normalizedOrder;
56
81
  });
57
82
  return orderOptions;
58
83
  }
@@ -173,27 +198,31 @@ class CrudHelperService {
173
198
  return [];
174
199
  return Array.isArray(value) ? value : [value];
175
200
  }
201
+ normalizeAndFilterPopulateAttributes(value) {
202
+ const normalized = this.normalize(value);
203
+ return normalized.filter(item => item !== UserIdFields.CREATED_BY && item !== UserIdFields.UPDATED_BY);
204
+ }
205
+ extractUserIdFieldsFromPopulate(value) {
206
+ const normalized = this.normalize(value);
207
+ return normalized.filter(item => item === UserIdFields.CREATED_BY || item === UserIdFields.UPDATED_BY);
208
+ }
176
209
  isRelationJoined(queryBuilder, joinProperty) {
177
210
  return queryBuilder.expressionMap.joinAttributes.some(join => join.entityOrProperty === joinProperty);
178
211
  }
179
212
  hasJoins(queryBuilder) {
180
213
  return queryBuilder.expressionMap.joinAttributes.length > 0;
181
214
  }
182
- buildFilterQuery(qb, basicFilterDto, entityAlias, internationalisation, draftPublishWorkflow, moduleRef, filterCombinator = FilterCombinator.AND) {
215
+ buildFilterQuery(qb, basicFilterDto, entityAlias, internationalisation, draftPublishWorkflow, moduleRef, filterCombinator = FilterCombinator.AND, applyPagination = true, applySorting = true) {
183
216
  let { limit, offset, showSoftDeleted, filters } = basicFilterDto;
184
- const { fields, sort, groupBy, populate = [], populateMedia = [], locale, status } = basicFilterDto;
217
+ const { fields, sort, populate = [], populateMedia = [], locale, status } = basicFilterDto;
185
218
  const normalizedFields = this.normalize(fields);
186
- const normalizedPopulate = this.normalize(populate);
219
+ const normalizedAndFilteredPopulateAttributes = this.normalizeAndFilterPopulateAttributes(populate);
187
220
  const normalizedPopulateMedia = this.normalize(populateMedia);
188
221
  const additionalPopulate = this.additionalRelationsRequiredForMediaPopulation(normalizedPopulateMedia);
189
- normalizedPopulate.push(...additionalPopulate.filter((relation) => !normalizedPopulate.includes(relation)));
222
+ normalizedAndFilteredPopulateAttributes.push(...additionalPopulate.filter((relation) => !normalizedAndFilteredPopulateAttributes.includes(relation)));
190
223
  const normalizedSort = this.normalize(sort);
191
- const normalizedGroupBy = this.normalize(groupBy);
192
- if (normalizedGroupBy.length > 1) {
193
- throw new Error(error_messages_1.ERROR_MESSAGES.GROUP_BY_LIMIT);
194
- }
195
- if (normalizedPopulate && normalizedPopulate.length) {
196
- this.buildPopulateQuery(normalizedPopulate, entityAlias, qb);
224
+ if (normalizedAndFilteredPopulateAttributes && normalizedAndFilteredPopulateAttributes.length) {
225
+ this.buildPopulateQuery(normalizedAndFilteredPopulateAttributes, entityAlias, qb);
197
226
  }
198
227
  if (filters) {
199
228
  if (filterCombinator === FilterCombinator.AND) {
@@ -234,7 +263,7 @@ class CrudHelperService {
234
263
  return this.wrapFieldWithAlias(field, entityAlias);
235
264
  }));
236
265
  }
237
- if (normalizedSort && normalizedSort.length) {
266
+ if (applySorting && normalizedSort && normalizedSort.length) {
238
267
  const orderOptions = this.orderOptions(normalizedSort);
239
268
  if (orderOptions) {
240
269
  const orderOptionKeys = Object.keys(orderOptions);
@@ -251,15 +280,12 @@ class CrudHelperService {
251
280
  qb.withDeleted();
252
281
  qb.where(`${entityAlias}.deletedAt IS NOT NULL`);
253
282
  }
254
- if (normalizedGroupBy && normalizedGroupBy.length) {
255
- normalizedGroupBy.forEach((field) => {
256
- qb.addGroupBy(`${entityAlias}.${field}`);
257
- });
283
+ if (applyPagination) {
284
+ if (limit)
285
+ this.hasJoins(qb) ? qb.take(limit) : qb.limit(limit);
286
+ if (offset)
287
+ this.hasJoins(qb) ? qb.skip(offset) : qb.offset(offset);
258
288
  }
259
- if (limit)
260
- this.hasJoins(qb) ? qb.take(limit) : qb.limit(limit);
261
- if (offset)
262
- this.hasJoins(qb) ? qb.skip(offset) : qb.offset(offset);
263
289
  return qb;
264
290
  }
265
291
  additionalRelationsRequiredForMediaPopulation(normalizedPopulateMedia) {
@@ -278,6 +304,169 @@ class CrudHelperService {
278
304
  });
279
305
  return qb;
280
306
  }
307
+ sanitizeAlias(alias) {
308
+ return alias.replace(/[^a-zA-Z0-9_]/g, '_');
309
+ }
310
+ isAliasJoined(queryBuilder, alias) {
311
+ return queryBuilder.expressionMap.joinAttributes.some(join => join.alias?.name === alias);
312
+ }
313
+ getExistingJoinAlias(qb, joinProperty) {
314
+ const existingJoin = qb.expressionMap.joinAttributes.find(join => join.entityOrProperty === joinProperty);
315
+ return existingJoin?.alias?.name;
316
+ }
317
+ ensureRelationPathJoined(qb, rootAlias, pathParts) {
318
+ const mainAlias = qb.expressionMap?.mainAlias?.name ||
319
+ qb.expressionMap?.aliases?.find(a => a.metadata)?.name ||
320
+ qb.expressionMap?.aliases?.[0]?.name;
321
+ let parentAlias = mainAlias || rootAlias;
322
+ for (let i = 0; i < pathParts.length - 1; i++) {
323
+ const part = pathParts[i];
324
+ const joinProperty = `${parentAlias}.${part}`;
325
+ const existingAlias = this.getExistingJoinAlias(qb, joinProperty);
326
+ const joinAlias = existingAlias ?? this.sanitizeAlias(`${parentAlias}_${part}`);
327
+ if (!existingAlias && !this.isRelationJoined(qb, joinProperty) && !this.isAliasJoined(qb, joinAlias)) {
328
+ qb.leftJoin(joinProperty, joinAlias);
329
+ }
330
+ parentAlias = joinAlias;
331
+ }
332
+ return { alias: parentAlias, property: pathParts[pathParts.length - 1] };
333
+ }
334
+ getDriver(qb) {
335
+ return qb.connection.options.type;
336
+ }
337
+ buildDateGranularityExpression(driver, columnExpr, granularity) {
338
+ switch (driver) {
339
+ case 'postgres':
340
+ case 'cockroachdb':
341
+ return `DATE_TRUNC('${granularity}', ${columnExpr})`;
342
+ case 'mysql':
343
+ case 'mariadb':
344
+ switch (granularity) {
345
+ case 'day': return `DATE(${columnExpr})`;
346
+ case 'week': return `STR_TO_DATE(DATE_FORMAT(${columnExpr}, '%x-%v-1'), '%x-%v-%w')`;
347
+ case 'month': return `DATE_FORMAT(${columnExpr}, '%Y-%m-01')`;
348
+ case 'year': return `DATE_FORMAT(${columnExpr}, '%Y-01-01')`;
349
+ default: throw new Error(`Unsupported granularity ${granularity} for driver ${driver}`);
350
+ }
351
+ case 'mssql':
352
+ case 'sqlserver':
353
+ switch (granularity) {
354
+ case 'day': return `CONVERT(date, ${columnExpr})`;
355
+ case 'week': return `DATEADD(week, DATEDIFF(week, 0, ${columnExpr}), 0)`;
356
+ case 'month': return `DATEFROMPARTS(YEAR(${columnExpr}), MONTH(${columnExpr}), 1)`;
357
+ case 'year': return `DATEFROMPARTS(YEAR(${columnExpr}), 1, 1)`;
358
+ default: throw new Error(`Unsupported granularity ${granularity} for driver ${driver}`);
359
+ }
360
+ default:
361
+ throw new Error(`Granularity not supported for driver ${driver}`);
362
+ }
363
+ }
364
+ buildGroupByExpression(qb, rootAlias, field) {
365
+ const parts = field.split(':');
366
+ const rawField = parts[0];
367
+ const granularity = parts[1];
368
+ const format = parts[2];
369
+ const pathParts = rawField.split('.');
370
+ const { alias, property } = this.ensureRelationPathJoined(qb, rootAlias, pathParts);
371
+ const columnExpr = `${alias}.${property}`;
372
+ const groupExpr = granularity ? this.buildDateGranularityExpression(this.getDriver(qb), columnExpr, granularity) : columnExpr;
373
+ const selectAlias = this.sanitizeAlias(`${rawField.replace(/\./g, '_')}${granularity ? '_' + granularity : ''}`);
374
+ return { groupExpr, selectAlias, sourceKey: field, format };
375
+ }
376
+ applyGroupBySelections(qb, groupBy, entityAlias) {
377
+ const aliasMap = {};
378
+ const formatMap = {};
379
+ const expressionMap = {};
380
+ qb.select([]);
381
+ groupBy.forEach((field) => {
382
+ const { groupExpr, selectAlias, sourceKey, format } = this.buildGroupByExpression(qb, entityAlias, field);
383
+ qb.addSelect(groupExpr, selectAlias);
384
+ qb.addGroupBy(groupExpr);
385
+ aliasMap[sourceKey] = selectAlias;
386
+ formatMap[selectAlias] = format;
387
+ expressionMap[selectAlias] = groupExpr;
388
+ });
389
+ return { aliasMap, formatMap, expressionMap };
390
+ }
391
+ buildAggregateExpression(qb, rootAlias, aggregate) {
392
+ const [rawField, rawFn] = aggregate.split(':');
393
+ const fn = (rawFn || 'count').toLowerCase();
394
+ if ((!rawField || rawField.toLowerCase() === 'count') && fn === 'count') {
395
+ return { expression: 'COUNT(*)', selectAlias: 'count' };
396
+ }
397
+ if (!rawField)
398
+ throw new Error(`Invalid aggregate specification: ${aggregate}`);
399
+ const pathParts = rawField.split('.');
400
+ const { alias, property } = this.ensureRelationPathJoined(qb, rootAlias, pathParts);
401
+ const columnExpr = `${alias}.${property}`;
402
+ const selectAlias = this.sanitizeAlias(`${rawField.replace(/\./g, '_')}_${fn}`);
403
+ let expression = '';
404
+ switch (fn) {
405
+ case 'count':
406
+ expression = `COUNT(${columnExpr})`;
407
+ break;
408
+ case 'count_distinct':
409
+ expression = `COUNT(DISTINCT ${columnExpr})`;
410
+ break;
411
+ case 'sum':
412
+ expression = `SUM(${columnExpr})`;
413
+ break;
414
+ case 'avg':
415
+ expression = `AVG(${columnExpr})`;
416
+ break;
417
+ case 'min':
418
+ expression = `MIN(${columnExpr})`;
419
+ break;
420
+ case 'max':
421
+ expression = `MAX(${columnExpr})`;
422
+ break;
423
+ default: throw new Error(`Unsupported aggregate function ${fn}`);
424
+ }
425
+ return { expression, selectAlias, sourceKey: aggregate };
426
+ }
427
+ applyAggregates(qb, aggregates, entityAlias) {
428
+ const aggregateList = this.normalize(aggregates);
429
+ const aggregateAliasMap = {};
430
+ if (!aggregateList.length) {
431
+ qb.addSelect('COUNT(*)', 'count');
432
+ aggregateAliasMap['count'] = 'count';
433
+ return aggregateAliasMap;
434
+ }
435
+ aggregateList.forEach((agg) => {
436
+ const { expression, selectAlias, sourceKey } = this.buildAggregateExpression(qb, entityAlias, agg);
437
+ qb.addSelect(expression, selectAlias);
438
+ aggregateAliasMap[sourceKey] = selectAlias;
439
+ });
440
+ return aggregateAliasMap;
441
+ }
442
+ applyGroupSortingAndPagination(qb, sort, aliasMap, limit, offset) {
443
+ const normalizedSort = this.normalize(sort);
444
+ if (normalizedSort.length) {
445
+ const orderOptions = this.orderOptions(normalizedSort);
446
+ const orderOptionKeys = Object.keys(orderOptions);
447
+ orderOptionKeys.forEach((key) => {
448
+ const resolvedKey = aliasMap[key] || key;
449
+ const value = orderOptions[key];
450
+ qb.addOrderBy(`"${resolvedKey}"`, value);
451
+ });
452
+ }
453
+ const hasLimit = limit !== undefined && limit !== null;
454
+ const hasOffset = offset !== undefined && offset !== null;
455
+ if (hasLimit) {
456
+ qb.take(limit);
457
+ qb.limit(limit);
458
+ }
459
+ if (hasOffset) {
460
+ qb.skip(offset);
461
+ qb.offset(offset);
462
+ }
463
+ }
464
+ async countGroups(qb) {
465
+ const clone = qb.clone();
466
+ clone.limit(undefined).offset(undefined).take(undefined).skip(undefined);
467
+ const rows = await clone.getRawMany();
468
+ return rows.length;
469
+ }
281
470
  buildJoinQueryForRelation(qb, entityAlias, relation) {
282
471
  const relationParts = relation.split('.');
283
472
  let parentAlias = entityAlias;
@@ -305,42 +494,92 @@ class CrudHelperService {
305
494
  isAggregateField(field) {
306
495
  return field.includes('(');
307
496
  }
308
- isAggregateFieldKey(key, alias) {
309
- return !key.startsWith(`${alias}_`);
497
+ isAggregateFieldKey(key, aggregateAliases) {
498
+ return aggregateAliases.has(key);
310
499
  }
311
500
  getFieldFromQueryFieldKey(queryFieldKey, alias) {
312
501
  return queryFieldKey.replace(`${alias}_`, '');
313
502
  }
314
- buildGroupByRecordsQuery(qb, group, alias) {
503
+ buildGroupByRecordsQuery(qb, group, alias, groupAliasMap = {}, aggregateAliasMap = {}, groupExpressionMap = {}) {
504
+ const rootAlias = qb.expressionMap?.mainAlias?.name
505
+ ?? qb.expressionMap?.aliases?.find(a => a.metadata)?.name
506
+ ?? qb.expressionMap?.aliases?.[0]?.name
507
+ ?? qb.alias
508
+ ?? alias;
315
509
  qb.andWhere(new typeorm_1.Brackets(qb => {
510
+ const aggregateAliasSet = new Set(Object.values(aggregateAliasMap));
511
+ const reverseGroupAliasMap = Object.entries(groupAliasMap).reduce((acc, [sourceKey, aliasKey]) => {
512
+ acc[aliasKey] = sourceKey;
513
+ return acc;
514
+ }, {});
316
515
  for (const key in group) {
317
- if (group.hasOwnProperty(key) && !this.isAggregateFieldKey(key, alias)) {
516
+ if (group.hasOwnProperty(key) && !this.isAggregateFieldKey(key, aggregateAliasSet)) {
318
517
  const value = group[key];
319
- const field = this.getFieldFromQueryFieldKey(key, alias);
320
- qb.andWhere(`${alias}.${field} = :${field}`, { [field]: value });
518
+ const sourceField = reverseGroupAliasMap[key] || key;
519
+ const cleanedField = sourceField.split(':')[0];
520
+ const pathParts = cleanedField.split('.');
521
+ const { alias: resolvedAlias, property } = this.ensureRelationPathJoined(qb, rootAlias, pathParts);
522
+ const paramKey = this.sanitizeAlias(`${resolvedAlias}_${property}_${key}`);
523
+ const expr = (sourceField.includes(':') && groupExpressionMap[key])
524
+ ? groupExpressionMap[key]
525
+ : `${resolvedAlias}.${property}`;
526
+ qb.andWhere(`${expr} = :${paramKey}`, { [paramKey]: value });
321
527
  }
322
528
  }
323
529
  }));
324
530
  return qb;
325
531
  }
326
- getGroupName(group, alias) {
327
- return Object.keys(group)
328
- .filter(key => !this.isAggregateFieldKey(key, alias))
329
- .map(key => group[key])
330
- .join('_');
532
+ formatGroupValue(value, format) {
533
+ if (!format)
534
+ return value;
535
+ if (value === null || value === undefined)
536
+ return value;
537
+ const dateVal = value instanceof Date ? value : new Date(value);
538
+ if (isNaN(dateVal.getTime()))
539
+ return value;
540
+ switch (format) {
541
+ case 'MMM':
542
+ return dateVal.toLocaleString('en', { month: 'short' });
543
+ case 'MMMM':
544
+ return dateVal.toLocaleString('en', { month: 'long' });
545
+ case 'YYYY':
546
+ return dateVal.getFullYear();
547
+ case 'YYYY-MM':
548
+ return `${dateVal.getFullYear()}-${String(dateVal.getMonth() + 1).padStart(2, '0')}`;
549
+ case 'YYYY-MM-DD':
550
+ return `${dateVal.getFullYear()}-${String(dateVal.getMonth() + 1).padStart(2, '0')}-${String(dateVal.getDate()).padStart(2, '0')}`;
551
+ default:
552
+ return value;
553
+ }
554
+ }
555
+ getGroupName(group, aggregateAliases, groupByFields, groupAliasMap, groupFormatMap) {
556
+ const orderedValues = groupByFields
557
+ .map(field => {
558
+ const alias = groupAliasMap[field] ?? this.sanitizeAlias(field.replace(/\./g, '_'));
559
+ const rawVal = group[alias] ?? group[field] ?? group[field.replace(/\./g, '_')];
560
+ return this.formatGroupValue(rawVal, groupFormatMap[alias]);
561
+ })
562
+ .filter(v => v !== undefined && v !== null);
563
+ if (orderedValues.length === 0) {
564
+ return Object.keys(group)
565
+ .filter(key => !this.isAggregateFieldKey(key, aggregateAliases))
566
+ .map(key => group[key])
567
+ .join('_');
568
+ }
569
+ return orderedValues.join('_');
331
570
  }
332
- createGroupRecords(group, alias, groupData) {
333
- const groupName = this.getGroupName(group, alias);
571
+ createGroupRecords(group, aggregateAliases, groupData, groupByFields, groupAliasMap, groupFormatMap) {
572
+ const groupName = this.getGroupName(group, aggregateAliases, groupByFields, groupAliasMap, groupFormatMap);
334
573
  return {
335
574
  groupName,
336
575
  groupData
337
576
  };
338
577
  }
339
- createGroupMeta(group, alias) {
340
- const groupName = this.getGroupName(group, alias);
578
+ createGroupMeta(group, aggregateAliases, groupByFields, groupAliasMap, groupFormatMap) {
579
+ const groupName = this.getGroupName(group, aggregateAliases, groupByFields, groupAliasMap, groupFormatMap);
341
580
  const groupAggregateValues = {};
342
581
  for (const key in group) {
343
- if (group.hasOwnProperty(key) && this.isAggregateFieldKey(key, alias)) {
582
+ if (group.hasOwnProperty(key) && this.isAggregateFieldKey(key, aggregateAliases)) {
344
583
  const value = group[key];
345
584
  groupAggregateValues[key] = value;
346
585
  }
@@ -353,19 +592,15 @@ class CrudHelperService {
353
592
  async countGroupedRecords(qb, basicFilterDto, entityAlias) {
354
593
  const { limit, offset, ...rest } = basicFilterDto;
355
594
  const filteredDto = { ...rest, limit: undefined, offset: undefined };
356
- const filteredQB = this.buildFilterQuery(qb, filteredDto, entityAlias);
357
- const groupByField = filteredDto.groupBy;
358
- if (!groupByField || (Array.isArray(groupByField) && groupByField.length !== 1)) {
595
+ const filteredQB = this.buildFilterQuery(qb, filteredDto, entityAlias, undefined, undefined, undefined, FilterCombinator.AND, false, false);
596
+ const groupByFields = this.normalize(filteredDto.groupBy);
597
+ if (!groupByFields || groupByFields.length === 0) {
359
598
  throw new Error(error_messages_1.ERROR_MESSAGES.INVALID_GROUP_BY_COUNT);
360
599
  }
361
- const field = Array.isArray(groupByField) ? groupByField[0] : groupByField;
362
- const rawResults = await filteredQB
363
- .select([])
364
- .addSelect(`${entityAlias}.${field}`, 'groupField')
365
- .groupBy(`${entityAlias}.${field}`)
366
- .limit(undefined)
367
- .offset(undefined)
368
- .getRawMany();
600
+ this.applyGroupBySelections(filteredQB, groupByFields, entityAlias);
601
+ this.applyAggregates(filteredQB, ['count'], entityAlias);
602
+ filteredQB.limit(undefined).offset(undefined).take(undefined).skip(undefined);
603
+ const rawResults = await filteredQB.getRawMany();
369
604
  return rawResults.length;
370
605
  }
371
606
  }