@solidxai/core 0.1.2 → 0.1.5-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/dist/commands/run-tests.command.d.ts +37 -0
  3. package/dist/commands/run-tests.command.d.ts.map +1 -0
  4. package/dist/commands/run-tests.command.js +345 -0
  5. package/dist/commands/run-tests.command.js.map +1 -0
  6. package/dist/commands/test-data.command.d.ts +6 -6
  7. package/dist/commands/test-data.command.d.ts.map +1 -1
  8. package/dist/commands/test-data.command.js +25 -25
  9. package/dist/commands/test-data.command.js.map +1 -1
  10. package/dist/commands/test.command.d.ts +5 -0
  11. package/dist/commands/test.command.d.ts.map +1 -0
  12. package/dist/commands/test.command.js +26 -0
  13. package/dist/commands/test.command.js.map +1 -0
  14. package/dist/constants/error-messages.d.ts +1 -0
  15. package/dist/constants/error-messages.d.ts.map +1 -1
  16. package/dist/constants/error-messages.js +1 -0
  17. package/dist/constants/error-messages.js.map +1 -1
  18. package/dist/constants.d.ts +3 -3
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +12 -12
  21. package/dist/constants.js.map +1 -1
  22. package/dist/controllers/otp-authentication.controller.d.ts +1 -4
  23. package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
  24. package/dist/controllers/otp-authentication.controller.js +1 -1
  25. package/dist/controllers/role-metadata.controller.d.ts +1 -0
  26. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  27. package/dist/controllers/role-metadata.controller.js +15 -0
  28. package/dist/controllers/role-metadata.controller.js.map +1 -1
  29. package/dist/controllers/service.controller.d.ts +0 -9
  30. package/dist/controllers/service.controller.d.ts.map +1 -1
  31. package/dist/controllers/service.controller.js +0 -45
  32. package/dist/controllers/service.controller.js.map +1 -1
  33. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  34. package/dist/dtos/basic-filters.dto.js.map +1 -1
  35. package/dist/dtos/create-email-template.dto.d.ts.map +1 -1
  36. package/dist/dtos/create-email-template.dto.js.map +1 -1
  37. package/dist/dtos/create-list-of-values.dto.d.ts.map +1 -1
  38. package/dist/dtos/create-list-of-values.dto.js.map +1 -1
  39. package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
  40. package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
  41. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  42. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  43. package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
  44. package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
  45. package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
  46. package/dist/dtos/create-security-rule.dto.js.map +1 -1
  47. package/dist/dtos/create-sms-template.dto.d.ts.map +1 -1
  48. package/dist/dtos/create-sms-template.dto.js.map +1 -1
  49. package/dist/dtos/create-user.dto.d.ts +1 -0
  50. package/dist/dtos/create-user.dto.d.ts.map +1 -1
  51. package/dist/dtos/create-user.dto.js +2 -1
  52. package/dist/dtos/create-user.dto.js.map +1 -1
  53. package/dist/dtos/create-view-metadata.dto.d.ts.map +1 -1
  54. package/dist/dtos/create-view-metadata.dto.js.map +1 -1
  55. package/dist/dtos/otp-sign-in.dto.d.ts +1 -1
  56. package/dist/dtos/otp-sign-in.dto.d.ts.map +1 -1
  57. package/dist/dtos/otp-sign-in.dto.js +2 -2
  58. package/dist/dtos/otp-sign-in.dto.js.map +1 -1
  59. package/dist/dtos/otp-sign-up.dto.d.ts +2 -2
  60. package/dist/dtos/otp-sign-up.dto.d.ts.map +1 -1
  61. package/dist/dtos/otp-sign-up.dto.js +2 -2
  62. package/dist/dtos/otp-sign-up.dto.js.map +1 -1
  63. package/dist/dtos/resolve-s3-url.dto.d.ts +2 -5
  64. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
  65. package/dist/dtos/resolve-s3-url.dto.js +1 -13
  66. package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
  67. package/dist/dtos/sign-up.dto.d.ts.map +1 -1
  68. package/dist/dtos/sign-up.dto.js.map +1 -1
  69. package/dist/dtos/update-email-template.dto.d.ts.map +1 -1
  70. package/dist/dtos/update-email-template.dto.js.map +1 -1
  71. package/dist/dtos/update-list-of-values.dto.d.ts.map +1 -1
  72. package/dist/dtos/update-list-of-values.dto.js.map +1 -1
  73. package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
  74. package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
  75. package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
  76. package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
  77. package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
  78. package/dist/dtos/update-security-rule.dto.js.map +1 -1
  79. package/dist/dtos/update-sms-template.dto.d.ts.map +1 -1
  80. package/dist/dtos/update-sms-template.dto.js.map +1 -1
  81. package/dist/dtos/update-view-metadata.dto.d.ts.map +1 -1
  82. package/dist/dtos/update-view-metadata.dto.js.map +1 -1
  83. package/dist/entities/user.entity.d.ts +1 -0
  84. package/dist/entities/user.entity.d.ts.map +1 -1
  85. package/dist/entities/user.entity.js +6 -1
  86. package/dist/entities/user.entity.js.map +1 -1
  87. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -0
  88. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  89. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +33 -23
  90. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  91. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +3 -0
  92. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  93. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +36 -23
  94. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  95. package/dist/helpers/security.helper.js +1 -0
  96. package/dist/helpers/security.helper.js.map +1 -1
  97. package/dist/index.d.ts +3 -4
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +3 -4
  100. package/dist/index.js.map +1 -1
  101. package/dist/repository/solid-base.repository.d.ts +10 -1
  102. package/dist/repository/solid-base.repository.d.ts.map +1 -1
  103. package/dist/repository/solid-base.repository.js +109 -0
  104. package/dist/repository/solid-base.repository.js.map +1 -1
  105. package/dist/seeders/module-metadata-seeder.service.d.ts +2 -0
  106. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  107. package/dist/seeders/module-metadata-seeder.service.js +142 -91
  108. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  109. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  110. package/dist/seeders/module-test-data.service.js +3 -3
  111. package/dist/seeders/module-test-data.service.js.map +1 -1
  112. package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -1
  113. package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
  114. package/dist/seeders/permission-metadata-seeder.service.js +1 -1
  115. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  116. package/dist/seeders/seed-data/solid-core-metadata.json +12 -25
  117. package/dist/services/authentication.service.d.ts +22 -8
  118. package/dist/services/authentication.service.d.ts.map +1 -1
  119. package/dist/services/authentication.service.js +228 -214
  120. package/dist/services/authentication.service.js.map +1 -1
  121. package/dist/services/chatter-message.service.d.ts +2 -0
  122. package/dist/services/chatter-message.service.d.ts.map +1 -1
  123. package/dist/services/chatter-message.service.js +18 -2
  124. package/dist/services/chatter-message.service.js.map +1 -1
  125. package/dist/services/crud-helper.service.d.ts +4 -0
  126. package/dist/services/crud-helper.service.d.ts.map +1 -1
  127. package/dist/services/crud-helper.service.js +66 -32
  128. package/dist/services/crud-helper.service.js.map +1 -1
  129. package/dist/services/crud.service.d.ts.map +1 -1
  130. package/dist/services/crud.service.js +7 -4
  131. package/dist/services/crud.service.js.map +1 -1
  132. package/dist/services/field-metadata.service.d.ts.map +1 -1
  133. package/dist/services/field-metadata.service.js.map +1 -1
  134. package/dist/services/file/disk-file.service.d.ts +0 -2
  135. package/dist/services/file/disk-file.service.d.ts.map +1 -1
  136. package/dist/services/file/disk-file.service.js +7 -16
  137. package/dist/services/file/disk-file.service.js.map +1 -1
  138. package/dist/services/file/index.d.ts +1 -0
  139. package/dist/services/file/index.d.ts.map +1 -1
  140. package/dist/services/file/index.js +1 -0
  141. package/dist/services/file/index.js.map +1 -1
  142. package/dist/services/file/storage-path-builder.d.ts +17 -0
  143. package/dist/services/file/storage-path-builder.d.ts.map +1 -0
  144. package/dist/{seeders/sms-template-seeder.service.js → services/file/storage-path-builder.js} +45 -35
  145. package/dist/services/file/storage-path-builder.js.map +1 -0
  146. package/dist/services/media.service.d.ts +1 -1
  147. package/dist/services/media.service.d.ts.map +1 -1
  148. package/dist/services/media.service.js +45 -6
  149. package/dist/services/media.service.js.map +1 -1
  150. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  151. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  152. package/dist/services/mediaStorageProviders/file-storage-provider.js +46 -7
  153. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  154. package/dist/services/module-metadata.service.d.ts +4 -6
  155. package/dist/services/module-metadata.service.d.ts.map +1 -1
  156. package/dist/services/module-metadata.service.js +16 -14
  157. package/dist/services/module-metadata.service.js.map +1 -1
  158. package/dist/services/queues/common.d.ts +3 -0
  159. package/dist/services/queues/common.d.ts.map +1 -0
  160. package/dist/services/queues/common.js +39 -0
  161. package/dist/services/queues/common.js.map +1 -0
  162. package/dist/services/queues/database-publisher.service.d.ts.map +1 -1
  163. package/dist/services/queues/database-publisher.service.js +3 -1
  164. package/dist/services/queues/database-publisher.service.js.map +1 -1
  165. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  166. package/dist/services/queues/database-subscriber.service.js +5 -2
  167. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  168. package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
  169. package/dist/services/queues/rabbitmq-publisher.service.js +13 -6
  170. package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
  171. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  172. package/dist/services/queues/rabbitmq-subscriber.service.js +9 -5
  173. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  174. package/dist/services/setting.service.d.ts +3 -2
  175. package/dist/services/setting.service.d.ts.map +1 -1
  176. package/dist/services/setting.service.js +7 -4
  177. package/dist/services/setting.service.js.map +1 -1
  178. package/dist/services/settings/default-settings-provider.service.d.ts +24 -2
  179. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  180. package/dist/services/settings/default-settings-provider.service.js +8 -6
  181. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  182. package/dist/solid-core.module.d.ts +3 -1
  183. package/dist/solid-core.module.d.ts.map +1 -1
  184. package/dist/solid-core.module.js +49 -9
  185. package/dist/solid-core.module.js.map +1 -1
  186. package/dist/testing/__examples__/register-example-specs.d.ts +3 -0
  187. package/dist/testing/__examples__/register-example-specs.d.ts.map +1 -0
  188. package/dist/testing/__examples__/register-example-specs.js +8 -0
  189. package/dist/testing/__examples__/register-example-specs.js.map +1 -0
  190. package/dist/testing/__examples__/specs/custom-health.spec.d.ts +17 -0
  191. package/dist/testing/__examples__/specs/custom-health.spec.d.ts.map +1 -0
  192. package/dist/testing/__examples__/specs/custom-health.spec.js +30 -0
  193. package/dist/testing/__examples__/specs/custom-health.spec.js.map +1 -0
  194. package/dist/testing/adapters/api/api-adapter.d.ts +9 -0
  195. package/dist/testing/adapters/api/api-adapter.d.ts.map +1 -0
  196. package/dist/testing/adapters/api/api-adapter.js +76 -0
  197. package/dist/testing/adapters/api/api-adapter.js.map +1 -0
  198. package/dist/testing/adapters/api/api.types.d.ts +14 -0
  199. package/dist/testing/adapters/api/api.types.d.ts.map +1 -0
  200. package/dist/testing/adapters/api/api.types.js +3 -0
  201. package/dist/testing/adapters/api/api.types.js.map +1 -0
  202. package/dist/testing/adapters/ui/playwright-adapter.d.ts +14 -0
  203. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -0
  204. package/dist/testing/adapters/ui/playwright-adapter.js +80 -0
  205. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -0
  206. package/dist/testing/adapters/ui/ui.types.d.ts +5 -0
  207. package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -0
  208. package/dist/testing/adapters/ui/ui.types.js +3 -0
  209. package/dist/testing/adapters/ui/ui.types.js.map +1 -0
  210. package/dist/testing/contracts/runtime-context.types.d.ts +35 -0
  211. package/dist/testing/contracts/runtime-context.types.d.ts.map +1 -0
  212. package/dist/testing/contracts/runtime-context.types.js +3 -0
  213. package/dist/testing/contracts/runtime-context.types.js.map +1 -0
  214. package/dist/testing/contracts/test-spec.types.d.ts +21 -0
  215. package/dist/testing/contracts/test-spec.types.d.ts.map +1 -0
  216. package/dist/testing/contracts/test-spec.types.js +3 -0
  217. package/dist/testing/contracts/test-spec.types.js.map +1 -0
  218. package/dist/testing/contracts/testing-metadata.types.d.ts +41 -0
  219. package/dist/testing/contracts/testing-metadata.types.d.ts.map +1 -0
  220. package/dist/testing/contracts/testing-metadata.types.js +3 -0
  221. package/dist/testing/contracts/testing-metadata.types.js.map +1 -0
  222. package/dist/testing/core/interpolation.d.ts +4 -0
  223. package/dist/testing/core/interpolation.d.ts.map +1 -0
  224. package/dist/testing/core/interpolation.js +180 -0
  225. package/dist/testing/core/interpolation.js.map +1 -0
  226. package/dist/testing/core/normalize-steps.d.ts +7 -0
  227. package/dist/testing/core/normalize-steps.d.ts.map +1 -0
  228. package/dist/testing/core/normalize-steps.js +20 -0
  229. package/dist/testing/core/normalize-steps.js.map +1 -0
  230. package/dist/testing/core/resource-store.d.ts +8 -0
  231. package/dist/testing/core/resource-store.d.ts.map +1 -0
  232. package/dist/testing/core/resource-store.js +41 -0
  233. package/dist/testing/core/resource-store.js.map +1 -0
  234. package/dist/testing/core/spec-registry.d.ts +10 -0
  235. package/dist/testing/core/spec-registry.d.ts.map +1 -0
  236. package/dist/testing/core/spec-registry.js +32 -0
  237. package/dist/testing/core/spec-registry.js.map +1 -0
  238. package/dist/testing/core/step-registry.d.ts +10 -0
  239. package/dist/testing/core/step-registry.d.ts.map +1 -0
  240. package/dist/testing/core/step-registry.js +26 -0
  241. package/dist/testing/core/step-registry.js.map +1 -0
  242. package/dist/testing/core/testing-engine.d.ts +14 -0
  243. package/dist/testing/core/testing-engine.d.ts.map +1 -0
  244. package/dist/testing/core/testing-engine.js +97 -0
  245. package/dist/testing/core/testing-engine.js.map +1 -0
  246. package/dist/testing/core/timeout.d.ts +2 -0
  247. package/dist/testing/core/timeout.d.ts.map +1 -0
  248. package/dist/testing/core/timeout.js +18 -0
  249. package/dist/testing/core/timeout.js.map +1 -0
  250. package/dist/testing/reporter/attachments.d.ts +4 -0
  251. package/dist/testing/reporter/attachments.d.ts.map +1 -0
  252. package/dist/testing/reporter/attachments.js +25 -0
  253. package/dist/testing/reporter/attachments.js.map +1 -0
  254. package/dist/testing/reporter/console-reporter.d.ts +45 -0
  255. package/dist/testing/reporter/console-reporter.d.ts.map +1 -0
  256. package/dist/testing/reporter/console-reporter.js +189 -0
  257. package/dist/testing/reporter/console-reporter.js.map +1 -0
  258. package/dist/testing/reporter/reporter.types.d.ts +37 -0
  259. package/dist/testing/reporter/reporter.types.d.ts.map +1 -0
  260. package/dist/testing/reporter/reporter.types.js +3 -0
  261. package/dist/testing/reporter/reporter.types.js.map +1 -0
  262. package/dist/testing/runner/lifecycle.d.ts +9 -0
  263. package/dist/testing/runner/lifecycle.d.ts.map +1 -0
  264. package/dist/testing/runner/lifecycle.js +33 -0
  265. package/dist/testing/runner/lifecycle.js.map +1 -0
  266. package/dist/testing/runner/run-from-metadata.d.ts +24 -0
  267. package/dist/testing/runner/run-from-metadata.d.ts.map +1 -0
  268. package/dist/testing/runner/run-from-metadata.js +70 -0
  269. package/dist/testing/runner/run-from-metadata.js.map +1 -0
  270. package/dist/testing/runner/scenario-filter.d.ts +9 -0
  271. package/dist/testing/runner/scenario-filter.d.ts.map +1 -0
  272. package/dist/testing/runner/scenario-filter.js +22 -0
  273. package/dist/testing/runner/scenario-filter.js.map +1 -0
  274. package/dist/testing/steps/api/auth.step.d.ts +3 -0
  275. package/dist/testing/steps/api/auth.step.d.ts.map +1 -0
  276. package/dist/testing/steps/api/auth.step.js +38 -0
  277. package/dist/testing/steps/api/auth.step.js.map +1 -0
  278. package/dist/testing/steps/api/index.d.ts +3 -0
  279. package/dist/testing/steps/api/index.d.ts.map +1 -0
  280. package/dist/testing/steps/api/index.js +10 -0
  281. package/dist/testing/steps/api/index.js.map +1 -0
  282. package/dist/testing/steps/api/request.step.d.ts +3 -0
  283. package/dist/testing/steps/api/request.step.d.ts.map +1 -0
  284. package/dist/testing/steps/api/request.step.js +281 -0
  285. package/dist/testing/steps/api/request.step.js.map +1 -0
  286. package/dist/testing/steps/assert/http.step.d.ts +3 -0
  287. package/dist/testing/steps/assert/http.step.d.ts.map +1 -0
  288. package/dist/testing/steps/assert/http.step.js +27 -0
  289. package/dist/testing/steps/assert/http.step.js.map +1 -0
  290. package/dist/testing/steps/assert/index.d.ts +3 -0
  291. package/dist/testing/steps/assert/index.d.ts.map +1 -0
  292. package/dist/testing/steps/assert/index.js +12 -0
  293. package/dist/testing/steps/assert/index.js.map +1 -0
  294. package/dist/testing/steps/assert/jsonpath.step.d.ts +3 -0
  295. package/dist/testing/steps/assert/jsonpath.step.d.ts.map +1 -0
  296. package/dist/testing/steps/assert/jsonpath.step.js +40 -0
  297. package/dist/testing/steps/assert/jsonpath.step.js.map +1 -0
  298. package/dist/testing/steps/assert/primitives.step.d.ts +3 -0
  299. package/dist/testing/steps/assert/primitives.step.d.ts.map +1 -0
  300. package/dist/testing/steps/assert/primitives.step.js +43 -0
  301. package/dist/testing/steps/assert/primitives.step.js.map +1 -0
  302. package/dist/testing/steps/test/index.d.ts +3 -0
  303. package/dist/testing/steps/test/index.d.ts.map +1 -0
  304. package/dist/testing/steps/test/index.js +8 -0
  305. package/dist/testing/steps/test/index.js.map +1 -0
  306. package/dist/testing/steps/test/test-spec.step.d.ts +3 -0
  307. package/dist/testing/steps/test/test-spec.step.d.ts.map +1 -0
  308. package/dist/testing/steps/test/test-spec.step.js +41 -0
  309. package/dist/testing/steps/test/test-spec.step.js.map +1 -0
  310. package/dist/testing/steps/ui/actions.step.d.ts +3 -0
  311. package/dist/testing/steps/ui/actions.step.d.ts.map +1 -0
  312. package/dist/testing/steps/ui/actions.step.js +31 -0
  313. package/dist/testing/steps/ui/actions.step.js.map +1 -0
  314. package/dist/testing/steps/ui/assertions.step.d.ts +3 -0
  315. package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -0
  316. package/dist/testing/steps/ui/assertions.step.js +41 -0
  317. package/dist/testing/steps/ui/assertions.step.js.map +1 -0
  318. package/dist/testing/steps/ui/form.step.d.ts +3 -0
  319. package/dist/testing/steps/ui/form.step.d.ts.map +1 -0
  320. package/dist/testing/steps/ui/form.step.js +34 -0
  321. package/dist/testing/steps/ui/form.step.js.map +1 -0
  322. package/dist/testing/steps/ui/index.d.ts +3 -0
  323. package/dist/testing/steps/ui/index.d.ts.map +1 -0
  324. package/dist/testing/steps/ui/index.js +14 -0
  325. package/dist/testing/steps/ui/index.js.map +1 -0
  326. package/dist/testing/steps/ui/navigation.step.d.ts +3 -0
  327. package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -0
  328. package/dist/testing/steps/ui/navigation.step.js +39 -0
  329. package/dist/testing/steps/ui/navigation.step.js.map +1 -0
  330. package/dist/testing/steps/util/index.d.ts +3 -0
  331. package/dist/testing/steps/util/index.d.ts.map +1 -0
  332. package/dist/testing/steps/util/index.js +12 -0
  333. package/dist/testing/steps/util/index.js.map +1 -0
  334. package/dist/testing/steps/util/log.step.d.ts +3 -0
  335. package/dist/testing/steps/util/log.step.d.ts.map +1 -0
  336. package/dist/testing/steps/util/log.step.js +18 -0
  337. package/dist/testing/steps/util/log.step.js.map +1 -0
  338. package/dist/testing/steps/util/require.step.d.ts +3 -0
  339. package/dist/testing/steps/util/require.step.d.ts.map +1 -0
  340. package/dist/testing/steps/util/require.step.js +16 -0
  341. package/dist/testing/steps/util/require.step.js.map +1 -0
  342. package/dist/testing/steps/util/sleep.step.d.ts +3 -0
  343. package/dist/testing/steps/util/sleep.step.d.ts.map +1 -0
  344. package/dist/testing/steps/util/sleep.step.js +13 -0
  345. package/dist/testing/steps/util/sleep.step.js.map +1 -0
  346. package/docs/test-data-workflow.md +51 -11
  347. package/package.json +10 -2
  348. package/src/commands/run-tests.command.ts +278 -0
  349. package/src/commands/test-data.command.ts +26 -26
  350. package/src/commands/test.command.ts +14 -0
  351. package/src/constants/error-messages.ts +1 -0
  352. package/src/constants.ts +3 -3
  353. package/src/controllers/role-metadata.controller.ts +26 -18
  354. package/src/controllers/service.controller.ts +58 -59
  355. package/src/dtos/basic-filters.dto.ts +0 -2
  356. package/src/dtos/create-email-template.dto.ts +7 -0
  357. package/src/dtos/create-list-of-values.dto.ts +7 -0
  358. package/src/dtos/create-menu-item-metadata.dto.ts +12 -1
  359. package/src/dtos/create-role-metadata.dto.ts +9 -0
  360. package/src/dtos/create-scheduled-job.dto.ts +14 -0
  361. package/src/dtos/create-security-rule.dto.ts +6 -0
  362. package/src/dtos/create-sms-template.dto.ts +6 -0
  363. package/src/dtos/create-user.dto.ts +1 -0
  364. package/src/dtos/create-view-metadata.dto.ts +11 -0
  365. package/src/dtos/otp-sign-in.dto.ts +3 -3
  366. package/src/dtos/otp-sign-up.dto.ts +3 -3
  367. package/src/dtos/resolve-s3-url.dto.ts +2 -12
  368. package/src/dtos/sign-up.dto.ts +0 -2
  369. package/src/dtos/update-email-template.dto.ts +6 -0
  370. package/src/dtos/update-list-of-values.dto.ts +8 -0
  371. package/src/dtos/update-menu-item-metadata.dto.ts +12 -0
  372. package/src/dtos/update-scheduled-job.dto.ts +15 -0
  373. package/src/dtos/update-security-rule.dto.ts +7 -0
  374. package/src/dtos/update-sms-template.dto.ts +32 -32
  375. package/src/dtos/update-view-metadata.dto.ts +12 -0
  376. package/src/entities/user.entity.ts +3 -0
  377. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +43 -32
  378. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +45 -33
  379. package/src/helpers/security.helper.ts +1 -1
  380. package/src/index.ts +3 -4
  381. package/src/repository/solid-base.repository.ts +172 -1
  382. package/src/seeders/module-metadata-seeder.service.ts +191 -150
  383. package/src/seeders/module-test-data.service.ts +5 -3
  384. package/src/seeders/permission-metadata-seeder.service.ts +1 -4
  385. package/src/seeders/seed-data/solid-core-metadata.json +12 -25
  386. package/src/services/authentication.service.ts +268 -266
  387. package/src/services/chatter-message.service.ts +18 -1
  388. package/src/services/crud-helper.service.ts +79 -36
  389. package/src/services/crud.service.ts +10 -4
  390. package/src/services/field-metadata.service.ts +0 -71
  391. package/src/services/file/disk-file.service.ts +8 -18
  392. package/src/services/file/index.ts +1 -0
  393. package/src/services/file/storage-path-builder.ts +56 -0
  394. package/src/services/media.service.ts +13 -7
  395. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +1 -1
  396. package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -8
  397. package/src/services/module-metadata.service.ts +18 -15
  398. package/src/services/queues/common.ts +75 -0
  399. package/src/services/queues/database-publisher.service.ts +4 -1
  400. package/src/services/queues/database-subscriber.service.ts +5 -3
  401. package/src/services/queues/rabbitmq-publisher.service.ts +17 -7
  402. package/src/services/queues/rabbitmq-subscriber.service.ts +9 -5
  403. package/src/services/setting.service.ts +5 -3
  404. package/src/services/settings/default-settings-provider.service.ts +5 -3
  405. package/src/solid-core.module.ts +20 -12
  406. package/src/testing/README.md +364 -0
  407. package/src/testing/__examples__/register-example-specs.ts +6 -0
  408. package/src/testing/__examples__/specs/custom-health.spec.ts +29 -0
  409. package/src/testing/__examples__/testing.sample.json +82 -0
  410. package/src/testing/adapters/api/api-adapter.ts +85 -0
  411. package/src/testing/adapters/api/api.types.ts +15 -0
  412. package/src/testing/adapters/ui/playwright-adapter.ts +54 -0
  413. package/src/testing/adapters/ui/ui.types.ts +4 -0
  414. package/src/testing/contracts/runtime-context.types.ts +36 -0
  415. package/src/testing/contracts/test-spec.types.ts +24 -0
  416. package/src/testing/contracts/testing-metadata.types.ts +46 -0
  417. package/src/testing/core/interpolation.ts +189 -0
  418. package/src/testing/core/normalize-steps.ts +21 -0
  419. package/src/testing/core/resource-store.ts +38 -0
  420. package/src/testing/core/spec-registry.ts +33 -0
  421. package/src/testing/core/step-registry.ts +27 -0
  422. package/src/testing/core/testing-engine.ts +127 -0
  423. package/src/testing/core/timeout.ts +19 -0
  424. package/src/testing/reporter/attachments.ts +25 -0
  425. package/src/testing/reporter/console-reporter.ts +229 -0
  426. package/src/testing/reporter/reporter.types.ts +36 -0
  427. package/src/testing/runner/lifecycle.ts +31 -0
  428. package/src/testing/runner/run-from-metadata.ts +87 -0
  429. package/src/testing/runner/scenario-filter.ts +33 -0
  430. package/src/testing/steps/api/auth.step.ts +66 -0
  431. package/src/testing/steps/api/index.ts +10 -0
  432. package/src/testing/steps/api/request.step.ts +358 -0
  433. package/src/testing/steps/assert/http.step.ts +33 -0
  434. package/src/testing/steps/assert/index.ts +12 -0
  435. package/src/testing/steps/assert/jsonpath.step.ts +50 -0
  436. package/src/testing/steps/assert/primitives.step.ts +69 -0
  437. package/src/testing/steps/test/index.ts +8 -0
  438. package/src/testing/steps/test/test-spec.step.ts +52 -0
  439. package/src/testing/steps/ui/actions.step.ts +36 -0
  440. package/src/testing/steps/ui/assertions.step.ts +54 -0
  441. package/src/testing/steps/ui/form.step.ts +39 -0
  442. package/src/testing/steps/ui/index.ts +12 -0
  443. package/src/testing/steps/ui/navigation.step.ts +53 -0
  444. package/src/testing/steps/util/index.ts +10 -0
  445. package/src/testing/steps/util/log.step.ts +19 -0
  446. package/src/testing/steps/util/require.step.ts +16 -0
  447. package/src/testing/steps/util/sleep.step.ts +15 -0
  448. package/tsconfig.json +35 -25
  449. package/tsconfig.tests.json +14 -0
  450. package/dist/passport-strategies/local.strategy.d.ts +0 -15
  451. package/dist/passport-strategies/local.strategy.d.ts.map +0 -1
  452. package/dist/passport-strategies/local.strategy.js +0 -44
  453. package/dist/passport-strategies/local.strategy.js.map +0 -1
  454. package/dist/seeders/email-template-seeder.service.d.ts +0 -10
  455. package/dist/seeders/email-template-seeder.service.d.ts.map +0 -1
  456. package/dist/seeders/email-template-seeder.service.js +0 -84
  457. package/dist/seeders/email-template-seeder.service.js.map +0 -1
  458. package/dist/seeders/sms-template-seeder.service.d.ts +0 -10
  459. package/dist/seeders/sms-template-seeder.service.d.ts.map +0 -1
  460. package/dist/seeders/sms-template-seeder.service.js.map +0 -1
  461. package/dist/seeders/user-seeder.service.d.ts +0 -10
  462. package/dist/seeders/user-seeder.service.d.ts.map +0 -1
  463. package/dist/seeders/user-seeder.service.js +0 -44
  464. package/dist/seeders/user-seeder.service.js.map +0 -1
  465. package/dist/tsconfig.tsbuildinfo +0 -1
  466. package/src/passport-strategies/local.strategy.ts +0 -28
  467. package/src/seeders/email-template-seeder.service.ts +0 -49
  468. package/src/seeders/sms-template-seeder.service.ts +0 -50
  469. package/src/seeders/user-seeder.service.ts +0 -33
