@solidstarters/solid-core 1.2.200 → 1.2.202

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 (527) 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/refresh-model.command.d.ts.map +1 -1
  10. package/dist/commands/refresh-model.command.js +4 -0
  11. package/dist/commands/refresh-model.command.js.map +1 -1
  12. package/dist/config/cache.options.d.ts +1 -1
  13. package/dist/config/cache.options.d.ts.map +1 -1
  14. package/dist/config/cache.options.js +2 -2
  15. package/dist/config/cache.options.js.map +1 -1
  16. package/dist/config/iam.config.d.ts +4 -0
  17. package/dist/config/iam.config.d.ts.map +1 -1
  18. package/dist/config/iam.config.js +2 -0
  19. package/dist/config/iam.config.js.map +1 -1
  20. package/dist/constants/error-messages.d.ts +2 -0
  21. package/dist/constants/error-messages.d.ts.map +1 -1
  22. package/dist/constants/error-messages.js +4 -0
  23. package/dist/constants/error-messages.js.map +1 -1
  24. package/dist/controllers/model-metadata.controller.d.ts +25 -0
  25. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  26. package/dist/controllers/model-metadata.controller.js +23 -0
  27. package/dist/controllers/model-metadata.controller.js.map +1 -1
  28. package/dist/controllers/model-sequence.controller.d.ts +43 -0
  29. package/dist/controllers/model-sequence.controller.d.ts.map +1 -0
  30. package/dist/controllers/model-sequence.controller.js +179 -0
  31. package/dist/controllers/model-sequence.controller.js.map +1 -0
  32. package/dist/controllers/setting.controller.d.ts +2 -2
  33. package/dist/controllers/setting.controller.d.ts.map +1 -1
  34. package/dist/controllers/setting.controller.js +36 -42
  35. package/dist/controllers/setting.controller.js.map +1 -1
  36. package/dist/decorators/sms-provider.decorator.d.ts +3 -0
  37. package/dist/decorators/sms-provider.decorator.d.ts.map +1 -0
  38. package/dist/decorators/sms-provider.decorator.js +11 -0
  39. package/dist/decorators/sms-provider.decorator.js.map +1 -0
  40. package/dist/dtos/basic-filters.dto.d.ts +3 -1
  41. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  42. package/dist/dtos/basic-filters.dto.js +8 -2
  43. package/dist/dtos/basic-filters.dto.js.map +1 -1
  44. package/dist/dtos/basic-group-filters.dto.d.ts +6 -0
  45. package/dist/dtos/basic-group-filters.dto.d.ts.map +1 -0
  46. package/dist/dtos/basic-group-filters.dto.js +46 -0
  47. package/dist/dtos/basic-group-filters.dto.js.map +1 -0
  48. package/dist/dtos/create-field-metadata.dto.js +2 -2
  49. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  50. package/dist/dtos/create-model-sequence.dto.d.ts +14 -0
  51. package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -0
  52. package/dist/dtos/create-model-sequence.dto.js +90 -0
  53. package/dist/dtos/create-model-sequence.dto.js.map +1 -0
  54. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  55. package/dist/dtos/create-role-metadata.dto.js +1 -0
  56. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  57. package/dist/dtos/get-mcp-url.dto.d.ts +5 -0
  58. package/dist/dtos/get-mcp-url.dto.d.ts.map +1 -0
  59. package/dist/dtos/get-mcp-url.dto.js +31 -0
  60. package/dist/dtos/get-mcp-url.dto.js.map +1 -0
  61. package/dist/dtos/navigation.dto.d.ts +6 -0
  62. package/dist/dtos/navigation.dto.d.ts.map +1 -0
  63. package/dist/dtos/navigation.dto.js +33 -0
  64. package/dist/dtos/navigation.dto.js.map +1 -0
  65. package/dist/dtos/resolve-s3-url.dto.d.ts +5 -5
  66. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
  67. package/dist/dtos/resolve-s3-url.dto.js +7 -7
  68. package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
  69. package/dist/dtos/sign-in.dto.js +3 -3
  70. package/dist/dtos/sign-in.dto.js.map +1 -1
  71. package/dist/dtos/update-model-sequence.dto.d.ts +15 -0
  72. package/dist/dtos/update-model-sequence.dto.d.ts.map +1 -0
  73. package/dist/dtos/update-model-sequence.dto.js +94 -0
  74. package/dist/dtos/update-model-sequence.dto.js.map +1 -0
  75. package/dist/entities/common.entity.d.ts.map +1 -1
  76. package/dist/entities/common.entity.js +6 -4
  77. package/dist/entities/common.entity.js.map +1 -1
  78. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  79. package/dist/entities/field-metadata.entity.js +2 -1
  80. package/dist/entities/field-metadata.entity.js.map +1 -1
  81. package/dist/entities/legacy-common.entity.d.ts.map +1 -1
  82. package/dist/entities/legacy-common.entity.js +6 -4
  83. package/dist/entities/legacy-common.entity.js.map +1 -1
  84. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  85. package/dist/entities/model-metadata.entity.js +5 -1
  86. package/dist/entities/model-metadata.entity.js.map +1 -1
  87. package/dist/entities/model-sequence.entity.d.ts +15 -0
  88. package/dist/entities/model-sequence.entity.d.ts.map +1 -0
  89. package/dist/entities/model-sequence.entity.js +67 -0
  90. package/dist/entities/model-sequence.entity.js.map +1 -0
  91. package/dist/factories/mail.factory.d.ts.map +1 -1
  92. package/dist/factories/mail.factory.js.map +1 -1
  93. package/dist/factories/sms.factory.d.ts +14 -0
  94. package/dist/factories/sms.factory.d.ts.map +1 -0
  95. package/dist/factories/sms.factory.js +53 -0
  96. package/dist/factories/sms.factory.js.map +1 -0
  97. package/dist/helpers/date.helper.d.ts.map +1 -1
  98. package/dist/helpers/date.helper.js +13 -4
  99. package/dist/helpers/date.helper.js.map +1 -1
  100. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.d.ts.map +1 -1
  101. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js +13 -2
  102. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
  103. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +0 -1
  104. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  105. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +4 -9
  106. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  107. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts +0 -1
  108. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
  109. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +7 -8
  110. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
  111. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +0 -1
  112. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  113. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +4 -9
  114. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  115. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  116. package/dist/helpers/model-metadata-helper.service.js +6 -2
  117. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  118. package/dist/helpers/module-metadata-helper.service.d.ts +1 -0
  119. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  120. package/dist/helpers/module-metadata-helper.service.js +9 -0
  121. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  122. package/dist/helpers/module.helper.d.ts +1 -0
  123. package/dist/helpers/module.helper.d.ts.map +1 -1
  124. package/dist/helpers/module.helper.js +29 -3
  125. package/dist/helpers/module.helper.js.map +1 -1
  126. package/dist/helpers/solid-registry.d.ts +14 -0
  127. package/dist/helpers/solid-registry.d.ts.map +1 -1
  128. package/dist/helpers/solid-registry.js +7 -0
  129. package/dist/helpers/solid-registry.js.map +1 -1
  130. package/dist/index.d.ts +12 -7
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +13 -8
  133. package/dist/index.js.map +1 -1
  134. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts +1 -0
  135. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts.map +1 -1
  136. package/dist/jobs/computed-field-evaluation-subscriber.service.js +16 -4
  137. package/dist/jobs/computed-field-evaluation-subscriber.service.js.map +1 -1
  138. package/dist/jobs/database/{sms-publisher-database.service.d.ts → msg91-sms-publisher-database.service.d.ts} +2 -2
  139. package/dist/jobs/database/msg91-sms-publisher-database.service.d.ts.map +1 -0
  140. package/dist/jobs/database/{sms-publisher-database.service.js → msg91-sms-publisher-database.service.js} +8 -8
  141. package/dist/jobs/database/msg91-sms-publisher-database.service.js.map +1 -0
  142. package/dist/jobs/database/{sms-queue-database-options.d.ts → msg91-sms-queue-database-options.d.ts} +1 -1
  143. package/dist/jobs/database/msg91-sms-queue-database-options.d.ts.map +1 -0
  144. package/dist/jobs/database/{sms-queue-database-options.js → msg91-sms-queue-database-options.js} +1 -1
  145. package/dist/jobs/database/msg91-sms-queue-database-options.js.map +1 -0
  146. package/dist/jobs/database/{sms-subscriber-database.service.d.ts → msg91-sms-subscriber-database.service.d.ts} +5 -5
  147. package/dist/jobs/database/msg91-sms-subscriber-database.service.d.ts.map +1 -0
  148. package/dist/jobs/database/{sms-subscriber-database.service.js → msg91-sms-subscriber-database.service.js} +14 -12
  149. package/dist/jobs/database/msg91-sms-subscriber-database.service.js.map +1 -0
  150. package/dist/jobs/database/otp-subscriber-database.service.d.ts +4 -4
  151. package/dist/jobs/database/otp-subscriber-database.service.d.ts.map +1 -1
  152. package/dist/jobs/database/otp-subscriber-database.service.js +6 -4
  153. package/dist/jobs/database/otp-subscriber-database.service.js.map +1 -1
  154. package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts +3 -3
  155. package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts.map +1 -1
  156. package/dist/jobs/database/twilio-sms-subscriber-database.service.js +6 -4
  157. package/dist/jobs/database/twilio-sms-subscriber-database.service.js.map +1 -1
  158. package/dist/jobs/{sms-publisher.service.d.ts → msg91-otp-publisher.service.d.ts} +2 -2
  159. package/dist/jobs/msg91-otp-publisher.service.d.ts.map +1 -0
  160. package/dist/jobs/{sms-publisher.service.js → msg91-otp-publisher.service.js} +8 -8
  161. package/dist/jobs/msg91-otp-publisher.service.js.map +1 -0
  162. package/dist/jobs/{sms-queue-options.d.ts → msg91-otp-queue-options.d.ts} +1 -1
  163. package/dist/jobs/msg91-otp-queue-options.d.ts.map +1 -0
  164. package/dist/jobs/{otp-queue-options.js → msg91-otp-queue-options.js} +1 -1
  165. package/dist/jobs/msg91-otp-queue-options.js.map +1 -0
  166. package/dist/jobs/{sms-subscriber.service.d.ts → msg91-otp-subscriber.service.d.ts} +6 -6
  167. package/dist/jobs/msg91-otp-subscriber.service.d.ts.map +1 -0
  168. package/dist/jobs/{otp-subscriber.service.js → msg91-otp-subscriber.service.js} +14 -12
  169. package/dist/jobs/msg91-otp-subscriber.service.js.map +1 -0
  170. package/dist/jobs/{otp-publisher.service.d.ts → msg91-sms-publisher.service.d.ts} +2 -2
  171. package/dist/jobs/msg91-sms-publisher.service.d.ts.map +1 -0
  172. package/dist/jobs/{otp-publisher.service.js → msg91-sms-publisher.service.js} +8 -8
  173. package/dist/jobs/msg91-sms-publisher.service.js.map +1 -0
  174. package/dist/jobs/{otp-queue-options.d.ts → msg91-sms-queue-options.d.ts} +1 -1
  175. package/dist/jobs/msg91-sms-queue-options.d.ts.map +1 -0
  176. package/dist/jobs/{sms-queue-options.js → msg91-sms-queue-options.js} +1 -1
  177. package/dist/jobs/msg91-sms-queue-options.js.map +1 -0
  178. package/dist/jobs/{otp-subscriber.service.d.ts → msg91-sms-subscriber.service.d.ts} +7 -7
  179. package/dist/jobs/msg91-sms-subscriber.service.d.ts.map +1 -0
  180. package/dist/jobs/{sms-subscriber.service.js → msg91-sms-subscriber.service.js} +14 -12
  181. package/dist/jobs/msg91-sms-subscriber.service.js.map +1 -0
  182. package/dist/jobs/twilio-sms-subscriber.service.d.ts +3 -3
  183. package/dist/jobs/twilio-sms-subscriber.service.d.ts.map +1 -1
  184. package/dist/jobs/twilio-sms-subscriber.service.js +6 -4
  185. package/dist/jobs/twilio-sms-subscriber.service.js.map +1 -1
  186. package/dist/repository/media.repository.d.ts.map +1 -1
  187. package/dist/repository/media.repository.js +4 -0
  188. package/dist/repository/media.repository.js.map +1 -1
  189. package/dist/repository/model-sequence.repository.d.ts +14 -0
  190. package/dist/repository/model-sequence.repository.d.ts.map +1 -0
  191. package/dist/repository/model-sequence.repository.js +103 -0
  192. package/dist/repository/model-sequence.repository.js.map +1 -0
  193. package/dist/seeders/module-metadata-seeder.service.d.ts +7 -12
  194. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  195. package/dist/seeders/module-metadata-seeder.service.js +87 -27
  196. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  197. package/dist/seeders/seed-data/solid-core-metadata.json +373 -52
  198. package/dist/seeders/system-fields-seeder.service.d.ts +1 -0
  199. package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
  200. package/dist/seeders/system-fields-seeder.service.js +11 -2
  201. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  202. package/dist/seeders/user-seeder.service.d.ts.map +1 -1
  203. package/dist/seeders/user-seeder.service.js +5 -4
  204. package/dist/seeders/user-seeder.service.js.map +1 -1
  205. package/dist/services/action-metadata.service.d.ts.map +1 -1
  206. package/dist/services/action-metadata.service.js +1 -0
  207. package/dist/services/action-metadata.service.js.map +1 -1
  208. package/dist/services/ai-interaction.service.d.ts.map +1 -1
  209. package/dist/services/ai-interaction.service.js +1 -0
  210. package/dist/services/ai-interaction.service.js.map +1 -1
  211. package/dist/services/authentication.service.d.ts +6 -3
  212. package/dist/services/authentication.service.d.ts.map +1 -1
  213. package/dist/services/authentication.service.js +70 -27
  214. package/dist/services/authentication.service.js.map +1 -1
  215. package/dist/services/chatter-message-details.service.d.ts.map +1 -1
  216. package/dist/services/chatter-message-details.service.js +1 -0
  217. package/dist/services/chatter-message-details.service.js.map +1 -1
  218. package/dist/services/chatter-message.service.d.ts.map +1 -1
  219. package/dist/services/chatter-message.service.js +7 -3
  220. package/dist/services/chatter-message.service.js.map +1 -1
  221. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +7 -5
  222. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
  223. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +15 -0
  224. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -0
  225. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +72 -0
  226. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -0
  227. package/dist/services/crud-helper.service.d.ts +23 -6
  228. package/dist/services/crud-helper.service.d.ts.map +1 -1
  229. package/dist/services/crud-helper.service.js +257 -45
  230. package/dist/services/crud-helper.service.js.map +1 -1
  231. package/dist/services/crud.service.d.ts +4 -3
  232. package/dist/services/crud.service.d.ts.map +1 -1
  233. package/dist/services/crud.service.js +53 -24
  234. package/dist/services/crud.service.js.map +1 -1
  235. package/dist/services/database/database-bootstrap.service.d.ts +12 -0
  236. package/dist/services/database/database-bootstrap.service.d.ts.map +1 -0
  237. package/dist/services/database/database-bootstrap.service.js +115 -0
  238. package/dist/services/database/database-bootstrap.service.js.map +1 -0
  239. package/dist/services/email-template.service.d.ts +7 -7
  240. package/dist/services/email-template.service.d.ts.map +1 -1
  241. package/dist/services/email-template.service.js +8 -7
  242. package/dist/services/email-template.service.js.map +1 -1
  243. package/dist/services/excel.service.d.ts +11 -0
  244. package/dist/services/excel.service.d.ts.map +1 -1
  245. package/dist/services/excel.service.js +104 -0
  246. package/dist/services/excel.service.js.map +1 -1
  247. package/dist/services/field-metadata.service.d.ts +4 -1
  248. package/dist/services/field-metadata.service.d.ts.map +1 -1
  249. package/dist/services/field-metadata.service.js +35 -30
  250. package/dist/services/field-metadata.service.js.map +1 -1
  251. package/dist/services/file.service.d.ts +1 -0
  252. package/dist/services/file.service.d.ts.map +1 -1
  253. package/dist/services/file.service.js +9 -0
  254. package/dist/services/file.service.js.map +1 -1
  255. package/dist/services/fixtures.service.d.ts +13 -0
  256. package/dist/services/fixtures.service.d.ts.map +1 -0
  257. package/dist/services/fixtures.service.js +95 -0
  258. package/dist/services/fixtures.service.js.map +1 -0
  259. package/dist/services/genai/ingest-metadata.service.d.ts.map +1 -1
  260. package/dist/services/genai/ingest-metadata.service.js +1 -1
  261. package/dist/services/genai/ingest-metadata.service.js.map +1 -1
  262. package/dist/services/import-transaction-error-log.service.d.ts.map +1 -1
  263. package/dist/services/import-transaction-error-log.service.js +1 -0
  264. package/dist/services/import-transaction-error-log.service.js.map +1 -1
  265. package/dist/services/import-transaction.service.d.ts.map +1 -1
  266. package/dist/services/import-transaction.service.js +7 -1
  267. package/dist/services/import-transaction.service.js.map +1 -1
  268. package/dist/services/list-of-values.service.d.ts +2 -2
  269. package/dist/services/list-of-values.service.d.ts.map +1 -1
  270. package/dist/services/list-of-values.service.js +2 -1
  271. package/dist/services/list-of-values.service.js.map +1 -1
  272. package/dist/services/locale.service.d.ts.map +1 -1
  273. package/dist/services/locale.service.js +1 -0
  274. package/dist/services/locale.service.js.map +1 -1
  275. package/dist/services/mail/smtp-email.service.js +0 -1
  276. package/dist/services/mail/smtp-email.service.js.map +1 -1
  277. package/dist/services/media.service.d.ts +3 -3
  278. package/dist/services/media.service.d.ts.map +1 -1
  279. package/dist/services/media.service.js +6 -4
  280. package/dist/services/media.service.js.map +1 -1
  281. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  282. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +17 -6
  283. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  284. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  285. package/dist/services/mediaStorageProviders/file-storage-provider.js +0 -13
  286. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  287. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  288. package/dist/services/menu-item-metadata.service.js +4 -0
  289. package/dist/services/menu-item-metadata.service.js.map +1 -1
  290. package/dist/services/model-metadata.service.d.ts +28 -1
  291. package/dist/services/model-metadata.service.d.ts.map +1 -1
  292. package/dist/services/model-metadata.service.js +111 -44
  293. package/dist/services/model-metadata.service.js.map +1 -1
  294. package/dist/services/model-sequence.service.d.ts +23 -0
  295. package/dist/services/model-sequence.service.d.ts.map +1 -0
  296. package/dist/services/model-sequence.service.js +55 -0
  297. package/dist/services/model-sequence.service.js.map +1 -0
  298. package/dist/services/module-metadata.service.d.ts +1 -0
  299. package/dist/services/module-metadata.service.d.ts.map +1 -1
  300. package/dist/services/module-metadata.service.js +35 -1
  301. package/dist/services/module-metadata.service.js.map +1 -1
  302. package/dist/services/permission-metadata.service.d.ts +5 -5
  303. package/dist/services/permission-metadata.service.d.ts.map +1 -1
  304. package/dist/services/permission-metadata.service.js +6 -5
  305. package/dist/services/permission-metadata.service.js.map +1 -1
  306. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  307. package/dist/services/queues/database-subscriber.service.js +2 -1
  308. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  309. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  310. package/dist/services/queues/rabbitmq-subscriber.service.js +2 -2
  311. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  312. package/dist/services/role-metadata.service.d.ts.map +1 -1
  313. package/dist/services/role-metadata.service.js +1 -0
  314. package/dist/services/role-metadata.service.js.map +1 -1
  315. package/dist/services/scheduled-job.service.d.ts +6 -6
  316. package/dist/services/scheduled-job.service.d.ts.map +1 -1
  317. package/dist/services/scheduled-job.service.js +8 -8
  318. package/dist/services/scheduled-job.service.js.map +1 -1
  319. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  320. package/dist/services/scheduled-jobs/scheduler.service.js +4 -0
  321. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  322. package/dist/services/security-rule.service.d.ts.map +1 -1
  323. package/dist/services/security-rule.service.js +1 -0
  324. package/dist/services/security-rule.service.js.map +1 -1
  325. package/dist/services/selection-providers/list-of-models-selection-provider.service.d.ts.map +1 -1
  326. package/dist/services/selection-providers/list-of-models-selection-provider.service.js +4 -0
  327. package/dist/services/selection-providers/list-of-models-selection-provider.service.js.map +1 -1
  328. package/dist/services/setting.service.d.ts +7 -5
  329. package/dist/services/setting.service.d.ts.map +1 -1
  330. package/dist/services/setting.service.js +28 -48
  331. package/dist/services/setting.service.js.map +1 -1
  332. package/dist/services/sms/Msg91BaseSMSService.js +6 -6
  333. package/dist/services/sms/Msg91BaseSMSService.js.map +1 -1
  334. package/dist/services/sms/Msg91OTPService.d.ts.map +1 -1
  335. package/dist/services/sms/Msg91OTPService.js +3 -1
  336. package/dist/services/sms/Msg91OTPService.js.map +1 -1
  337. package/dist/services/sms/Msg91SMSService.d.ts.map +1 -1
  338. package/dist/services/sms/Msg91SMSService.js +3 -1
  339. package/dist/services/sms/Msg91SMSService.js.map +1 -1
  340. package/dist/services/sms/TwilioSMSService.d.ts.map +1 -1
  341. package/dist/services/sms/TwilioSMSService.js +2 -0
  342. package/dist/services/sms/TwilioSMSService.js.map +1 -1
  343. package/dist/services/sms-template.service.d.ts +7 -7
  344. package/dist/services/sms-template.service.d.ts.map +1 -1
  345. package/dist/services/sms-template.service.js +8 -7
  346. package/dist/services/sms-template.service.js.map +1 -1
  347. package/dist/services/solid-introspect.service.d.ts +5 -13
  348. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  349. package/dist/services/solid-introspect.service.js +18 -22
  350. package/dist/services/solid-introspect.service.js.map +1 -1
  351. package/dist/services/solid-ts-morph.service.js +2 -2
  352. package/dist/services/solid-ts-morph.service.js.map +1 -1
  353. package/dist/services/user-activity-history.service.d.ts.map +1 -1
  354. package/dist/services/user-activity-history.service.js +1 -0
  355. package/dist/services/user-activity-history.service.js.map +1 -1
  356. package/dist/services/user-view-metadata.service.d.ts.map +1 -1
  357. package/dist/services/user-view-metadata.service.js +3 -2
  358. package/dist/services/user-view-metadata.service.js.map +1 -1
  359. package/dist/services/user.service.d.ts.map +1 -1
  360. package/dist/services/user.service.js +1 -0
  361. package/dist/services/user.service.js.map +1 -1
  362. package/dist/services/view-metadata.service.d.ts +1 -1
  363. package/dist/services/view-metadata.service.d.ts.map +1 -1
  364. package/dist/services/view-metadata.service.js +3 -1
  365. package/dist/services/view-metadata.service.js.map +1 -1
  366. package/dist/solid-core-cli-db.module.d.ts.map +1 -1
  367. package/dist/solid-core-cli-db.module.js +5 -2
  368. package/dist/solid-core-cli-db.module.js.map +1 -1
  369. package/dist/solid-core-cli.module.js +1 -1
  370. package/dist/solid-core-cli.module.js.map +1 -1
  371. package/dist/solid-core.module.d.ts.map +1 -1
  372. package/dist/solid-core.module.js +40 -13
  373. package/dist/solid-core.module.js.map +1 -1
  374. package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
  375. package/dist/subscribers/audit.subscriber.js +5 -1
  376. package/dist/subscribers/audit.subscriber.js.map +1 -1
  377. package/dist/subscribers/computed-entity-field.subscriber.d.ts +4 -2
  378. package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
  379. package/dist/subscribers/computed-entity-field.subscriber.js +53 -12
  380. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  381. package/dist/subscribers/scheduled-job.subscriber.d.ts.map +1 -1
  382. package/dist/subscribers/scheduled-job.subscriber.js +1 -1
  383. package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
  384. package/dist/transformers/typeorm/local-date-time-transformer.d.ts +5 -0
  385. package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -0
  386. package/dist/transformers/typeorm/local-date-time-transformer.js +48 -0
  387. package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -0
  388. package/dist/tsconfig.tsbuildinfo +1 -1
  389. package/docs/grouping-enhancements.md +89 -0
  390. package/package.json +1 -1
  391. package/src/commands/fixtures/fixtures-setup.command.ts +44 -0
  392. package/src/commands/fixtures/fixtures-tear-down.command.ts +45 -0
  393. package/src/commands/refresh-model.command.ts +3 -1
  394. package/src/config/cache.options.ts +6 -3
  395. package/src/config/iam.config.ts +2 -1
  396. package/src/constants/error-messages.ts +7 -1
  397. package/src/controllers/model-metadata.controller.ts +21 -1
  398. package/src/controllers/model-sequence.controller.ts +93 -0
  399. package/src/controllers/setting.controller.ts +62 -54
  400. package/src/decorators/sms-provider.decorator.ts +7 -0
  401. package/src/dtos/basic-filters.dto.ts +6 -1
  402. package/src/dtos/basic-group-filters.dto.ts +23 -0
  403. package/src/dtos/create-field-metadata.dto.ts +1 -1
  404. package/src/dtos/create-model-sequence.dto.ts +51 -0
  405. package/src/dtos/create-role-metadata.dto.ts +16 -3
  406. package/src/dtos/get-mcp-url.dto.ts +13 -0
  407. package/src/dtos/navigation.dto.ts +14 -0
  408. package/src/dtos/resolve-s3-url.dto.ts +9 -11
  409. package/src/dtos/sign-in.dto.ts +3 -3
  410. package/src/dtos/update-model-sequence.dto.ts +53 -0
  411. package/src/entities/common.entity.ts +8 -8
  412. package/src/entities/field-metadata.entity.ts +1 -1
  413. package/src/entities/legacy-common.entity.ts +8 -6
  414. package/src/entities/model-metadata.entity.ts +1 -1
  415. package/src/entities/model-sequence.entity.ts +32 -0
  416. package/src/factories/mail.factory.ts +0 -1
  417. package/src/factories/sms.factory.ts +43 -0
  418. package/src/helpers/date.helper.ts +38 -9
  419. package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +18 -5
  420. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +9 -9
  421. package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +16 -8
  422. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +9 -9
  423. package/src/helpers/model-metadata-helper.service.ts +6 -4
  424. package/src/helpers/module-metadata-helper.service.ts +18 -1
  425. package/src/helpers/module.helper.ts +40 -5
  426. package/src/helpers/solid-registry.ts +23 -0
  427. package/src/index.ts +12 -7
  428. package/src/jobs/computed-field-evaluation-subscriber.service.ts +15 -4
  429. package/src/jobs/database/{sms-publisher-database.service.ts → msg91-sms-publisher-database.service.ts} +2 -2
  430. package/src/jobs/database/{sms-subscriber-database.service.ts → msg91-sms-subscriber-database.service.ts} +9 -4
  431. package/src/jobs/database/otp-subscriber-database.service.ts +8 -2
  432. package/src/jobs/database/twilio-sms-subscriber-database.service.ts +5 -2
  433. package/src/jobs/{otp-publisher.service.ts → msg91-otp-publisher.service.ts} +2 -2
  434. package/src/jobs/{otp-subscriber.service.ts → msg91-otp-subscriber.service.ts} +10 -4
  435. package/src/jobs/{sms-publisher.service.ts → msg91-sms-publisher.service.ts} +2 -2
  436. package/src/jobs/{sms-subscriber.service.ts → msg91-sms-subscriber.service.ts} +9 -4
  437. package/src/jobs/twilio-sms-subscriber.service.ts +6 -2
  438. package/src/repository/media.repository.ts +3 -2
  439. package/src/repository/model-sequence.repository.ts +97 -0
  440. package/src/seeders/module-metadata-seeder.service.ts +133 -34
  441. package/src/seeders/seed-data/email-templates/email-on-signup.handlebars.html +155 -0
  442. package/src/seeders/seed-data/sms-templates/text-on-signup.handlebars.txt +10 -0
  443. package/src/seeders/seed-data/solid-core-metadata.json +374 -53
  444. package/src/seeders/system-fields-seeder.service.ts +6 -2
  445. package/src/seeders/user-seeder.service.ts +5 -4
  446. package/src/services/action-metadata.service.ts +3 -2
  447. package/src/services/ai-interaction.service.ts +2 -1
  448. package/src/services/authentication.service.ts +119 -24
  449. package/src/services/chatter-message-details.service.ts +2 -1
  450. package/src/services/chatter-message.service.ts +10 -4
  451. package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +9 -9
  452. package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +86 -0
  453. package/src/services/crud-helper.service.ts +287 -49
  454. package/src/services/crud.service.ts +95 -45
  455. package/src/services/database/database-bootstrap.service.ts +91 -0
  456. package/src/services/email-template.service.ts +11 -13
  457. package/src/services/excel.service.ts +152 -3
  458. package/src/services/field-metadata.service.ts +102 -55
  459. package/src/services/file.service.ts +9 -0
  460. package/src/services/fixtures.service.ts +108 -0
  461. package/src/services/genai/ingest-metadata.service.ts +4 -3
  462. package/src/services/import-transaction-error-log.service.ts +2 -1
  463. package/src/services/import-transaction.service.ts +8 -4
  464. package/src/services/list-of-values.service.ts +4 -4
  465. package/src/services/locale.service.ts +2 -1
  466. package/src/services/mail/smtp-email.service.ts +1 -1
  467. package/src/services/media.service.ts +10 -11
  468. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +22 -7
  469. package/src/services/mediaStorageProviders/file-storage-provider.ts +18 -13
  470. package/src/services/menu-item-metadata.service.ts +6 -2
  471. package/src/services/model-metadata.service.ts +201 -44
  472. package/src/services/model-sequence.service.ts +33 -0
  473. package/src/services/module-metadata.service.ts +49 -2
  474. package/src/services/permission-metadata.service.ts +8 -9
  475. package/src/services/queues/database-subscriber.service.ts +3 -1
  476. package/src/services/queues/rabbitmq-subscriber.service.ts +4 -2
  477. package/src/services/role-metadata.service.ts +1 -0
  478. package/src/services/scheduled-job.service.ts +9 -9
  479. package/src/services/scheduled-jobs/scheduler.service.ts +5 -0
  480. package/src/services/security-rule.service.ts +1 -0
  481. package/src/services/selection-providers/list-of-models-selection-provider.service.ts +5 -2
  482. package/src/services/setting.service.ts +42 -55
  483. package/src/services/sms/Msg91BaseSMSService.ts +6 -6
  484. package/src/services/sms/Msg91OTPService.ts +3 -2
  485. package/src/services/sms/Msg91SMSService.ts +3 -1
  486. package/src/services/sms/TwilioSMSService.ts +3 -3
  487. package/src/services/sms-template.service.ts +11 -13
  488. package/src/services/solid-introspect.service.ts +28 -19
  489. package/src/services/solid-ts-morph.service.ts +2 -2
  490. package/src/services/user-activity-history.service.ts +3 -2
  491. package/src/services/user-view-metadata.service.ts +4 -3
  492. package/src/services/user.service.ts +2 -1
  493. package/src/services/view-metadata.service.ts +5 -4
  494. package/src/solid-core-cli-db.module.ts +5 -4
  495. package/src/solid-core-cli.module.ts +2 -2
  496. package/src/solid-core.module.ts +42 -13
  497. package/src/subscribers/audit.subscriber.ts +3 -2
  498. package/src/subscribers/computed-entity-field.subscriber.ts +60 -17
  499. package/src/subscribers/scheduled-job.subscriber.ts +9 -2
  500. package/src/transformers/typeorm/local-date-time-transformer.ts +55 -0
  501. package/dist/jobs/database/sms-publisher-database.service.d.ts.map +0 -1
  502. package/dist/jobs/database/sms-publisher-database.service.js.map +0 -1
  503. package/dist/jobs/database/sms-queue-database-options.d.ts.map +0 -1
  504. package/dist/jobs/database/sms-queue-database-options.js.map +0 -1
  505. package/dist/jobs/database/sms-subscriber-database.service.d.ts.map +0 -1
  506. package/dist/jobs/database/sms-subscriber-database.service.js.map +0 -1
  507. package/dist/jobs/otp-publisher.service.d.ts.map +0 -1
  508. package/dist/jobs/otp-publisher.service.js.map +0 -1
  509. package/dist/jobs/otp-queue-options.d.ts.map +0 -1
  510. package/dist/jobs/otp-queue-options.js.map +0 -1
  511. package/dist/jobs/otp-subscriber.service.d.ts.map +0 -1
  512. package/dist/jobs/otp-subscriber.service.js.map +0 -1
  513. package/dist/jobs/sms-publisher.service.d.ts.map +0 -1
  514. package/dist/jobs/sms-publisher.service.js.map +0 -1
  515. package/dist/jobs/sms-queue-options.d.ts.map +0 -1
  516. package/dist/jobs/sms-queue-options.js.map +0 -1
  517. package/dist/jobs/sms-subscriber.service.d.ts.map +0 -1
  518. package/dist/jobs/sms-subscriber.service.js.map +0 -1
  519. /package/sql/{mssql → default/mssql}/proc_CleanupModelMetadata.sql +0 -0
  520. /package/sql/{mssql → default/mssql}/proc_CleanupModuleMetadata.sql +0 -0
  521. /package/sql/{mssql/scratchpad.sql → default/mssql/scratchpad.sql.txt} +0 -0
  522. /package/sql/{postgres → default/postgres}/proc_CleanupModelMetadata.sql +0 -0
  523. /package/sql/{postgres → default/postgres}/proc_CleanupModuleMetadata.sql +0 -0
  524. /package/sql/{postgres/scratchpad.sql → default/postgres/scratchpad.sql.txt} +0 -0
  525. /package/src/jobs/database/{sms-queue-database-options.ts → msg91-sms-queue-database-options.ts} +0 -0
  526. /package/src/jobs/{otp-queue-options.ts → msg91-otp-queue-options.ts} +0 -0
  527. /package/src/jobs/{sms-queue-options.ts → msg91-sms-queue-options.ts} +0 -0
