@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
@@ -5,66 +5,81 @@ export class UpdateScheduledJobDto {
5
5
  @IsOptional()
6
6
  @IsInt()
7
7
  id: number;
8
+
8
9
  @IsNotEmpty()
9
10
  @IsOptional()
10
11
  @IsString()
11
12
  @ApiProperty()
12
13
  scheduleName: string;
14
+
13
15
  @IsNotEmpty()
14
16
  @IsOptional()
15
17
  @IsBoolean()
16
18
  @ApiProperty()
17
19
  isActive: boolean;
20
+
18
21
  @IsNotEmpty()
19
22
  @IsOptional()
20
23
  @IsString()
21
24
  @ApiProperty()
22
25
  frequency: string;
26
+
23
27
  @IsOptional()
24
28
  @IsDate()
25
29
  @ApiProperty()
26
30
  startTime: Date;
31
+
27
32
  @IsOptional()
28
33
  @IsDate()
29
34
  @ApiProperty()
30
35
  endTime: Date;
36
+
31
37
  @IsOptional()
32
38
  @IsDate()
33
39
  @ApiProperty()
34
40
  startDate: Date;
41
+
35
42
  @IsOptional()
36
43
  @IsDate()
37
44
  @ApiProperty()
38
45
  endDate: Date;
46
+
39
47
  @IsOptional()
40
48
  @IsInt()
41
49
  @ApiProperty()
42
50
  dayOfMonth: number;
51
+
43
52
  @IsOptional()
44
53
  @IsDate()
45
54
  @ApiProperty()
46
55
  lastRunAt: Date;
56
+
47
57
  @IsOptional()
48
58
  @IsDate()
49
59
  @ApiProperty()
50
60
  nextRunAt: Date;
61
+
51
62
  @IsOptional()
52
63
  @IsString()
53
64
  @ApiProperty()
54
65
  dayOfWeek: string;
66
+
55
67
  @IsNotEmpty()
56
68
  @IsOptional()
57
69
  @IsString()
58
70
  @ApiProperty()
59
71
  job: string;
72
+
60
73
  @IsOptional()
61
74
  @IsString()
62
75
  @ApiProperty()
63
76
  cronExpression: string;
77
+
64
78
  @IsOptional()
65
79
  @IsInt()
66
80
  @ApiProperty()
67
81
  moduleId: number;
82
+
68
83
  @IsString()
69
84
  @IsOptional()
70
85
  @ApiProperty()
@@ -5,32 +5,39 @@ export class UpdateSecurityRuleDto {
5
5
  @IsOptional()
6
6
  @IsInt()
7
7
  id: number;
8
+
8
9
  @IsNotEmpty()
9
10
  @IsOptional()
10
11
  @IsString()
11
12
  @ApiProperty()
12
13
  name: string;
14
+
13
15
  @IsNotEmpty()
14
16
  @IsOptional()
15
17
  @IsString()
16
18
  @ApiProperty()
17
19
  description: string;
20
+
18
21
  @IsOptional()
19
22
  @IsInt()
20
23
  @ApiProperty()
21
24
  roleId: number;
25
+
22
26
  @IsString()
23
27
  @IsOptional()
24
28
  @ApiProperty()
25
29
  roleUserKey: string;
30
+
26
31
  @IsOptional()
27
32
  @IsInt()
28
33
  @ApiProperty()
29
34
  modelMetadataId: number;
35
+
30
36
  @IsString()
31
37
  @IsOptional()
32
38
  @ApiProperty()
33
39
  modelMetadataUserKey: string;
40
+
34
41
  @IsNotEmpty()
35
42
  @IsOptional()
36
43
  @IsJSON()
@@ -3,42 +3,42 @@ import { CreateSmsTemplateDto } from './create-sms-template.dto';
3
3
  import { IsString } from 'class-validator';
4
4
  import { IsOptional, Matches, IsNotEmpty, IsBoolean } from 'class-validator';
5
5
 
6
- export class UpdateSmsTemplateDto extends PartialType(CreateSmsTemplateDto) {
7
- @IsOptional()
8
- @IsString()
9
- @ApiProperty()
10
- type: string;
6
+ export class UpdateSmsTemplateDto extends PartialType(CreateSmsTemplateDto) {
7
+ @IsOptional()
8
+ @IsString()
9
+ @ApiProperty()
10
+ type: string;
11
11
 
12
- @IsNotEmpty()
13
- @IsOptional()
14
- @Matches(/[a-z]+(-[a-z]+)*/)
15
- @IsString()
16
- @ApiProperty()
17
- name: string;
12
+ @IsNotEmpty()
13
+ @IsOptional()
14
+ @Matches(/[a-z]+(-[a-z]+)*/)
15
+ @IsString()
16
+ @ApiProperty()
17
+ name: string;
18
18
 
19
- @IsOptional()
20
- @IsString()
21
- @ApiProperty()
22
- smsProviderTemplateId: string;
19
+ @IsOptional()
20
+ @IsString()
21
+ @ApiProperty()
22
+ smsProviderTemplateId: string;
23
23
 
24
- @IsNotEmpty()
25
- @IsOptional()
26
- @IsString()
27
- @ApiProperty()
28
- displayName: string;
24
+ @IsNotEmpty()
25
+ @IsOptional()
26
+ @IsString()
27
+ @ApiProperty()
28
+ displayName: string;
29
29
 
30
- @IsOptional()
31
- @IsString()
32
- @ApiProperty()
33
- body: string;
30
+ @IsOptional()
31
+ @IsString()
32
+ @ApiProperty()
33
+ body: string;
34
34
 
35
- @IsOptional()
36
- @IsString()
37
- @ApiProperty()
38
- description: string;
35
+ @IsOptional()
36
+ @IsString()
37
+ @ApiProperty()
38
+ description: string;
39
39
 
40
- @IsOptional()
41
- @IsBoolean()
42
- @ApiProperty()
43
- active: boolean;
40
+ @IsOptional()
41
+ @IsBoolean()
42
+ @ApiProperty()
43
+ active: boolean;
44
44
  } { }
@@ -7,58 +7,70 @@ export class UpdateViewMetadataDto {
7
7
  @IsOptional()
8
8
  @IsInt()
9
9
  id: number;
10
+
10
11
  @IsNotEmpty()
11
12
  @IsOptional()
12
13
  @Matches(/[a-z]+(-[a-z]+)*/)
13
14
  @IsString()
14
15
  @ApiProperty()
15
16
  name: string;
17
+
16
18
  @IsNotEmpty()
17
19
  @IsOptional()
18
20
  @IsString()
19
21
  @ApiProperty()
20
22
  displayName: string;
23
+
21
24
  @IsNotEmpty()
22
25
  @IsOptional()
23
26
  @IsString()
24
27
  @ApiProperty()
25
28
  type: string;
29
+
26
30
  @IsNotEmpty()
27
31
  @IsOptional()
28
32
  @IsJSON()
29
33
  @ApiProperty()
30
34
  context: any;
35
+
31
36
  @IsNotEmpty()
32
37
  @IsOptional()
33
38
  @IsJSON()
34
39
  @ApiProperty()
35
40
  layout: any;
41
+
36
42
  @IsOptional()
37
43
  @IsInt()
38
44
  @ApiProperty()
39
45
  moduleId: number;
46
+
40
47
  @IsString()
41
48
  @IsOptional()
42
49
  @ApiProperty()
43
50
  moduleUserKey: string;
51
+
44
52
  @IsOptional()
45
53
  @IsInt()
46
54
  @ApiProperty()
47
55
  modelId: number;
56
+
48
57
  @IsString()
49
58
  @IsOptional()
50
59
  @ApiProperty()
51
60
  modelUserKey: string;
61
+
52
62
  @IsOptional()
53
63
  @ApiProperty()
54
64
  @IsArray()
55
65
  @ValidateNested({ each: true })
56
66
  @Type(() => UpdateUserViewMetadataDto)
57
67
  userViewMetadata: UpdateUserViewMetadataDto[];
68
+
58
69
  @IsOptional()
59
70
  @IsArray()
60
71
  @ApiProperty()
61
72
  userViewMetadataIds: number[];
73
+
62
74
  @IsString()
63
75
  @IsOptional()
64
76
  @ApiProperty()
@@ -111,6 +111,9 @@ export class User extends CommonEntity {
111
111
  // dont send to client
112
112
  @Column({ nullable: true })
113
113
  rehashedAt: Date;
114
+ // dont send to client
115
+ @Column({ type: "int", default: 0 })
116
+ failedLoginAttempts: number = 0;
114
117
  @Expose()
115
118
  _media: any;
116
119
  }
@@ -14,6 +14,8 @@ export interface ManyToManyRelationFieldOptions {
14
14
  entityManager: EntityManager;
15
15
  fieldName: string;
16
16
  relationCoModelFieldName?: string;
17
+ isUpdate?: boolean;
18
+ entityId?: number;
17
19
  }
18
20
 
19
21
  const linkCommands = [RelationFieldsCommand.link, RelationFieldsCommand.unlink, RelationFieldsCommand.set];
@@ -74,16 +76,21 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
74
76
  const relatedEntityName = classify(this.options.relationCoModelSingularName);
75
77
  const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName)
76
78
 
77
- dto[this.valueFieldName] = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
79
+ const result = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
80
+ if (result !== undefined) {
81
+ dto[this.valueFieldName] = result;
82
+ } else {
83
+ delete dto[this.valueFieldName];
84
+ }
78
85
  return dto;
79
86
  }
80
87
 
81
- private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[]> {
88
+ private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[] | undefined> {
82
89
  // TODO : Need to add support for the multiple commands
83
90
  const command = dto[this.commandFieldName];
84
91
  const values = dto[this.valueFieldName];
85
92
  const ids = dto[this.idFieldName];
86
-
93
+
87
94
  switch (command) {
88
95
  case RelationFieldsCommand.create:
89
96
  return await this.transformForCommandCreate(values, relatedEntityRepository);
@@ -94,15 +101,15 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
94
101
  case RelationFieldsCommand.clear:
95
102
  return this.transformForCommandClear();
96
103
  case RelationFieldsCommand.set:
97
- return await this.transformForCommandSet(ids, relatedEntityRepository, dto, currentEntityRepository);
104
+ return await this.transformForCommandSet(ids, relatedEntityRepository);
98
105
  case RelationFieldsCommand.link:
99
- return await this.tranformForCommandLink(ids, relatedEntityRepository, dto, currentEntityRepository);
106
+ return await this.tranformForCommandLink(ids, relatedEntityRepository);
100
107
  case RelationFieldsCommand.unlink:
101
- return await this.transformForCommandUnLink(ids, relatedEntityRepository, dto, currentEntityRepository);
108
+ return await this.transformForCommandUnLink(ids);
102
109
  default:
103
110
  this.logger.log(`Invalid command ${command}`);
104
111
  return null;
105
-
112
+
106
113
  }
107
114
  }
108
115
 
@@ -110,46 +117,50 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
110
117
  return []
111
118
  }
112
119
 
113
- private async transformForCommandSet(ids: any[], relatedEntityRepository: any, dto: any, currentEntityRepository: any): Promise<any[]> {
114
- // Load the entities with the ids passed
120
+ private async transformForCommandSet(ids: any[], relatedEntityRepository: any): Promise<any[]> {
115
121
  const loadedEntities: any[] = await relatedEntityRepository.find({
116
- where : {id: In(ids) }
122
+ where : {id: In(ids) }
117
123
  })
118
124
  if (loadedEntities.length !== ids.length) {
119
- throw new Error('Invalid entity ids provided for linking');
125
+ throw new Error('Invalid entity ids provided for set');
120
126
  }
121
127
 
122
128
  return loadedEntities;
123
129
  }
124
130
 
125
- private async tranformForCommandLink(ids: any, relatedEntityRepository: any, dto: any, currentEntityRepository: any) {
126
- const tranformedRelatedFields = [];
127
- // Load the entities with the ids passed
128
- const loadedEntities: any[] = await relatedEntityRepository.find({
129
- where : {id: In(ids) }
130
- })
131
- if (loadedEntities.length !== ids.length) {
131
+ private async tranformForCommandLink(ids: any[], relatedEntityRepository: any): Promise<undefined> {
132
+ if (!this.options.isUpdate) {
133
+ throw new Error('Link command is only supported for update operations');
134
+ }
135
+
136
+ const count: number = await relatedEntityRepository.count({
137
+ where: { id: In(ids) }
138
+ });
139
+ if (count !== ids.length) {
132
140
  throw new Error('Invalid entity ids provided for linking');
133
141
  }
134
- tranformedRelatedFields.push(...loadedEntities);
135
142
 
136
- return tranformedRelatedFields;
143
+ await this.options.entityManager
144
+ .createQueryBuilder()
145
+ .relation(classify(this.options.modelSingularName), this.valueFieldName)
146
+ .of(this.options.entityId)
147
+ .add(ids);
148
+
149
+ return undefined;
137
150
  }
138
151
 
139
- private async transformForCommandUnLink(ids: any, relatedEntityRepository: any, dto: any, currentEntityRepository: any) {
140
- if (dto.id == null) {
141
- throw new Error('Entity id is required for unlinking');
142
- }
152
+ private async transformForCommandUnLink(ids: any[]): Promise<undefined> {
153
+ if (!this.options.isUpdate) {
154
+ throw new Error('Unlink command is only supported for update operations');
155
+ }
143
156
 
144
- const tranformedRelatedFields = [];
145
- const entityInstance = await currentEntityRepository.findOne({
146
- where: {id: dto.id},
147
- relations: [this.valueFieldName]
148
- });
149
- const filteredEntities = entityInstance[this.valueFieldName].filter((entity) => !ids.includes(entity.id));
150
- tranformedRelatedFields.push(...filteredEntities);
157
+ await this.options.entityManager
158
+ .createQueryBuilder()
159
+ .relation(classify(this.options.modelSingularName), this.valueFieldName)
160
+ .of(this.options.entityId)
161
+ .remove(ids);
151
162
 
152
- return tranformedRelatedFields;
163
+ return undefined;
153
164
  }
154
165
 
155
166
  private async transformForCommandCreate(values: any[], relatedEntityRepository: any): Promise<any[]> {
@@ -1,7 +1,7 @@
1
1
  import { classify } from "@angular-devkit/core/src/utils/strings";
2
+ import { Logger } from "@nestjs/common";
2
3
  import { isEmpty, isEnum, isInt, isNotEmpty } from "class-validator";
3
4
  import { RelationFieldsCommand } from "src/dtos/create-field-metadata.dto";
4
- import { FieldMetadata } from "src/entities/field-metadata.entity";
5
5
  import { FieldCrudManager, ValidationError } from "src/interfaces";
6
6
  import { EntityManager, In } from "typeorm";
7
7
 
@@ -13,12 +13,15 @@ export interface OneToManyRelationFieldOptions {
13
13
  modelSingularName: string | undefined | null;
14
14
  inverseFieldName: string | undefined | null;
15
15
  entityManager: EntityManager | undefined | null;
16
+ isUpdate?: boolean;
17
+ entityId?: number;
16
18
  }
17
19
 
18
20
  const linkCommands = [RelationFieldsCommand.link, RelationFieldsCommand.unlink, RelationFieldsCommand.set];
19
21
 
20
22
  // This implementation is meant to be used for many-to-one relation field
21
23
  export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
24
+ private readonly logger = new Logger(OneToManyRelationFieldCrudManager.name);
22
25
 
23
26
  private readonly valueFieldName: string;
24
27
  private readonly idFieldName: string;
@@ -74,18 +77,22 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
74
77
  }
75
78
 
76
79
  async transformForCreate(dto: any): Promise<any> {
77
- // const relatedFieldData: any[] = dto[this.fieldName()];
78
80
  const currentEntityName = classify(this.options.modelSingularName);
79
81
  const currentEntityRepository = this.options.entityManager.getRepository(currentEntityName);
80
82
 
81
83
  const relatedEntityName = classify(this.options.relationCoModelSingularName);
82
84
  const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName);
83
85
 
84
- dto[this.valueFieldName] = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
86
+ const result = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
87
+ if (result !== undefined) {
88
+ dto[this.valueFieldName] = result;
89
+ } else {
90
+ delete dto[this.valueFieldName];
91
+ }
85
92
  return dto;
86
93
  }
87
94
 
88
- private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[]> {
95
+ private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[] | undefined> {
89
96
  // TODO : Need to add support for the multiple commands
90
97
  const command = dto[this.commandFieldName];
91
98
  const values = dto[this.valueFieldName];
@@ -101,13 +108,14 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
101
108
  case RelationFieldsCommand.clear:
102
109
  return this.transformForCommandClear();
103
110
  case RelationFieldsCommand.set:
104
- return await this.transformForCommandSet(ids, relatedEntityRepository, dto, currentEntityRepository);
111
+ return await this.transformForCommandSet(ids, relatedEntityRepository);
105
112
  case RelationFieldsCommand.link:
106
- return await this.tranformForCommandLink(ids, relatedEntityRepository, dto, currentEntityRepository);
113
+ return await this.tranformForCommandLink(ids, relatedEntityRepository);
107
114
  case RelationFieldsCommand.unlink:
108
- return await this.transformForCommandUnLink(ids, relatedEntityRepository, dto, currentEntityRepository);
115
+ return await this.transformForCommandUnLink(ids);
109
116
  default:
110
- return null; // This is equivalent to no transformation
117
+ this.logger.log(`Invalid command ${command}`);
118
+ return null;
111
119
  }
112
120
  }
113
121
 
@@ -115,46 +123,50 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
115
123
  return []
116
124
  }
117
125
 
118
- private async transformForCommandSet(ids: any[], relatedEntityRepository: any, dto: any, currentEntityRepository: any): Promise<any[]> {
119
- // Load the entities with the ids passed
126
+ private async transformForCommandSet(ids: any[], relatedEntityRepository: any): Promise<any[]> {
120
127
  const loadedEntities: any[] = await relatedEntityRepository.find({
121
- where : {id: In(ids) }
128
+ where : {id: In(ids) }
122
129
  })
123
130
  if (loadedEntities.length !== ids.length) {
124
- throw new Error('Invalid entity ids provided for linking');
131
+ throw new Error('Invalid entity ids provided for set');
125
132
  }
126
133
 
127
134
  return loadedEntities;
128
135
  }
129
136
 
130
- private async tranformForCommandLink(ids: any, relatedEntityRepository: any, dto: any, currentEntityRepository: any) {
131
- const tranformedRelatedFields = [];
132
- // Load the entities with the ids passed
133
- const loadedEntities: any[] = await relatedEntityRepository.find({
134
- where : {id: In(ids) }
135
- })
136
- if (loadedEntities.length !== ids.length) {
137
+ private async tranformForCommandLink(ids: any[], relatedEntityRepository: any): Promise<undefined> {
138
+ if (!this.options.isUpdate) {
139
+ throw new Error('Link command is only supported for update operations');
140
+ }
141
+
142
+ const count: number = await relatedEntityRepository.count({
143
+ where: { id: In(ids) }
144
+ });
145
+ if (count !== ids.length) {
137
146
  throw new Error('Invalid entity ids provided for linking');
138
147
  }
139
- tranformedRelatedFields.push(...loadedEntities);
140
148
 
141
- return tranformedRelatedFields;
149
+ await this.options.entityManager
150
+ .createQueryBuilder()
151
+ .relation(classify(this.options.modelSingularName), this.valueFieldName)
152
+ .of(this.options.entityId)
153
+ .add(ids);
154
+
155
+ return undefined;
142
156
  }
143
157
 
144
- private async transformForCommandUnLink(ids: any, relatedEntityRepository: any, dto: any, currentEntityRepository: any) {
145
- if (dto.id == null) {
146
- throw new Error('Entity id is required for unlinking');
147
- }
158
+ private async transformForCommandUnLink(ids: any[]): Promise<undefined> {
159
+ if (!this.options.isUpdate) {
160
+ throw new Error('Unlink command is only supported for update operations');
161
+ }
148
162
 
149
- const tranformedRelatedFields = [];
150
- const entityInstance = await currentEntityRepository.findOne({
151
- where: {id: dto.id},
152
- relations: [this.valueFieldName]
153
- });
154
- const filteredEntities = entityInstance[this.valueFieldName].filter((entity) => !ids.includes(entity.id));
155
- tranformedRelatedFields.push(...filteredEntities);
163
+ await this.options.entityManager
164
+ .createQueryBuilder()
165
+ .relation(classify(this.options.modelSingularName), this.valueFieldName)
166
+ .of(this.options.entityId)
167
+ .remove(ids);
156
168
 
157
- return tranformedRelatedFields;
169
+ return undefined;
158
170
  }
159
171
 
160
172
  private async transformForCommandCreate(values: any[], relatedEntityRepository: any): Promise<any[]> {
@@ -24,7 +24,7 @@ export function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {
24
24
 
25
25
  // clickjacking defense (modern)
26
26
  "frame-ancestors": ["'none'"],
27
-
27
+ "style-src": ["'self'"],
28
28
  // add/adjust as needed for your app:
29
29
  // "script-src": ["'self'"], // add hashes/nonces/CSPRO if needed
30
30
  // "style-src": ["'self'", "'unsafe-inline'"],
package/src/index.ts CHANGED
@@ -4,6 +4,8 @@ export * from './commands/refresh-module.command'
4
4
  export * from './commands/remove-fields.command'
5
5
  export * from './commands/seed.command'
6
6
  export * from './commands/test-data.command'
7
+ export * from './commands/run-tests.command'
8
+ export * from './commands/test.command'
7
9
 
8
10
  export * from './config/cache.options'
9
11
 
@@ -179,6 +181,7 @@ export * from './helpers/security.helper'
179
181
  export * from './helpers/model-metadata-helper.service'
180
182
  export * from './helpers/image-encoding.helper'
181
183
  export * from './helpers/solid-microservice-adapter.service'
184
+ export * from './helpers/typeorm-db-helper';
182
185
 
183
186
  export * from './services/crud.service'
184
187
  export * from './interceptors/logging.interceptor'
@@ -209,16 +212,12 @@ export * from './jobs/msg91-whatsapp-subscriber.service'
209
212
  export * from './listeners/user-registration.listener'
210
213
 
211
214
  export * from './passport-strategies/google-oauth.strategy'
212
- export * from './passport-strategies/local.strategy'
213
215
 
214
216
  export * from './services/selection-providers/list-of-values-selection-providers.service'
215
217
 
216
218
  // seed-data
217
- export * from './seeders/email-template-seeder.service'
218
219
  export * from './seeders/permission-metadata-seeder.service'
219
- export * from './seeders/sms-template-seeder.service'
220
220
  export * from './seeders/module-metadata-seeder.service'
221
- export * from './seeders/user-seeder.service'
222
221
 
223
222
  // export * from './services/access-token-storage.service'
224
223
  export * from './services/action-metadata.service'