@@ -53,7 +53,6 @@ exports.ModuleMetadataSeederService = void 0;
53
53
  const common_1 = require("@nestjs/common");
54
54
  const fs = __importStar(require("fs"));
55
55
  const path = __importStar(require("path"));
56
- const uuid_1 = require("uuid");
57
56
  const dashboard_repository_1 = require("../repository/dashboard.repository");
58
57
  const security_rule_repository_1 = require("../repository/security-rule.repository");
59
58
  const authentication_service_1 = require("../services/authentication.service");
@@ -120,79 +119,112 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
120
119
  this.enablePruning = false;
121
120
  }
122
121
  async seed(conf) {
123
- this.enablePruning = Boolean(conf?.pruneMetadata);
124
- console.log(this.enablePruning ? '▶ Pruning enabled: metadata not present in JSON will be removed.' : '▶ Pruning disabled: existing metadata will be kept.');
125
- await this.seedGlobalMetadata();
126
- const seedDataFiles = this.seedDataFiles;
127
- this.logger.debug(`Found seed data for modules: ${seedDataFiles.map(s => s.moduleMetadata?.name)}`);
122
+ let currentModule = 'global';
123
+ let currentStep = 'bootstrap';
128
124
  let modulesToSeed = null;
129
- if (conf && Array.isArray(conf.modulesToSeed)) {
130
- modulesToSeed = conf.modulesToSeed;
131
- console.log(`▶ Selective seeding enabled. Modules to seed: ${modulesToSeed.join(', ')}`);
132
- this.logger.log(`Selective seeding enabled. Modules to seed: ${modulesToSeed.join(', ')}`);
133
- }
134
- else {
135
- console.log(`▶ No modulesToSeed provided. Seeding ALL modules.`);
136
- this.logger.log(`No modulesToSeed provided. Seeding ALL modules.`);
137
- }
138
- const filteredSeedDataFiles = modulesToSeed ? seedDataFiles.filter((file) => modulesToSeed.includes(file.moduleMetadata?.name)) : seedDataFiles;
139
- if (filteredSeedDataFiles.length === 0) {
140
- this.logger.warn(`No modules matched the provided modulesToSeed list.`);
141
- return;
125
+ try {
126
+ this.enablePruning = Boolean(conf?.pruneMetadata);
127
+ console.log(this.enablePruning ? '▶ Pruning enabled: metadata not present in JSON will be removed.' : '▶ Pruning disabled: existing metadata will be kept.');
128
+ currentStep = 'seedGlobalMetadata';
129
+ await this.seedGlobalMetadata();
130
+ const seedDataFiles = this.seedDataFiles;
131
+ this.logger.debug(`Found seed data for modules: ${seedDataFiles.map(s => s.moduleMetadata?.name)}`);
132
+ currentStep = 'resolveModulesToSeed';
133
+ if (conf && Array.isArray(conf.modulesToSeed)) {
134
+ modulesToSeed = conf.modulesToSeed;
135
+ console.log(`▶ Selective seeding enabled. Modules to seed: ${modulesToSeed.join(', ')}`);
136
+ this.logger.log(`Selective seeding enabled. Modules to seed: ${modulesToSeed.join(', ')}`);
137
+ }
138
+ else {
139
+ console.log(`▶ No modulesToSeed provided. Seeding ALL modules.`);
140
+ this.logger.log(`No modulesToSeed provided. Seeding ALL modules.`);
141
+ }
142
+ const filteredSeedDataFiles = modulesToSeed ? seedDataFiles.filter((file) => modulesToSeed.includes(file.moduleMetadata?.name)) : seedDataFiles;
143
+ if (filteredSeedDataFiles.length === 0) {
144
+ this.logger.warn(`No modules matched the provided modulesToSeed list.`);
145
+ return;
146
+ }
147
+ for (let i = 0; i < filteredSeedDataFiles.length; i++) {
148
+ const overallMetadata = filteredSeedDataFiles[i];
149
+ const moduleMetadata = overallMetadata.moduleMetadata;
150
+ currentModule = moduleMetadata?.name ?? 'unknown';
151
+ console.log(`▶ Seeding Metadata for Module: ${moduleMetadata.name}`);
152
+ this.logger.log(`Seeding Metadata for Module: ${moduleMetadata.name}`);
153
+ currentStep = 'seedModuleModelFields';
154
+ this.logger.log(`Seeding Module / Model / Fields`);
155
+ const moduleModelFieldCounts = await this.seedModuleModelFields(moduleMetadata);
156
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);
157
+ currentStep = 'seedMediaStorageProviders';
158
+ this.logger.log(`Seeding Media Storage Providers`);
159
+ const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);
160
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);
161
+ currentStep = 'seedRoles';
162
+ this.logger.log(`Seeding Roles`);
163
+ const roleCounts = await this.seedRoles(overallMetadata);
164
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Roles', roleCounts)}`);
165
+ currentStep = 'seedUsers';
166
+ this.logger.log(`Seeding Users`);
167
+ const userCounts = await this.seedUsers(overallMetadata);
168
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Users', userCounts)}`);
169
+ currentStep = 'seedViews';
170
+ this.logger.log(`Seeding Views`);
171
+ const viewCounts = await this.seedViews(overallMetadata);
172
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Views', viewCounts)}`);
173
+ currentStep = 'seedActions';
174
+ this.logger.log(`Seeding Actions`);
175
+ const actionCounts = await this.seedActions(overallMetadata);
176
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Actions', actionCounts)}`);
177
+ currentStep = 'seedMenus';
178
+ this.logger.log(`Seeding Menus`);
179
+ const menuCounts = await this.seedMenus(overallMetadata);
180
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Menus', menuCounts)}`);
181
+ currentStep = 'seedEmailTemplates';
182
+ this.logger.log(`Seeding Email Templates`);
183
+ const emailTemplateCounts = await this.seedEmailTemplates(overallMetadata, moduleMetadata.name);
184
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Email Templates', emailTemplateCounts)}`);
185
+ currentStep = 'seedSmsTemplates';
186
+ this.logger.log(`Seeding Sms Templates`);
187
+ const smsTemplateCounts = await this.seedSmsTemplates(overallMetadata, moduleMetadata.name);
188
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Sms Templates', smsTemplateCounts)}`);
189
+ currentStep = 'seedSecurityRules';
190
+ this.logger.log(`Seeding Security Rules`);
191
+ const securityRuleCounts = await this.seedSecurityRules(overallMetadata);
192
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Security Rules', securityRuleCounts)}`);
193
+ currentStep = 'seedListOfValues';
194
+ this.logger.log(`Seeding List Of Values`);
195
+ const lovCounts = await this.seedListOfValues(moduleMetadata, overallMetadata);
196
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'List Of Values', lovCounts)}`);
197
+ currentStep = 'seedDashboards';
198
+ this.logger.log(`Seeding Dashboards`);
199
+ const dashboardCounts = await this.seedDashboards(moduleMetadata, overallMetadata);
200
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Dashboards', dashboardCounts)}`);
201
+ currentStep = 'seedScheduledJobs';
202
+ this.logger.log(`Seeding Scheduled Jobs`);
203
+ const scheduledJobCounts = await this.seedScheduledJobs(moduleMetadata, overallMetadata);
204
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Scheduled Jobs', scheduledJobCounts)}`);
205
+ currentStep = 'seedSavedFilters';
206
+ this.logger.log(`Seeding Saved Filters`);
207
+ const savedFilterCounts = await this.seedSavedFilters(moduleMetadata, overallMetadata);
208
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Saved Filters', savedFilterCounts)}`);
209
+ currentStep = 'seedModelSequences';
210
+ this.logger.log(`Seeding Model Sequences`);
211
+ const modelSequenceCounts = await this.seedModelSequences(overallMetadata);
212
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Model Sequences', modelSequenceCounts)}`);
213
+ }
214
+ currentModule = 'global';
215
+ currentStep = 'setupDefaultRolesWithPermissions';
216
+ await this.setupDefaultRolesWithPermissions();
217
+ console.log(`✔ Seeding completed.`);
218
+ }
219
+ catch (error) {
220
+ this.logSeedFailureForCli(error, {
221
+ moduleName: currentModule,
222
+ step: currentStep,
223
+ pruneEnabled: this.enablePruning,
224
+ modulesToSeed,
225
+ });
226
+ throw error;
142
227
  }