@@ -14,18 +14,18 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.EmailTemplateService = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
+ const config_1 = require("@nestjs/config");
18
+ const core_1 = require("@nestjs/core");
17
19
  const typeorm_1 = require("@nestjs/typeorm");
20
+ const email_template_repository_1 = require("../repository/email-template.repository");
18
21
  const typeorm_2 = require("typeorm");
22
+ const crud_helper_service_1 = require("./crud-helper.service");
19
23
  const crud_service_1 = require("./crud.service");
20
- const model_metadata_service_1 = require("./model-metadata.service");
21
- const module_metadata_service_1 = require("./module-metadata.service");
22
- const media_storage_provider_metadata_service_1 = require("./media-storage-provider-metadata.service");
23
- const config_1 = require("@nestjs/config");
24
24
  const file_service_1 = require("./file.service");
25
+ const media_storage_provider_metadata_service_1 = require("./media-storage-provider-metadata.service");
25
26
  const media_service_1 = require("./media.service");
26
- const core_1 = require("@nestjs/core");
27
- const crud_helper_service_1 = require("./crud-helper.service");
28
- const email_template_repository_1 = require("../repository/email-template.repository");
27
+ const model_metadata_service_1 = require("./model-metadata.service");
28
+ const module_metadata_service_1 = require("./module-metadata.service");
29
29
  let EmailTemplateService = class EmailTemplateService extends crud_service_1.CRUDService {
30
30
  constructor(modelMetadataService, moduleMetadataService, mediaStorageProviderService, configService, fileService, mediaService, discoveryService, crudHelperService, entityManager, repo, moduleRef) {
31
31
  super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'emailTemplate', 'app-builder', moduleRef);
@@ -60,6 +60,7 @@ let EmailTemplateService = class EmailTemplateService extends crud_service_1.CRU
60
60
  exports.EmailTemplateService = EmailTemplateService;
61
61
  exports.EmailTemplateService = EmailTemplateService = __decorate([
62
62
  (0, common_1.Injectable)(),
63
+ __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
63
64
  __param(8, (0, typeorm_1.InjectEntityManager)()),
64
65
  __metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
65
66
  module_metadata_service_1.ModuleMetadataService,
@@ -1 +1 @@
1
- {"version":3,"file":"email-template.service.js","sourceRoot":"","sources":["../../src/services/email-template.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA+D;AAE/D,6CAAwE;AACxE,qCAAoD;AAKpD,iDAA6C;AAC7C,qEAAgE;AAChE,uEAAkE;AAClE,uGAAgG;AAChG,2CAA+C;AAC/C,iDAA6C;AAC7C,mDAA+C;AAC/C,uCAA2D;AAC3D,+DAA0D;AAC1D,uFAAmF;AAG5E,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,0BAA0B;IAChE,YACS,oBAA0C,EAC1C,qBAA4C,EAC5C,2BAAgE,EAChE,aAA4B,EAC5B,WAAwB,EACxB,YAA0B,EAC1B,gBAAkC,EAClC,iBAAoC,EAEpC,aAA4B,EAG5B,IAA6B,EAC7B,SAAoB;QAEzB,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAf/K,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,gCAA2B,GAA3B,2BAA2B,CAAqC;QAChE,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAAyB;QAC7B,cAAS,GAAT,SAAS,CAAW;IAG7B,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,YAAiB,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,KAAK,EAAE;gBACH,IAAI,EAAE,IAAI;aACb;YACD,SAAS,EAAE,SAAS;SACvB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,YAAY,CAAC,IAAY;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;CACJ,CAAA;AAlCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAWR,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCARS,6CAAoB;QACnB,+CAAqB;QACf,6EAAmC;QACjD,sBAAa;QACf,0BAAW;QACV,4BAAY;QACR,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAGtB,mDAAuB;QAClB,gBAAS;GAfpB,oBAAoB,CAkChC","sourcesContent":["import { Injectable, NotFoundException } from '@nestjs/common';\n\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\nimport { PaginationQueryDto } from 'src/dtos/pagination-query.dto';\nimport { EmailTemplate } from '../entities/email-template.entity';\nimport { CreateEmailTemplateDto } from '../dtos/create-email-template.dto';\nimport { UpdateEmailTemplateDto } from '../dtos/update-email-template.dto';\nimport { CRUDService } from './crud.service';\nimport { ModelMetadataService } from './model-metadata.service';\nimport { ModuleMetadataService } from './module-metadata.service';\nimport { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';\nimport { ConfigService } from '@nestjs/config';\nimport { FileService } from './file.service';\nimport { MediaService } from './media.service';\nimport { DiscoveryService, ModuleRef } from '@nestjs/core';\nimport { CrudHelperService } from './crud-helper.service';\nimport { EmailTemplateRepository } from 'src/repository/email-template.repository';\n\n@Injectable()\nexport class EmailTemplateService extends CRUDService<EmailTemplate>{\n constructor(\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly mediaStorageProviderService: MediaStorageProviderMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly mediaService: MediaService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(EmailTemplate, 'default')\n // readonly repo: Repository<EmailTemplate>,\n readonly repo: EmailTemplateRepository,\n readonly moduleRef: ModuleRef,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'emailTemplate', 'app-builder', moduleRef);\n }\n async findOneByName(name: string, relations: any = {}) {\n const entity = await this.repo.findOne({\n where: {\n name: name,\n },\n relations: relations,\n });\n return entity;\n }\n async removeByName(name: string) {\n const entity = await this.findOneByName(name);\n if (entity) {\n return await this.repo.remove(entity);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"email-template.service.js","sourceRoot":"","sources":["../../src/services/email-template.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAgE;AAEhE,2CAA+C;AAC/C,uCAA2D;AAC3D,6CAAsD;AACtD,uFAAmF;AACnF,qCAAwC;AAExC,+DAA0D;AAC1D,iDAA6C;AAC7C,iDAA6C;AAC7C,uGAAgG;AAChG,mDAA+C;AAC/C,qEAAgE;AAChE,uEAAkE;AAG3D,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,0BAA0B;IAChE,YAES,oBAA0C,EAC1C,qBAA4C,EAC5C,2BAAgE,EAChE,aAA4B,EAC5B,WAAwB,EACxB,YAA0B,EAC1B,gBAAkC,EAClC,iBAAoC,EAEpC,aAA4B,EAG5B,IAA6B,EAC7B,SAAoB;QAEzB,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAf/K,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,gCAA2B,GAA3B,2BAA2B,CAAqC;QAChE,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAAyB;QAC7B,cAAS,GAAT,SAAS,CAAW;IAG7B,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,YAAiB,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,KAAK,EAAE;gBACH,IAAI,EAAE,IAAI;aACb;YACD,SAAS,EAAE,SAAS;SACvB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,YAAY,CAAC,IAAY;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;CACJ,CAAA;AAnCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6CAAoB,CAAC,CAAC,CAAA;IAS9C,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCARS,6CAAoB;QACnB,+CAAqB;QACf,6EAAmC;QACjD,sBAAa;QACf,0BAAW;QACV,4BAAY;QACR,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAGtB,mDAAuB;QAClB,gBAAS;GAhBpB,oBAAoB,CAmChC","sourcesContent":["import { forwardRef, Inject, Injectable } from '@nestjs/common';\n\nimport { ConfigService } from '@nestjs/config';\nimport { DiscoveryService, ModuleRef } from '@nestjs/core';\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EmailTemplateRepository } from 'src/repository/email-template.repository';\nimport { EntityManager } from 'typeorm';\nimport { EmailTemplate } from '../entities/email-template.entity';\nimport { CrudHelperService } from './crud-helper.service';\nimport { CRUDService } from './crud.service';\nimport { FileService } from './file.service';\nimport { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';\nimport { MediaService } from './media.service';\nimport { ModelMetadataService } from './model-metadata.service';\nimport { ModuleMetadataService } from './module-metadata.service';\n\n@Injectable()\nexport class EmailTemplateService extends CRUDService<EmailTemplate>{\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly mediaStorageProviderService: MediaStorageProviderMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly mediaService: MediaService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(EmailTemplate, 'default')\n // readonly repo: Repository<EmailTemplate>,\n readonly repo: EmailTemplateRepository,\n readonly moduleRef: ModuleRef,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'emailTemplate', 'app-builder', moduleRef);\n }\n async findOneByName(name: string, relations: any = {}) {\n const entity = await this.repo.findOne({\n where: {\n name: name,\n },\n relations: relations,\n });\n return entity;\n }\n async removeByName(name: string) {\n const entity = await this.findOneByName(name);\n if (entity) {\n return await this.repo.remove(entity);\n }\n }\n}\n"]}
@@ -8,9 +8,20 @@ export interface ExcelReadResult {
8
8
  headers: string[];
9
9
  data: Record<string, any>[];
10
10
  }
11
+ export interface ExcelReadAllResult {
12
+ headers: string[];
13
+ rows: Record<string, any>[];
14
+ }
11
15
  export declare class ExcelService {
12
16
  private logger;
13
17
  createExcelStream(getDataRecords: (chunkIndex: number, chunkSize: number) => Promise<any[]>, chunkSize?: number, headers?: string[]): Promise<Readable>;
14
18
  readExcelInPagesFromStream(stream: Readable, options?: ExcelReadOptions): AsyncGenerator<ExcelReadResult>;
19
+ private cleanString;
20
+ private normalizeCellValue;
21
+ readExcelFromStreamNonStreaming(stream: Readable, options?: ExcelReadOptions & {
22
+ worksheetIndex?: number;
23
+ maxRows?: number;
24
+ }): Promise<ExcelReadAllResult>;
25
+ parseAndValidateDate(value: string): Date | null;
15
26
  }
16
27
  //# sourceMappingURL=excel.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"excel.service.d.ts","sourceRoot":"","sources":["../../src/services/excel.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAG/C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAID,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAC7B;AAED,qBACa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAiC;IAElC,iBAAiB,CAC5B,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,EACzE,SAAS,GAAE,MAAY,EACvB,OAAO,GAAE,MAAM,EAAO,GACrB,OAAO,CAAC,QAAQ,CAAC;IAuEN,0BAA0B,CACtC,MAAM,EAAE,QAAQ,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,cAAc,CAAC,eAAe,CAAC;CA4DnC"}
1
+ {"version":3,"file":"excel.service.d.ts","sourceRoot":"","sources":["../../src/services/excel.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAID,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAC7B;AAED,qBACa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAiC;IAElC,iBAAiB,CAC5B,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,EACzE,SAAS,GAAE,MAAY,EACvB,OAAO,GAAE,MAAM,EAAO,GACrB,OAAO,CAAC,QAAQ,CAAC;IAuEN,0BAA0B,CACtC,MAAM,EAAE,QAAQ,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,cAAc,CAAC,eAAe,CAAC;IA4DlC,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,kBAAkB;IA8Cb,+BAA+B,CAC1C,MAAM,EAAE,QAAQ,EAChB,OAAO,CAAC,EAAE,gBAAgB,GAAG;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACzE,OAAO,CAAC,kBAAkB,CAAC;IAmFvB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAIxD"}
@@ -44,6 +44,7 @@ exports.ExcelService = void 0;
44
44
  const common_1 = require("@nestjs/common");
45
45
  const ExcelJS = __importStar(require("exceljs"));
46
46
  const error_messages_1 = require("../constants/error-messages");
47
+ const date_helper_1 = require("../helpers/date.helper");
47
48
  const stream_1 = require("stream");
48
49
  const DEFAULT_PAGE_SIZE = 100;
49
50
  let ExcelService = ExcelService_1 = class ExcelService {
@@ -151,6 +152,109 @@ let ExcelService = ExcelService_1 = class ExcelService {
151
152
  yield { headers, data: [] };
152
153
  }
153
154
  }
155
+ cleanString(value) {
156
+ return (value === null || value === undefined ? '' : String(value))
157
+ .replace(/\uFEFF/g, '')
158
+ .replace(/\u00A0/g, ' ')
159
+ .replace(/\s+/g, ' ')
160
+ .trim();
161
+ }
162
+ normalizeCellValue(value, sharedStrings) {
163
+ if (value === undefined || value === null)
164
+ return null;
165
+ if (typeof value === 'object' && value && 'sharedString' in value) {
166
+ const idx = value.sharedString;
167
+ const resolved = sharedStrings?.[idx];
168
+ if (resolved === undefined || resolved === null)
169
+ return null;
170
+ if (typeof resolved === 'string')
171
+ return resolved;
172
+ if (typeof resolved === 'object') {
173
+ if ('text' in resolved && typeof resolved.text === 'string')
174
+ return resolved.text;
175
+ if ('richText' in resolved && Array.isArray(resolved.richText)) {
176
+ return resolved.richText.map((item) => item?.text ?? '').join('');
177
+ }
178
+ if ('value' in resolved)
179
+ return resolved.value;
180
+ }
181
+ return resolved;
182
+ }
183
+ if (typeof value === 'object' && value) {
184
+ if ('text' in value && typeof value.text === 'string')
185
+ return value.text;
186
+ if ('richText' in value && Array.isArray(value.richText)) {
187
+ return value.richText.map((item) => item?.text ?? '').join('');
188
+ }
189
+ if ('result' in value)
190
+ return value.result;
191
+ if ('formula' in value)
192
+ return value.formula;
193
+ if ('hyperlink' in value && typeof value.hyperlink === 'string') {
194
+ return value.text ?? value.hyperlink;
195
+ }
196
+ if ('value' in value)
197
+ return this.normalizeCellValue(value.value, sharedStrings);
198
+ }
199
+ return value;
200
+ }
201
+ async readExcelFromStreamNonStreaming(stream, options) {
202
+ const { hasHeaderRow = true, providedHeaders = [], worksheetIndex = 0, maxRows, } = options || {};
203
+ const chunks = [];
204
+ for await (const chunk of stream) {
205
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
206
+ }
207
+ const buffer = Buffer.concat(chunks);
208
+ const workbook = new ExcelJS.Workbook();
209
+ await workbook.xlsx.load(buffer);
210
+ const worksheet = workbook.worksheets?.[worksheetIndex];
211
+ if (!worksheet) {
212
+ return { headers: [], rows: [] };
213
+ }
214
+ let headers = [];
215
+ const firstRow = worksheet.getRow(1);
216
+ const firstRowValues = Array.isArray(firstRow.values) ? firstRow.values.slice(1) : [];
217
+ const normalizeNonStreamingCell = (v) => {
218
+ return this.normalizeCellValue(v);
219
+ };
220
+ if (hasHeaderRow) {
221
+ headers = firstRowValues.map((v) => this.cleanString(normalizeNonStreamingCell(v)));
222
+ }
223
+ else if (providedHeaders.length) {
224
+ headers = providedHeaders.map((h) => this.cleanString(h));
225
+ }
226
+ else {
227
+ headers = firstRowValues.map((_, idx) => `${idx}`);
228
+ }
229
+ if (hasHeaderRow && headers.length > 0 && headers.every((h) => !h)) {
230
+ this.logger.warn(`ExcelService.readExcelFromStreamNonStreaming: header row appears blank`);
231
+ }
232
+ const rows = [];
233
+ const startRowNumber = hasHeaderRow ? 2 : 1;
234
+ const lastRowNumber = worksheet.rowCount || 0;
235
+ for (let r = startRowNumber; r <= lastRowNumber; r++) {
236
+ if (maxRows && rows.length >= maxRows)
237
+ break;
238
+ const row = worksheet.getRow(r);
239
+ const rawValues = Array.isArray(row.values) ? row.values.slice(1) : [];
240
+ const values = rawValues.map((v) => normalizeNonStreamingCell(v));
241
+ while (values.length < headers.length)
242
+ values.push(null);
243
+ if (values.length > headers.length)
244
+ values.length = headers.length;
245
+ const record = headers.reduce((acc, key, i) => {
246
+ acc[key] = values[i] ?? null;
247
+ return acc;
248
+ }, {});
249
+ if (Object.values(record).every((v) => v === null || this.cleanString(v) === ''))
250
+ continue;
251
+ rows.push(record);
252
+ }
253
+ return { headers, rows };
254
+ }
255
+ parseAndValidateDate(value) {
256
+ return (0, date_helper_1.parseFlexibleDate)(value);
257
+ }
154
258
  };
155
259
  exports.ExcelService = ExcelService;
156
260
  exports.ExcelService = ExcelService = ExcelService_1 = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"excel.service.js","sourceRoot":"","sources":["../../src/services/excel.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport * as ExcelJS from 'exceljs';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { PassThrough, Readable } from 'stream';\n\n\nexport interface ExcelReadOptions {\n pageSize?: number; // Number of records per page\n hasHeaderRow?: boolean; // Whether the first row contains headers\n providedHeaders?: string[]; // Custom headers if hasHeaderRow is false\n}\n\nconst DEFAULT_PAGE_SIZE = 100; // Default page size if not provided\n\nexport interface ExcelReadResult {\n headers: string[]; // Headers of the Excel file\n data: Record<string, any>[]; // Data records in the current page\n}\n\n@Injectable()\nexport class ExcelService {\n private logger = new Logger(ExcelService.name);\n\n public async createExcelStream(\n getDataRecords: (chunkIndex: number, chunkSize: number) => Promise<any[]>,\n chunkSize: number = 100,\n headers: string[] = []\n ): Promise<Readable> {\n // Validations\n // If neither headers nor data records function is provided, throw an error\n if (headers.length === 0 && typeof getDataRecords !== 'function') {\n throw new Error(ERROR_MESSAGES.MISSING_HEADERS_OR_FUNCTION);\n }\n\n // If data records function is provided, chunkSize must be greater than 0\n if (getDataRecords && chunkSize <= 0) {\n throw new Error(ERROR_MESSAGES.INVALID_CHUNK_SIZE);\n }\n\n const passThrough = new PassThrough(); // Create streaming pipe\n try {\n const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ stream: passThrough });\n const worksheet = workbook.addWorksheet('Data');\n\n // If headers are provided, use them;\n let isHeaderWritten = false;\n if (headers.length > 0) {\n worksheet.columns = headers.map((header) => ({\n header: header, // Convert header names to uppercase\n key: header,\n width: 20, // Set column width\n }));\n isHeaderWritten = true; // Mark headers as written\n }\n\n // ✅ If no data loader provided, write only headers and finish\n if (typeof getDataRecords !== 'function') {\n // worksheet.addRow(\n // headers.reduce((acc, header) => ({ ...acc, [header]: '' }), {})\n // ).commit(); // Write a dummy record with headers\n\n workbook.commit();\n return passThrough;\n }\n\n // Write the data records in chunks\n let chunkIndex = 0;\n while (true) {\n const records = await getDataRecords(chunkIndex, chunkSize); // Fetch chunked data\n if (records.length === 0) break; // Stop if no more records\n\n if (!isHeaderWritten) { // Falback because without columns being set, ExcelJS won't write data correctly\n worksheet.columns = Object.keys(records[0]).map((key) => ({\n header: key.toUpperCase(),\n key: key,\n width: 20,\n }));\n isHeaderWritten = true;\n }\n\n records.forEach((item) => {\n worksheet.addRow(item).commit(); // Commit each row immediately\n });\n\n chunkIndex++; // Fetch next chunk\n this.logger.debug(`✅ Chunk ${chunkIndex} written to Excel`);\n }\n\n workbook.commit();\n // passThrough.end(); // ✅ Properly close the stream\n } catch (error) {\n this.logger.error(`❌ Error writing Excel: ${error.message}`);\n passThrough.destroy(error); // Destroy stream\n throw error;\n }\n return passThrough; // Return streaming response\n }\n\n public async *readExcelInPagesFromStream(\n stream: Readable,\n options?: ExcelReadOptions\n ): AsyncGenerator<ExcelReadResult> {\n const { pageSize = DEFAULT_PAGE_SIZE, hasHeaderRow = true, providedHeaders = [] } = options || {};\n const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader(stream, {});\n\n let headers: string[] = [];\n let page: Record<string, any>[] = [];\n let isFirstRow = true;\n let hasYieldedData = false;\n\n for await (const worksheet of workbookReader) {\n for await (const row of worksheet) {\n const values = Array.isArray(row.values) ? row.values.slice(1) : [];\n\n if (isFirstRow) {\n isFirstRow = false;\n\n if (hasHeaderRow) {\n headers = values.map(v => v?.toString().trim() || '');\n continue;\n } else if (providedHeaders.length) {\n headers = providedHeaders;\n } else {\n headers = values.map((_, idx) => `${idx}`);\n }\n }\n\n while (values.length < headers.length) values.push(null);\n if (values.length > headers.length) values.length = headers.length;\n\n const record = headers.reduce((acc, key, i) => {\n acc[key] = values[i] ?? null;\n return acc;\n }, {} as Record<string, any>);\n\n if (Object.values(record).every(v => v === null || v === '')) continue;\n\n page.push(record);\n\n if (page.length === pageSize) {\n yield { headers, data: page };\n hasYieldedData = true;\n page = [];\n }\n }\n\n // Optional: break if only processing first worksheet\n // break;\n }\n\n if (page.length > 0) {\n yield { headers, data: page };\n hasYieldedData = true;\n }\n\n // ✅ Yield headers with empty data if only headers were found\n if (!hasYieldedData && headers.length > 0) {\n yield { headers, data: [] };\n }\n }\n\n}"]}
1
+ {"version":3,"file":"excel.service.js","sourceRoot":"","sources":["../../src/services/excel.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport * as ExcelJS from 'exceljs';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { parseFlexibleDate } from 'src/helpers/date.helper';\nimport { PassThrough, Readable } from 'stream';\n\nexport interface ExcelReadOptions {\n pageSize?: number; // Number of records per page\n hasHeaderRow?: boolean; // Whether the first row contains headers\n providedHeaders?: string[]; // Custom headers if hasHeaderRow is false\n}\n\nconst DEFAULT_PAGE_SIZE = 100; // Default page size if not provided\n\nexport interface ExcelReadResult {\n headers: string[]; // Headers of the Excel file\n data: Record<string, any>[]; // Data records in the current page\n}\n\nexport interface ExcelReadAllResult {\n headers: string[];\n rows: Record<string, any>[];\n}\n\n@Injectable()\nexport class ExcelService {\n private logger = new Logger(ExcelService.name);\n\n public async createExcelStream(\n getDataRecords: (chunkIndex: number, chunkSize: number) => Promise<any[]>,\n chunkSize: number = 100,\n headers: string[] = []\n ): Promise<Readable> {\n // Validations\n // If neither headers nor data records function is provided, throw an error\n if (headers.length === 0 && typeof getDataRecords !== 'function') {\n throw new Error(ERROR_MESSAGES.MISSING_HEADERS_OR_FUNCTION);\n }\n\n // If data records function is provided, chunkSize must be greater than 0\n if (getDataRecords && chunkSize <= 0) {\n throw new Error(ERROR_MESSAGES.INVALID_CHUNK_SIZE);\n }\n\n const passThrough = new PassThrough(); // Create streaming pipe\n try {\n const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ stream: passThrough });\n const worksheet = workbook.addWorksheet('Data');\n\n // If headers are provided, use them;\n let isHeaderWritten = false;\n if (headers.length > 0) {\n worksheet.columns = headers.map((header) => ({\n header: header, // Convert header names to uppercase\n key: header,\n width: 20, // Set column width\n }));\n isHeaderWritten = true; // Mark headers as written\n }\n\n // ✅ If no data loader provided, write only headers and finish\n if (typeof getDataRecords !== 'function') {\n // worksheet.addRow(\n // headers.reduce((acc, header) => ({ ...acc, [header]: '' }), {})\n // ).commit(); // Write a dummy record with headers\n\n workbook.commit();\n return passThrough;\n }\n\n // Write the data records in chunks\n let chunkIndex = 0;\n while (true) {\n const records = await getDataRecords(chunkIndex, chunkSize); // Fetch chunked data\n if (records.length === 0) break; // Stop if no more records\n\n if (!isHeaderWritten) { // Falback because without columns being set, ExcelJS won't write data correctly\n worksheet.columns = Object.keys(records[0]).map((key) => ({\n header: key.toUpperCase(),\n key: key,\n width: 20,\n }));\n isHeaderWritten = true;\n }\n\n records.forEach((item) => {\n worksheet.addRow(item).commit(); // Commit each row immediately\n });\n\n chunkIndex++; // Fetch next chunk\n this.logger.debug(`✅ Chunk ${chunkIndex} written to Excel`);\n }\n\n workbook.commit();\n // passThrough.end(); // ✅ Properly close the stream\n } catch (error) {\n this.logger.error(`❌ Error writing Excel: ${error.message}`);\n passThrough.destroy(error); // Destroy stream\n throw error;\n }\n return passThrough; // Return streaming response\n }\n\n public async *readExcelInPagesFromStream(\n stream: Readable,\n options?: ExcelReadOptions\n ): AsyncGenerator<ExcelReadResult> {\n const { pageSize = DEFAULT_PAGE_SIZE, hasHeaderRow = true, providedHeaders = [] } = options || {};\n const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader(stream, {});\n\n let headers: string[] = [];\n let page: Record<string, any>[] = [];\n let isFirstRow = true;\n let hasYieldedData = false;\n\n for await (const worksheet of workbookReader) {\n for await (const row of worksheet) {\n const values = Array.isArray(row.values) ? row.values.slice(1) : [];\n\n if (isFirstRow) {\n isFirstRow = false;\n\n if (hasHeaderRow) {\n headers = values.map(v => v?.toString().trim() || '');\n continue;\n } else if (providedHeaders.length) {\n headers = providedHeaders;\n } else {\n headers = values.map((_, idx) => `${idx}`);\n }\n }\n\n while (values.length < headers.length) values.push(null);\n if (values.length > headers.length) values.length = headers.length;\n\n const record = headers.reduce((acc, key, i) => {\n acc[key] = values[i] ?? null;\n return acc;\n }, {} as Record<string, any>);\n\n if (Object.values(record).every(v => v === null || v === '')) continue;\n\n page.push(record);\n\n if (page.length === pageSize) {\n yield { headers, data: page };\n hasYieldedData = true;\n page = [];\n }\n }\n\n // Optional: break if only processing first worksheet\n // break;\n }\n\n if (page.length > 0) {\n yield { headers, data: page };\n hasYieldedData = true;\n }\n\n // ✅ Yield headers with empty data if only headers were found\n if (!hasYieldedData && headers.length > 0) {\n yield { headers, data: [] };\n }\n }\n\n private cleanString(value: any): string {\n return (value === null || value === undefined ? '' : String(value))\n .replace(/\\uFEFF/g, '') // BOM\n .replace(/\\u00A0/g, ' ') // NBSP\n .replace(/\\s+/g, ' ')\n .trim();\n }\n\n private normalizeCellValue(value: any, sharedStrings?: any[]): any {\n if (value === undefined || value === null) return null;\n\n // ExcelJS streaming shared string ref: { sharedString: number }\n if (typeof value === 'object' && value && 'sharedString' in value) {\n const idx = (value as any).sharedString;\n const resolved = sharedStrings?.[idx];\n // sharedStrings may store objects or plain strings depending on ExcelJS internals\n if (resolved === undefined || resolved === null) return null;\n if (typeof resolved === 'string') return resolved;\n if (typeof resolved === 'object') {\n if ('text' in resolved && typeof (resolved as any).text === 'string') return (resolved as any).text;\n if ('richText' in resolved && Array.isArray((resolved as any).richText)) {\n return (resolved as any).richText.map((item: any) => item?.text ?? '').join('');\n }\n if ('value' in resolved) return (resolved as any).value;\n }\n return resolved;\n }\n\n // ExcelJS can return rich objects for styled cells; unwrap to plain text/primitive\n if (typeof value === 'object' && value) {\n // Plain rich cell: { text: '...' }\n if ('text' in value && typeof (value as any).text === 'string') return (value as any).text;\n\n // Rich text: { richText: [{text:'a'}, ...] }\n if ('richText' in value && Array.isArray((value as any).richText)) {\n return (value as any).richText.map((item: any) => item?.text ?? '').join('');\n }\n\n // Formula cells: { formula: '...', result: ... }\n if ('result' in value) return (value as any).result;\n if ('formula' in value) return (value as any).formula;\n\n // Hyperlinks: { text: '...', hyperlink: '...' }\n if ('hyperlink' in value && typeof (value as any).hyperlink === 'string') {\n return (value as any).text ?? (value as any).hyperlink;\n }\n\n // Sometimes primitive nested under .value\n if ('value' in value) return this.normalizeCellValue((value as any).value, sharedStrings);\n }\n\n return value;\n }\n\n public async readExcelFromStreamNonStreaming(\n stream: Readable,\n options?: ExcelReadOptions & { worksheetIndex?: number; maxRows?: number }\n ): Promise<ExcelReadAllResult> {\n const {\n hasHeaderRow = true,\n providedHeaders = [],\n worksheetIndex = 0, // 0-based\n maxRows,\n } = options || {};\n\n // 1) Read entire stream into a Buffer\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n const buffer = Buffer.concat(chunks);\n\n // 2) Load workbook (non-streaming)\n const workbook = new ExcelJS.Workbook();\n // @ts-ignore\n await workbook.xlsx.load(buffer);\n\n const worksheet = workbook.worksheets?.[worksheetIndex];\n if (!worksheet) {\n return { headers: [], rows: [] };\n }\n\n // 3) Determine headers\n let headers: string[] = [];\n\n const firstRow = worksheet.getRow(1);\n const firstRowValues = Array.isArray(firstRow.values) ? (firstRow.values as any[]).slice(1) : [];\n\n const normalizeNonStreamingCell = (v: any) => {\n // In non-streaming ExcelJS, cell.value can be:\n // - string/number/boolean/date\n // - {richText}, {text}, {hyperlink}, {formula,result}, etc.\n // We'll reuse your normalizeCellValue but without sharedStrings\n return this.normalizeCellValue(v);\n };\n\n if (hasHeaderRow) {\n headers = firstRowValues.map((v) => this.cleanString(normalizeNonStreamingCell(v)));\n } else if (providedHeaders.length) {\n headers = providedHeaders.map((h) => this.cleanString(h));\n } else {\n headers = firstRowValues.map((_, idx) => `${idx}`);\n }\n\n // If headers are all blank and hasHeaderRow=true, treat as no headers (avoid mapping everything to \"\")\n if (hasHeaderRow && headers.length > 0 && headers.every((h) => !h)) {\n this.logger.warn(`ExcelService.readExcelFromStreamNonStreaming: header row appears blank`);\n }\n\n // 4) Read rows\n const rows: Record<string, any>[] = [];\n\n const startRowNumber = hasHeaderRow ? 2 : 1;\n const lastRowNumber = worksheet.rowCount || 0;\n\n for (let r = startRowNumber; r <= lastRowNumber; r++) {\n if (maxRows && rows.length >= maxRows) break;\n\n const row = worksheet.getRow(r);\n const rawValues = Array.isArray(row.values) ? (row.values as any[]).slice(1) : [];\n const values = rawValues.map((v) => normalizeNonStreamingCell(v));\n\n // Align row width to header width\n while (values.length < headers.length) values.push(null);\n if (values.length > headers.length) values.length = headers.length;\n\n const record = headers.reduce((acc, key, i) => {\n acc[key] = values[i] ?? null;\n return acc;\n }, {} as Record<string, any>);\n\n // Skip fully empty rows\n if (Object.values(record).every((v) => v === null || this.cleanString(v) === '')) continue;\n\n rows.push(record);\n }\n\n return { headers, rows };\n }\n\n public parseAndValidateDate(value: string): Date | null {\n return parseFlexibleDate(value);\n }\n\n}"]}
@@ -12,17 +12,19 @@ import { ModelMetadata } from '../entities/model-metadata.entity';
12
12
  import { ISelectionProviderValues } from '../interfaces';
13
13
  import { CrudHelperService } from './crud-helper.service';
14
14
  import { ResolveS3UrlDto } from 'src/dtos/resolve-s3-url.dto';
15
+ import { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';
15
16
  import { ConfigService } from '@nestjs/config';
16
17
  import { FileService } from './file.service';
17
18
  export declare class FieldMetadataService implements OnApplicationBootstrap {
18
19
  private readonly fieldMetadataRepo;
19
20
  private readonly configService;
20
21
  private readonly fileService;
22
+ private readonly mediaStorageProviderMetadataRepository;
21
23
  private readonly dataSource;
22
24
  private readonly solidRegistry;
23
25
  private readonly crudHelperService;
24
26
  private readonly moduleMetadataHelperService;
25
- constructor(fieldMetadataRepo: FieldMetadataRepository, configService: ConfigService, fileService: FileService, dataSource: DataSource, solidRegistry: SolidRegistry, crudHelperService: CrudHelperService, moduleMetadataHelperService: ModuleMetadataHelperService);
27
+ constructor(fieldMetadataRepo: FieldMetadataRepository, configService: ConfigService, fileService: FileService, mediaStorageProviderMetadataRepository: MediaStorageProviderMetadataRepository, dataSource: DataSource, solidRegistry: SolidRegistry, crudHelperService: CrudHelperService, moduleMetadataHelperService: ModuleMetadataHelperService);
26
28
  private logger;
27
29
  onApplicationBootstrap(): void;
28
30
  loadAndRegisterComputedFieldsDetails(): Promise<void>;
@@ -417,5 +419,6 @@ export declare class FieldMetadataService implements OnApplicationBootstrap {
417
419
  resolveS3Url(resolveS3UrlDto: ResolveS3UrlDto): Promise<{
418
420
  url: string;
419
421
  }>;
422
+ private normalizeS3Key;
420
423
  }
421
424
  //# sourceMappingURL=field-metadata.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"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"}
@@ -63,13 +63,15 @@ const model_metadata_entity_1 = require("../entities/model-metadata.entity");
63
63
  const crud_helper_service_1 = require("./crud-helper.service");
64
64
  const error_messages_1 = require("../constants/error-messages");
65
65
  const qs_1 = __importDefault(require("qs"));
66
+ const media_storage_provider_metadata_repository_1 = require("../repository/media-storage-provider-metadata.repository");
66
67
  const config_1 = require("@nestjs/config");
67
68
  const file_service_1 = require("./file.service");
68
69
  let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
69
- constructor(fieldMetadataRepo, configService, fileService, dataSource, solidRegistry, crudHelperService, moduleMetadataHelperService) {
70
+ constructor(fieldMetadataRepo, configService, fileService, mediaStorageProviderMetadataRepository, dataSource, solidRegistry, crudHelperService, moduleMetadataHelperService) {
70
71
  this.fieldMetadataRepo = fieldMetadataRepo;
71
72
  this.configService = configService;
72
73
  this.fileService = fileService;
74
+ this.mediaStorageProviderMetadataRepository = mediaStorageProviderMetadataRepository;
73
75
  this.dataSource = dataSource;
74
76
  this.solidRegistry = solidRegistry;
75
77
  this.crudHelperService = crudHelperService;
@@ -90,6 +92,7 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
90
92
  computedFieldTriggerConfig: field.computedFieldTriggerConfig ?? [],
91
93
  computedFieldValueProviderName: field.computedFieldValueProvider,
92
94
  computedFieldValueProviderCtxt: field.computedFieldValueProviderCtxt ? JSON.parse(field.computedFieldValueProviderCtxt) : {},
95
+ eventContext: {}
93
96
  };
94
97
  });
95
98
  this.solidRegistry.registerComputedFieldMetadata(computedFieldMetadata);
@@ -670,7 +673,8 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
670
673
  "encrypt",
671
674
  "encryptionType",
672
675
  "decryptWhen",
673
- "columnName"
676
+ "columnName",
677
+ "enableAuditTracking"
674
678
  ];
675
679
  case create_field_metadata_dto_1.SolidFieldType.richText:
676
680
  return [
@@ -956,7 +960,8 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
956
960
  "encryptionType",
957
961
  "decryptWhen",
958
962
  "columnName",
959
- "isUserKey"
963
+ "isUserKey",
964
+ "enableAuditTracking"
960
965
  ];
961
966
  case create_field_metadata_dto_1.SolidFieldType.uuid:
962
967
  return [
@@ -1096,48 +1101,48 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
1096
1101
  return fieldObject;
1097
1102
  }
1098
1103
  async resolveS3Url(resolveS3UrlDto) {
1099
- const { modelName, fieldName, fieldValue, s3KeyFieldName } = resolveS3UrlDto;
1100
- const modelRepo = this.dataSource.getRepository(model_metadata_entity_1.ModelMetadata);
1101
- const model = await modelRepo.findOne({
1102
- where: { singularName: modelName },
1103
- relations: ['fields']
1104
- });
1105
- if (!model) {
1106
- throw new common_1.NotFoundException(`Model ${modelName} not found`);
1107
- }
1108
- const filterFieldMeta = model.fields.find(f => f.name === fieldName);
1109
- if (!filterFieldMeta) {
1110
- throw new common_1.NotFoundException(`Field ${fieldName} not found in model ${modelName}`);
1111
- }
1112
- const entityRepo = this.dataSource.getRepository(model.singularName);
1113
- const record = await entityRepo.findOne({
1114
- where: { [fieldName]: fieldValue }
1115
- });
1116
- if (!record) {
1117
- throw new common_1.NotFoundException(`${modelName} record not found for ${fieldName}="${fieldValue}"`);
1118
- }
1119
- const s3Key = record[s3KeyFieldName];
1120
- if (!s3Key) {
1121
- throw new common_1.NotFoundException(`Field "${s3KeyFieldName}" has no value in ${modelName}.${fieldName}="${fieldValue}"`);
1122
- }
1123
1104
  let url = "";
1105
+ const normalizedKey = this.normalizeS3Key(resolveS3UrlDto.s3Key);
1106
+ let resolvedBucketName = resolveS3UrlDto.bucketName;
1107
+ if (resolveS3UrlDto.mediaStorageProviderUserKey) {
1108
+ const mediaStorageProvider = await this.mediaStorageProviderMetadataRepository.findOne({
1109
+ where: {
1110
+ name: resolveS3UrlDto.mediaStorageProviderUserKey
1111
+ }
1112
+ });
1113
+ if (!mediaStorageProvider) {
1114
+ throw new common_1.NotFoundException(`MediaStorageProviderMetadata with user key ${resolveS3UrlDto.mediaStorageProviderUserKey} not found`);
1115
+ }
1116
+ resolvedBucketName = mediaStorageProvider.bucketName;
1117
+ }
1118
+ this.logger.debug(`INSIDE::resolveS3Url:: resolvedBucketName: ${resolvedBucketName}`);
1124
1119
  if (resolveS3UrlDto.isPrivate == "true") {
1125
1120
  const expiryInSeconds = 60 * 60;
1126
- url = await this.fileService.getSignedUrl(s3Key, expiryInSeconds, resolveS3UrlDto.bucketName);
1121
+ url = await this.fileService.getSignedUrl(normalizedKey, expiryInSeconds, resolvedBucketName);
1127
1122
  }
1128
1123
  else {
1129
- url = `https://${resolveS3UrlDto.bucketName}.s3.${this.configService.get('S3_AWS_REGION_NAME')}.amazonaws.com/${s3Key}`;
1124
+ url = `https://${resolvedBucketName}.s3.${this.configService.get('S3_AWS_REGION_NAME')}.amazonaws.com/${normalizedKey}`;
1130
1125
  }
1131
1126
  return { url: url };
1132
1127
  }
1128
+ normalizeS3Key(input) {
1129
+ try {
1130
+ const url = new URL(input);
1131
+ return decodeURIComponent(url.pathname.replace(/^\/+/, ""));
1132
+ }
1133
+ catch {
1134
+ return input;
1135
+ }
1136
+ }
1133
1137
  };
1134
1138
  exports.FieldMetadataService = FieldMetadataService;
1135
1139
  exports.FieldMetadataService = FieldMetadataService = FieldMetadataService_1 = __decorate([
1136
1140
  (0, common_1.Injectable)(),
1137
- __param(3, (0, typeorm_1.InjectDataSource)()),
1141
+ __param(4, (0, typeorm_1.InjectDataSource)()),
1138
1142
  __metadata("design:paramtypes", [field_metadata_repository_1.FieldMetadataRepository,
1139
1143
  config_1.ConfigService,
1140
1144
  file_service_1.FileService,
1145
+ media_storage_provider_metadata_repository_1.MediaStorageProviderMetadataRepository,
1141
1146
  typeorm_2.DataSource,
1142
1147
  solid_registry_1.SolidRegistry,
1143
1148
  crud_helper_service_1.CrudHelperService,