143
- for (let i = 0; i < filteredSeedDataFiles.length; i++) {
144
- const overallMetadata = filteredSeedDataFiles[i];
145
- const moduleMetadata = overallMetadata.moduleMetadata;
146
- console.log(`▶ Seeding Metadata for Module: ${moduleMetadata.name}`);
147
- this.logger.log(`Seeding Metadata for Module: ${moduleMetadata.name}`);
148
- this.logger.log(`Seeding Module / Model / Fields`);
149
- const moduleModelFieldCounts = await this.seedModuleModelFields(moduleMetadata);
150
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);
151
- this.logger.log(`Seeding Media Storage Providers`);
152
- const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);
153
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);
154
- this.logger.log(`Seeding Roles`);
155
- const roleCounts = await this.seedRoles(overallMetadata);
156
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Roles', roleCounts)}`);
157
- this.logger.log(`Seeding Users`);
158
- const userCounts = await this.seedUsers(overallMetadata);
159
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Users', userCounts)}`);
160
- this.logger.log(`Seeding Views`);
161
- const viewCounts = await this.seedViews(overallMetadata);
162
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Views', viewCounts)}`);
163
- this.logger.log(`Seeding Actions`);
164
- const actionCounts = await this.seedActions(overallMetadata);
165
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Actions', actionCounts)}`);
166
- this.logger.log(`Seeding Menus`);
167
- const menuCounts = await this.seedMenus(overallMetadata);
168
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Menus', menuCounts)}`);
169
- this.logger.log(`Seeding Email Templates`);
170
- const emailTemplateCounts = await this.seedEmailTemplates(overallMetadata, moduleMetadata.name);
171
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Email Templates', emailTemplateCounts)}`);
172
- this.logger.log(`Seeding Sms Templates`);
173
- const smsTemplateCounts = await this.seedSmsTemplates(overallMetadata, moduleMetadata.name);
174
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Sms Templates', smsTemplateCounts)}`);
175
- this.logger.log(`Seeding Security Rules`);
176
- const securityRuleCounts = await this.seedSecurityRules(overallMetadata);
177
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Security Rules', securityRuleCounts)}`);
178
- this.logger.log(`Seeding List Of Values`);
179
- const lovCounts = await this.seedListOfValues(moduleMetadata, overallMetadata);
180
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'List Of Values', lovCounts)}`);
181
- this.logger.log(`Seeding Dashboards`);
182
- const dashboardCounts = await this.seedDashboards(moduleMetadata, overallMetadata);
183
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Dashboards', dashboardCounts)}`);
184
- this.logger.log(`Seeding Scheduled Jobs`);
185
- const scheduledJobCounts = await this.seedScheduledJobs(moduleMetadata, overallMetadata);
186
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Scheduled Jobs', scheduledJobCounts)}`);
187
- this.logger.log(`Seeding Saved Filters`);
188
- const savedFilterCounts = await this.seedSavedFilters(moduleMetadata, overallMetadata);
189
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Saved Filters', savedFilterCounts)}`);
190
- this.logger.log(`Seeding Model Sequences`);
191
- const modelSequenceCounts = await this.seedModelSequences(overallMetadata);
192
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Model Sequences', modelSequenceCounts)}`);
193
- }
194
- await this.setupDefaultRolesWithPermissions();
195
- console.log(`✔ Seeding completed.`);
196
228
  }
197
229
  async seedScheduledJobs(moduleMetadata, overallMetadata) {
198
230
  this.logger.debug(`[Start] Processing scheduled jobs for ${moduleMetadata.name}`);
@@ -578,29 +610,11 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
578
610
  const user = users[l];
579
611
  let exisitingUser = await this.userService.findOneByUsername(user.username);
580
612
  if (!exisitingUser) {
581
- let generatedAdminPassword = null;
582
613
  if (user.username === 'sa') {
583
- generatedAdminPassword = (0, uuid_1.v4)();
584
- user.password = generatedAdminPassword;
614
+ user.password = src_1.DEFAULT_SA_PASSWORD;
585
615
  }
586
616
  exisitingUser = await this.authenticationService.signUp(user);
587
617
  this.logger.log(`Newly created user ${user.username}`);
588
- if (generatedAdminPassword) {
589
- const banner = [
590
- '',
591
- '============================================================',
592
- ' SYSTEM ADMIN USER CREATED',
593
- '------------------------------------------------------------',
594
- ' Username : sa',
595
- ` Password : ${generatedAdminPassword}`,
596
- '',
597
- ' Copy and store this password securely now.',
598
- ' It is shown only once during seeding.',
599
- '============================================================',
600
- ''
601
- ].join('\n');
602
- console.log(banner);
603
- }
604
618
  }
605
619
  }
606
620
  }
@@ -694,9 +708,25 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
694
708
  return;
695
709
  }
696
710
  for (const dto of createSavedFilterDto) {
711
+ this.validateSavedFilterQueryJsonWrapper(dto);
697
712
  await this.savedFiltersRepo.upsertWithDto({ ...dto, filterQueryJson: JSON.stringify(dto.filterQueryJson) });
698
713
  }
699
714
  }
715
+ validateSavedFilterQueryJsonWrapper(dto) {
716
+ const filterName = dto?.name ?? '<unnamed>';
717
+ const filterQueryJson = dto?.filterQueryJson;
718
+ const baseErrorMessage = `Invalid saved filter "${filterName}": filterQueryJson must be wrapped with a top-level "$or" or "$and". ` +
719
+ `Example: {"$or":[{"employeeStatus":{"$eq":"Active"}}]}`;
720
+ if (!filterQueryJson || typeof filterQueryJson !== 'object' || Array.isArray(filterQueryJson)) {
721
+ throw new Error(baseErrorMessage);
722
+ }
723
+ const topLevelKeys = Object.keys(filterQueryJson);
724
+ const hasLogicalWrapper = topLevelKeys.includes('$or') || topLevelKeys.includes('$and');
725
+ if (!hasLogicalWrapper) {
726
+ const receivedKeys = topLevelKeys.length > 0 ? topLevelKeys.join(', ') : '(none)';
727
+ throw new Error(`${baseErrorMessage}. Received top-level keys: ${receivedKeys}`);
728
+ }
729
+ }
700
730
  async handleSeedModelSequences(modelSequencesDto) {
701
731
  if (!modelSequencesDto || modelSequencesDto.length === 0) {
702
732
  this.logger.debug(`No Model Sequences found to seed`);
@@ -1184,6 +1214,27 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
1184
1214
  }
1185
1215
  return 0;
1186
1216
  }
1217
+ logSeedFailureForCli(error, context) {
1218
+ const err = error instanceof Error ? error : new Error(String(error));
1219
+ const stackLines = (err.stack ?? '')
1220
+ .split('\n')
1221
+ .slice(0, 8)
1222
+ .map((line) => line.trim())
1223
+ .filter(Boolean);
1224
+ const logPayload = {
1225
+ module: context.moduleName,
1226
+ step: context.step,
1227
+ pruneEnabled: context.pruneEnabled,
1228
+ modulesToSeed: context.modulesToSeed?.length ? context.modulesToSeed : 'ALL',
1229
+ error: {
1230
+ name: err.name,
1231
+ message: err.message,
1232
+ stackPreview: stackLines.length > 0 ? stackLines : undefined,
1233
+ },
1234
+ };
1235
+ console.log('✖ Seeding failed');
1236
+ console.log(JSON.stringify(logPayload, null, 2));
1237
+ }
1187
1238
  formatSeedResult(moduleName, label, counts) {
1188
1239
  if (this.enablePruning) {
1189
1240
  return `✔ [${moduleName}] ${label} seeded (pruned ${counts.pruned}, upserted ${counts.upserted})`;