@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
@@ -1 +1 @@
1
- {"version":3,"file":"module-metadata-seeder.service.js","sourceRoot":"","sources":["../../src/seeders/module-metadata-seeder.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { CreateDashboardDto } from 'src/dtos/create-dashboard.dto';\nimport { CreateEmailTemplateDto } from 'src/dtos/create-email-template.dto';\nimport { CreateListOfValuesDto } from 'src/dtos/create-list-of-values.dto';\nimport { CreateSecurityRuleDto } from 'src/dtos/create-security-rule.dto';\nimport { CreateSmsTemplateDto } from 'src/dtos/create-sms-template.dto';\nimport { DashboardRepository } from 'src/repository/dashboard.repository';\nimport { SecurityRuleRepository } from 'src/repository/security-rule.repository';\nimport { AuthenticationService } from 'src/services/authentication.service';\nimport { EmailTemplateService } from 'src/services/email-template.service';\nimport { ListOfValuesService } from 'src/services/list-of-values.service';\nimport { SettingService } from 'src/services/setting.service';\nimport { SmsTemplateService } from 'src/services/sms-template.service';\nimport { UserService } from 'src/services/user.service';\nimport { DataSource, In } from 'typeorm';\nimport { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';\nimport { CreateModuleMetadataDto } from '../dtos/create-module-metadata.dto';\nimport { getDynamicModuleNamesBasedOnMetadata } from '../helpers/module.helper';\nimport { SolidRegistry } from '../helpers/solid-registry';\nimport { ActionMetadataService } from '../services/action-metadata.service';\nimport { FieldMetadataService } from '../services/field-metadata.service';\nimport { MediaStorageProviderMetadataService } from '../services/media-storage-provider-metadata.service';\nimport { ModelMetadataService } from '../services/model-metadata.service';\nimport { ModuleMetadataService } from '../services/module-metadata.service';\nimport { RoleMetadataService } from '../services/role-metadata.service';\nimport { ViewMetadataService } from '../services/view-metadata.service';\nimport solidCoreMetadata from './seed-data/solid-core-metadata.json';\nimport { SystemFieldsSeederService } from './system-fields-seeder.service';\n// import { CreateScheduledJobDto } from 'src/dtos/create-scheduled-job.dto';\nimport { ActionMetadata, MENU_ROLE_JOIN_TABLE_NAME, MENU_ROLE_JOIN_TABLE_NAME_MENU_COL, MENU_ROLE_JOIN_TABLE_NAME_ROLE_COL, MenuItemMetadata, ModuleMetadata, RoleMetadata, SignUpDto } from 'src';\nimport { ADMIN_ROLE_NAME } from 'src/dtos/create-role-metadata.dto';\nimport { CreateSavedFiltersDto } from 'src/dtos/create-saved-filters.dto';\nimport { CreateScheduledJobDto } from 'src/dtos/create-scheduled-job.dto';\nimport { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';\nimport { SavedFiltersRepository } from 'src/repository/saved-filters.repository';\nimport { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';\nimport { SettingRepository } from 'src/repository/setting.repository';\nimport { CreateModelSequenceDto } from 'src/dtos/create-model-sequence.dto';\nimport { ModelSequenceRepository } from 'src/repository/model-sequence.repository';\nimport { ModelSequence } from 'src/entities/model-sequence.entity';\nimport { SavedFilters } from 'src/entities/saved-filters.entity';\nimport { ScheduledJob } from 'src/entities/scheduled-job.entity';\nimport { SecurityRule } from 'src/entities/security-rule.entity';\nimport { ListOfValues } from 'src/entities/list-of-values.entity';\nimport { Dashboard } from 'src/entities/dashboard.entity';\nimport { FieldMetadata } from 'src/entities/field-metadata.entity';\nimport { ModelMetadata } from 'src/entities/model-metadata.entity';\nimport { PermissionMetadata } from 'src/entities/permission-metadata.entity';\nimport { ViewMetadata } from 'src/entities/view-metadata.entity';\n\n\n@Injectable()\nexport class ModuleMetadataSeederService {\n private readonly logger = new Logger(ModuleMetadataSeederService.name);\n private enablePruning: boolean = false;\n\n constructor(\n private readonly moduleMetadataService: ModuleMetadataService,\n @Inject(forwardRef(() => ModelMetadataService))\n private readonly modelMetadataService: ModelMetadataService,\n private readonly fieldMetadataService: FieldMetadataService,\n private readonly mediaStorageProviderMetadataService: MediaStorageProviderMetadataService,\n private readonly roleService: RoleMetadataService,\n private readonly userService: UserService,\n private readonly authenticationService: AuthenticationService,\n private readonly solidActionService: ActionMetadataService,\n private readonly solidViewService: ViewMetadataService,\n private readonly emailTemplateService: EmailTemplateService,\n private readonly smsTemplateService: SmsTemplateService,\n private readonly listOfValuesService: ListOfValuesService,\n // @InjectRepository(PermissionMetadata)\n // private readonly permissionRepo: Repository<PermissionMetadata>,\n private readonly permissionRepo: PermissionMetadataRepository,\n private readonly solidRegistry: SolidRegistry,\n private readonly settingService: SettingService,\n // @InjectRepository(Setting, 'default')\n // readonly settingsRepo: Repository<Setting>,\n private readonly settingsRepo: SettingRepository,\n readonly securityRuleRepo: SecurityRuleRepository,\n readonly systemFieldsSeederService: SystemFieldsSeederService,\n readonly dashboardRepo: DashboardRepository,\n readonly scheduledJobRepository: ScheduledJobRepository,\n readonly savedFiltersRepo: SavedFiltersRepository,\n readonly dataSource: DataSource,\n readonly modelSequenceRepo: ModelSequenceRepository,\n ) { }\n\n async seed(conf?: any) {\n this.enablePruning = Boolean(conf?.pruneMetadata);\n console.log(this.enablePruning ? '▶ Pruning enabled: metadata not present in JSON will be removed.' : '▶ Pruning disabled: existing metadata will be kept.');\n\n // Global seeding steps i.e across all modules\n await this.seedGlobalMetadata();\n\n // Module specific seeding steps.\n // Get all the module metadata files which needs to be seeded.\n const seedDataFiles = this.seedDataFiles;\n this.logger.debug(`Found seed data for modules: ${seedDataFiles.map(s => s.moduleMetadata?.name)}`);\n\n /** \n * -------------------------------------------------------------\n * Selective module seeding via: solid seed --modules-to-seed onboarding,reports \n * -------------------------------------------------------------\n */\n let modulesToSeed: string[] | null = null;\n\n if (conf && Array.isArray(conf.modulesToSeed)) {\n modulesToSeed = conf.modulesToSeed;\n console.log(`▶ Selective seeding enabled. Modules to seed: ${modulesToSeed.join(', ')}`);\n this.logger.log(`Selective seeding enabled. Modules to seed: ${modulesToSeed.join(', ')}`);\n } else {\n console.log(`▶ No modulesToSeed provided. Seeding ALL modules.`);\n this.logger.log(`No modulesToSeed provided. Seeding ALL modules.`);\n }\n\n // Filter modules if needed\n const filteredSeedDataFiles = modulesToSeed ? seedDataFiles.filter((file) => modulesToSeed.includes(file.moduleMetadata?.name)) : seedDataFiles;\n\n if (filteredSeedDataFiles.length === 0) {\n this.logger.warn(`No modules matched the provided modulesToSeed list.`);\n return;\n }\n\n // let usersDetail;\n // For each module metadata file, we will process the seeding steps one by one.\n for (let i = 0; i < filteredSeedDataFiles.length; i++) {\n const overallMetadata = filteredSeedDataFiles[i];\n const moduleMetadata: CreateModuleMetadataDto = overallMetadata.moduleMetadata;\n console.log(`▶ Seeding Metadata for Module: ${moduleMetadata.name}`);\n this.logger.log(`Seeding Metadata for Module: ${moduleMetadata.name}`);\n\n // Process module metadata first. \n this.logger.log(`Seeding Module / Model / Fields`);\n const moduleModelFieldCounts = await this.seedModuleModelFields(moduleMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);\n\n // Media Storage provider templates\n this.logger.log(`Seeding Media Storage Providers`);\n const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);\n\n // Custom role handling\n this.logger.log(`Seeding Roles`);\n const roleCounts = await this.seedRoles(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Roles', roleCounts)}`);\n\n // Custom user handling\n this.logger.log(`Seeding Users`);\n const userCounts = await this.seedUsers(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Users', userCounts)}`);\n\n // Application Module View handling \n this.logger.log(`Seeding Views`);\n const viewCounts = await this.seedViews(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Views', viewCounts)}`);\n\n // Application Module Action handling\n this.logger.log(`Seeding Actions`);\n const actionCounts = await this.seedActions(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Actions', actionCounts)}`);\n\n // Application Module Menu handling \n this.logger.log(`Seeding Menus`);\n const menuCounts = await this.seedMenus(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Menus', menuCounts)}`);\n\n // Email templates \n this.logger.log(`Seeding Email Templates`);\n const emailTemplateCounts = await this.seedEmailTemplates(overallMetadata, moduleMetadata.name);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Email Templates', emailTemplateCounts)}`);\n\n // Sms templates\n this.logger.log(`Seeding Sms Templates`);\n const smsTemplateCounts = await this.seedSmsTemplates(overallMetadata, moduleMetadata.name);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Sms Templates', smsTemplateCounts)}`);\n\n // Security rules\n this.logger.log(`Seeding Security Rules`);\n const securityRuleCounts = await this.seedSecurityRules(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Security Rules', securityRuleCounts)}`);\n\n // List Of Values\n this.logger.log(`Seeding List Of Values`);\n const lovCounts = await this.seedListOfValues(moduleMetadata, overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'List Of Values', lovCounts)}`);\n\n // Dashboards\n this.logger.log(`Seeding Dashboards`);\n const dashboardCounts = await this.seedDashboards(moduleMetadata, overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Dashboards', dashboardCounts)}`);\n\n // Scheduled Jobs\n this.logger.log(`Seeding Scheduled Jobs`);\n const scheduledJobCounts = await this.seedScheduledJobs(moduleMetadata, overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Scheduled Jobs', scheduledJobCounts)}`);\n\n // Saved Filters\n this.logger.log(`Seeding Saved Filters`);\n const savedFilterCounts = await this.seedSavedFilters(moduleMetadata, overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Saved Filters', savedFilterCounts)}`);\n\n // Model Sequences\n this.logger.log(`Seeding Model Sequences`);\n const modelSequenceCounts = await this.seedModelSequences(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Model Sequences', modelSequenceCounts)}`);\n }\n\n // Setup default roles with permissions.\n await this.setupDefaultRolesWithPermissions();\n\n // Add a console log indicating seeding is finished. This needs to be console.log so that it looks proper when this code is run via CLI.\n console.log(`✔ Seeding completed.`);\n //this.logger.log(`All Seeders finished`);\n\n //FIXME: Handle displaying the created users credentials in a better way.\n // this.logger.log(`Newly created username is: ${usersDetail?.length > 0 ? usersDetail[0]?.username : ''} and password is ${usersDetail?.length > 0 ? usersDetail[0]?.password : ''}`);\n }\n\n private async seedScheduledJobs(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing scheduled jobs for ${moduleMetadata.name}`);\n const scheduledJobs: CreateScheduledJobDto[] = overallMetadata.scheduledJobs;\n const pruned = this.enablePruning ? await this.pruneScheduledJobs(scheduledJobs, moduleMetadata.name) : 0;\n if (scheduledJobs?.length > 0) {\n await this.handleSeedScheduledJobs(scheduledJobs);\n }\n this.logger.debug(`[End] Processing scheduled jobs for ${moduleMetadata.name}`);\n return { pruned, upserted: scheduledJobs?.length ?? 0 };\n }\n\n private async seedSavedFilters(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing saved filters for ${moduleMetadata.name}`);\n const savedFilters: CreateSavedFiltersDto[] = overallMetadata.savedFilters;\n const pruned = this.enablePruning ? await this.pruneSavedFilters(savedFilters, moduleMetadata.name) : 0;\n if (savedFilters?.length > 0) {\n await this.handleSeedSavedFilters(savedFilters);\n }\n this.logger.debug(`[End] Processing saved filters for ${moduleMetadata.name}`);\n return { pruned, upserted: savedFilters?.length ?? 0 };\n }\n\n private async seedDashboards(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing dashboards for ${moduleMetadata.name}`);\n const dashboards: CreateDashboardDto[] = overallMetadata.dashboards;\n const pruned = this.enablePruning ? await this.pruneDashboards(dashboards, moduleMetadata.name) : 0;\n await this.handleSeedDashboards(dashboards);\n this.logger.debug(`[End] Processing dashboards for ${moduleMetadata.name}`);\n return { pruned, upserted: dashboards?.length ?? 0 };\n }\n\n private async seedListOfValues(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing List Of Values for ${moduleMetadata.name}`);\n const listOfValues: CreateListOfValuesDto[] = overallMetadata.listOfValues;\n const pruned = this.enablePruning ? await this.pruneListOfValues(listOfValues, moduleMetadata.name) : 0;\n await this.handleSeedListOfValues(listOfValues);\n this.logger.debug(`[End] Processing List Of Values for ${moduleMetadata.name}`);\n return { pruned, upserted: listOfValues?.length ?? 0 };\n }\n\n private async setupDefaultRolesWithPermissions() {\n this.logger.debug(`About to add all permissions to the Admin role`);\n await this.roleService.addAllPermissionsToRole(ADMIN_ROLE_NAME);\n\n // 2. Give permissions to the Internal / Public role.\n // this.logger.debug(`About to add all permissions to the Internal role`);\n // await this.roleService.addPermissionToRole(INTERNAL_ROLE_NAME, INTERNAL_ROLE_PERMISSIONS);\n\n // this.logger.debug(`About to add all permissions to the Public role`);\n // await this.roleService.addPermissionToRole(PUBLIC_ROLE_NAME, ['SettingController.wrapSettings', 'AuthenticationController.logout']);\n }\n\n private async seedSecurityRules(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing security rules`);\n const securityRules: CreateSecurityRuleDto[] = overallMetadata.securityRules;\n const pruned = this.enablePruning ? await this.pruneSecurityRules(securityRules, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedSecurityRules(securityRules);\n this.logger.debug(`[End] Processing security rules`);\n return { pruned, upserted: securityRules?.length ?? 0 };\n }\n\n // Ok\n private async seedDefaultSettings() {\n this.logger.debug(`[Start] Processing settings`);\n await this.settingService.seedSystemAdminEditableAndAboveSettings();\n this.logger.debug(`[End] Processing settings`);\n }\n\n private async seedSmsTemplates(overallMetadata: any, moduleName: string): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing sms templates`);\n const smsTemplates: CreateSmsTemplateDto[] = overallMetadata.smsTemplates;\n await this.handleSeedSmsTemplates(smsTemplates, moduleName);\n this.logger.debug(`[End] Processing sms templates`);\n return { pruned: 0, upserted: smsTemplates?.length ?? 0 };\n }\n\n // OK\n private async seedEmailTemplates(overallMetadata: any, moduleName: string): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing email templates`);\n const emailTemplates: CreateEmailTemplateDto[] = overallMetadata.emailTemplates;\n await this.handleSeedEmailTemplates(emailTemplates, moduleName);\n this.logger.debug(`[End] Processing email templates`);\n return { pruned: 0, upserted: emailTemplates?.length ?? 0 };\n }\n\n // Ok\n private async seedMenus(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing menus`);\n const menus = overallMetadata.menus;\n const pruned = this.enablePruning ? await this.pruneMenus(menus, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedMenus(menus);\n this.logger.debug(`[End] Processing menus`);\n return { pruned, upserted: menus?.length ?? 0 };\n }\n\n // Ok\n private async seedActions(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing actions`);\n const actions = overallMetadata.actions;\n const pruned = this.enablePruning ? await this.pruneActions(actions, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedActions(actions);\n this.logger.debug(`[End] Processing actions`);\n return { pruned, upserted: actions?.length ?? 0 };\n }\n\n // Ok\n private async seedViews(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing views`);\n const views = overallMetadata.views;\n const pruned = this.enablePruning ? await this.pruneViews(views, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedViews(views);\n this.logger.debug(`[End] Processing views`);\n return { pruned, upserted: views?.length ?? 0 };\n }\n\n // Ok\n private async seedUsers(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing users`);\n const users = overallMetadata.users;\n // usersDetail = users;\n await this.handleSeedUsers(users);\n this.logger.debug(`[End] Processing users`);\n return { pruned: 0, upserted: users?.length ?? 0 };\n }\n\n // OK\n private async seedRoles(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing roles`);\n // While creating roles we are only passing the role name to be used. \n await this.roleService.createRolesIfNotExists(overallMetadata.roles.map(role => { return { name: role.name }; }));\n // After roles are created, we iterate over all roles and attach permissions (if specified in the seeder json) to the respective role.\n // Every role configuration in the seeder json can optionally have a permissions attribute. \n for (const role of overallMetadata.roles) {\n if (role.permissions) {\n await this.roleService.addPermissionsToRole(role.name, role.permissions);\n }\n }\n this.logger.debug(`[End] Processing roles`);\n return { pruned: 0, upserted: overallMetadata.roles?.length ?? 0 };\n }\n\n // OK\n private get seedDataFiles(): any[] {\n const typedSolidCoreMetadata = structuredClone(solidCoreMetadata);\n const seedDataFiles = [typedSolidCoreMetadata];\n // const enabledModules = getDynamicModuleNames();\n const enabledModules = getDynamicModuleNamesBasedOnMetadata();\n for (const enabledModule of enabledModules) {\n const enabledModuleSeedFile = `module-metadata/${enabledModule}/${enabledModule}-metadata.json`;\n const fullPath = path.join(process.cwd(), enabledModuleSeedFile);\n\n if (fs.existsSync(fullPath)) {\n const overallMetadata = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));\n seedDataFiles.push(overallMetadata);\n }\n }\n\n return seedDataFiles;\n }\n\n // OK\n private async seedGlobalMetadata() {\n this.logger.log(`Seeding Permissions`);\n await this.seedPermissions();\n\n // this.logger.log(`Seeding Default Media Storage Providers`);\n // await this.seedDefaultMediaStorageProviders();\n\n this.logger.log(`Seeding System Fields Metadata`);\n await this.seedDefaultSystemFields();\n\n // Settings\n this.logger.log(`Seeding Default Settings`);\n await this.seedDefaultSettings();\n\n\n this.logger.debug(`Global metadata seeding completed`);\n }\n\n private async seedDefaultSystemFields() {\n await this.systemFieldsSeederService.seed();\n }\n\n\n // OK\n private async seedPermissions() {\n\n const controllers = this.solidRegistry.getControllers();\n const permissionNames: string[] = [];\n\n // Loop over the countries and create them.\n for (let id = 0; id < controllers.length; id++) {\n try {\n const controller = controllers[id];\n // this.logger.log(`Resolving controller: ${controller.name}`);\n\n const methods = controller.methods;\n for (let mId = 0; mId < methods.length; mId++) {\n\n const methodName = methods[mId];\n const permissionName = `${controller.name}.${methodName}`;\n permissionNames.push(permissionName);\n\n const existingPermission = await this.permissionRepo.findOne({\n where: {\n name: permissionName\n }\n });\n\n // if (existingPermission) {\n // this.logger.log(`Permission ${permissionName} already exists.`);\n // }\n // else { }\n\n if (!existingPermission) {\n\n this.logger.log(`Permission ${permissionName} does not exist, creating new.`);\n\n const newPermission = this.permissionRepo.create({\n name: permissionName\n });\n await this.permissionRepo.save(newPermission);\n\n\n }\n }\n\n } catch (error) {\n this.logger.error(error);\n }\n }\n\n if (this.enablePruning) {\n await this.prunePermissions(permissionNames);\n }\n }\n\n // OK\n // private async seedDefaultMediaStorageProviders() {\n // await this.mediaStorageProviderSeederService.seed();\n // }\n\n // OK\n private async seedMediaStorageProviders(mediaStorageProviders: any[]): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing Media Storage Provider`);\n\n for (let i = 0; i < mediaStorageProviders.length; i++) {\n const mediaStorageProvider = mediaStorageProviders[i];\n await this.mediaStorageProviderMetadataService.upsert(mediaStorageProvider);\n }\n this.logger.debug(`[End] Processing Media Storage Provider`);\n return { pruned: 0, upserted: mediaStorageProviders?.length ?? 0 };\n }\n\n private async seedModelSequences(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing model sequences`);\n const modelSequences: CreateModelSequenceDto[] = overallMetadata.modelSequences;\n const pruned = this.enablePruning ? await this.pruneModelSequences(modelSequences, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedModelSequences(modelSequences);\n this.logger.debug(`[End] Processing model sequences`);\n return { pruned, upserted: modelSequences?.length ?? 0 };\n }\n\n // OK\n private async handleSeedEmailTemplates(emailTemplates: CreateEmailTemplateDto[], moduleName: string) {\n if (!emailTemplates) {\n return;\n }\n\n for (let i = 0; i < emailTemplates.length; i++) {\n const emailTemplate = emailTemplates[i];\n // this.logger.log(`Found ${emailTemplate.name} email template`);\n\n // We need to load the actual template contents. \n if (moduleName === 'solid-core') {\n let moduleRoot: string | null = null;\n\n try {\n // Always resolve package.json, never the module entry\n moduleRoot = path.dirname(\n require.resolve('@solidxai/core/package.json'),\n );\n } catch (err) {\n this.logger.debug(\n 'Could not resolve @solidxai/core from node_modules, assuming local execution',\n );\n }\n\n const filePathInternal = 'src/seeders/seed-data/email-templates/';\n let filePath: string;\n // Case 1: solid-core installed as dependency\n if (moduleRoot) {\n filePath = path.join(\n moduleRoot,\n filePathInternal,\n emailTemplate.body,\n );\n }\n else {\n // Case 2: running INSIDE solid-core repo\n const localCoreRoot = process.cwd(); // or configurable root\n filePath = path.join(\n localCoreRoot,\n filePathInternal,\n emailTemplate.body,\n );\n }\n\n if (fs.existsSync(filePath)) {\n emailTemplate.body = fs.readFileSync(filePath, 'utf-8');\n }\n }\n else {\n // Check if file exists\n const emailTemplateHandlebar = `module-metadata/${moduleName}/email-templates/${emailTemplate.body}`\n const fullPath = path.join(process.cwd(), emailTemplateHandlebar);\n // this.logger.log(`Seeding custom email template from consuming model at path: ${fullPath}`);\n if (fs.existsSync(fullPath)) {\n emailTemplate.body = fs.readFileSync(fullPath, 'utf-8').toString();\n }\n }\n\n // Save to DB.\n await this.emailTemplateService.removeByName(emailTemplate.name);\n await this.emailTemplateService.create(emailTemplate);\n }\n\n }\n\n // Ok\n private async handleSeedSmsTemplates(smsTemplates: CreateSmsTemplateDto[], moduleName: string) {\n if (!smsTemplates) {\n return;\n }\n\n for (let i = 0; i < smsTemplates.length; i++) {\n const smsTemplate = smsTemplates[i];\n // this.logger.log(`Found ${smsTemplate.name} sms template`);\n\n // We need to load the actual template contents. \n if (moduleName === 'solid-core') {\n let moduleRoot: string | null = null;\n\n try {\n // Always resolve package.json, never the module entry\n moduleRoot = path.dirname(\n require.resolve('@solidxai/core/package.json'),\n );\n } catch (err) {\n this.logger.debug(\n 'Could not resolve @solidxai/core from node_modules, assuming local execution',\n );\n }\n\n const filePathInternal = 'src/seeders/seed-data/sms-templates/';\n let filePath: string;\n // Case 1: solid-core installed as dependency\n if (moduleRoot) {\n filePath = path.join(\n moduleRoot,\n filePathInternal,\n smsTemplate.body,\n );\n }\n else {\n // Case 2: running INSIDE solid-core repo\n const localCoreRoot = process.cwd(); // or configurable root\n filePath = path.join(\n localCoreRoot,\n filePathInternal,\n smsTemplate.body,\n );\n }\n\n if (fs.existsSync(filePath)) {\n smsTemplate.body = fs.readFileSync(filePath, 'utf-8');\n }\n }\n else {\n // Check if file exists\n const emailTemplateHandlebar = `module-metadata/${moduleName}/sms-templates/${smsTemplate.body}`\n const fullPath = path.join(process.cwd(), emailTemplateHandlebar);\n // this.logger.log(`Seeding custom sms template from consuming model at path: ${fullPath}`);\n if (fs.existsSync(fullPath)) {\n smsTemplate.body = fs.readFileSync(fullPath, 'utf-8').toString();\n }\n }\n\n\n // Save to DB.\n await this.smsTemplateService.removeByName(smsTemplate.name);\n await this.smsTemplateService.create(smsTemplate);\n }\n }\n\n // Ok\n private async handleSeedMenus(menus: any) {\n if (!menus) {\n return;\n }\n\n await this.dataSource.transaction(async (trx) => {\n const menuRepo = trx.getRepository(MenuItemMetadata);\n const roleRepo = trx.getRepository(RoleMetadata);\n const actionRepo = trx.getRepository(ActionMetadata);\n const moduleRepo = trx.getRepository(ModuleMetadata);\n\n // 1) Upsert menus WITHOUT roles (manual upsert)\n for (const m of menus) {\n const action = m.actionUserKey\n ? await actionRepo.findOne({ where: { name: m.actionUserKey }, select: [\"id\"] })\n : null;\n\n const module = m.moduleUserKey\n ? await moduleRepo.findOne({ where: { name: m.moduleUserKey }, select: [\"id\"] })\n : null;\n\n const parentMenuItem = m.parentMenuItemUserKey\n ? await menuRepo.findOne({ where: { name: m.parentMenuItemUserKey }, select: [\"id\"] })\n : null;\n\n // Check if a menu with this name already exists\n const existing = await menuRepo.findOne({\n where: { name: m.name },\n select: [\"id\"],\n });\n\n // Build the entity data (without id)\n const base = {\n name: m.name,\n displayName: m.displayName,\n action,\n module,\n parentMenuItem,\n sequenceNumber: m.sequenceNumber,\n iconName: m.iconName,\n };\n\n // If existing, set its id so save() will perform an update, otherwise insert\n const entity = menuRepo.create(\n existing ? { id: existing.id, ...base } : base,\n );\n\n await menuRepo.save(entity);\n }\n\n // 2) Fetch ids for batching\n const seeded = await menuRepo.find({\n where: { name: In(menus.map((m: any) => m.name)) },\n select: [\"id\", \"name\"],\n });\n const idByName = new Map(seeded.map(s => [s.name, s.id]));\n\n // 3) Build desired join rows once\n const admin = await roleRepo.findOne({ where: { name: ADMIN_ROLE_NAME }, select: [\"id\", \"name\"] });\n const allRoleNames = new Set<string>();\n for (const m of menus) (m.roles ?? []).forEach((r: string) => allRoleNames.add(r));\n if (admin) allRoleNames.add(admin.name);\n\n const roles = await roleRepo.find({\n where: { name: In([...allRoleNames]) },\n select: [\"id\", \"name\"],\n });\n const roleByName = new Map(roles.map(r => [r.name, r]));\n\n const joinRows: Array<{ menuId: number; roleId: number }> = [];\n for (const m of menus) {\n const menuId = idByName.get(m.name)!;\n const roleNames = new Set<string>([...(m.roles ?? []), admin?.name].filter(Boolean) as string[]);\n for (const rn of roleNames) {\n const role = roleByName.get(rn);\n if (role) joinRows.push({ menuId, roleId: role.id });\n }\n }\n\n // 4) Replace in bulk — no orIgnore, safe for MSSQL\n // 4a) delete existing for affected menus\n const menuIds = [...new Set(joinRows.map(r => r.menuId))];\n if (menuIds.length) {\n await trx\n .createQueryBuilder()\n .delete()\n .from(MENU_ROLE_JOIN_TABLE_NAME) // string table name is fine\n .where(`${MENU_ROLE_JOIN_TABLE_NAME_MENU_COL} IN (:...ids)`, { ids: menuIds })\n .execute();\n }\n\n // 4b) bulk insert all pairs\n if (joinRows.length) {\n const values = joinRows.map(r => ({\n [MENU_ROLE_JOIN_TABLE_NAME_MENU_COL]: r.menuId,\n [MENU_ROLE_JOIN_TABLE_NAME_ROLE_COL]: r.roleId,\n }));\n\n await trx\n .createQueryBuilder()\n .insert()\n .into(MENU_ROLE_JOIN_TABLE_NAME)\n .values(values)\n // .orIgnore() // ❌ remove this – it triggers unsupported onUpdate path\n .execute();\n }\n });\n }\n\n // Ok\n private async handleSeedActions(actions: any) {\n if (!actions) {\n return;\n }\n\n for (let j = 0; j < actions.length; j++) {\n const actionData = actions[j];\n actionData['module'] = await this.moduleMetadataService.findOneByUserKey(actionData.moduleUserKey);\n if (actionData.type === 'solid') {\n actionData['model'] = await this.modelMetadataService.findOneByUserKey(actionData.modelUserKey);\n actionData['view'] = await this.solidViewService.findOneByUserKey(actionData.viewUserKey);\n }\n else {\n if (actionData.modelUserKey) {\n actionData['model'] = await this.modelMetadataService.findOneByUserKey(actionData.modelUserKey);\n }\n }\n await this.solidActionService.upsert(actionData);\n }\n }\n\n // Ok\n private async handleSeedViews(views: any) {\n if (!views) {\n return;\n }\n\n for (let j = 0; j < views.length; j++) {\n const viewData = views[j];\n\n // preety format the layout & context. \n viewData['layout'] = JSON.stringify(viewData['layout'], null, 2);\n\n viewData['module'] = await this.moduleMetadataService.findOneByUserKey(viewData.moduleUserKey);\n viewData['model'] = await this.modelMetadataService.findOneByUserKey(viewData.modelUserKey);\n\n // Changed the below to upsert as now we are saving modifications to the view json to file system also.\n await this.solidViewService.upsert(viewData);\n }\n }\n\n // OK\n private async handleSeedUsers(users) {\n if (!users) {\n return;\n }\n\n for (let l = 0; l < users.length; l++) {\n const user: SignUpDto = users[l];\n let exisitingUser = await this.userService.findOneByUsername(user.username);\n if (!exisitingUser) {\n let generatedAdminPassword: string | null = null;\n if (user.username === 'sa') {\n generatedAdminPassword = uuidv4();\n user.password = generatedAdminPassword;\n }\n\n exisitingUser = await this.authenticationService.signUp(user);\n this.logger.log(`Newly created user ${user.username}`);\n\n // Surface the generated SA password clearly to the operator.\n if (generatedAdminPassword) {\n const banner = [\n '',\n '============================================================',\n ' SYSTEM ADMIN USER CREATED',\n '------------------------------------------------------------',\n ' Username : sa',\n ` Password : ${generatedAdminPassword}`,\n '',\n ' Copy and store this password securely now.',\n ' It is shown only once during seeding.',\n '============================================================',\n ''\n ].join('\\n');\n // Use console.log to ensure visibility even if logger formatting changes.\n console.log(banner);\n }\n }\n //FIXME: Create the user roles assignment logic here.\n // now add Roles to user.\n // for (let m = 0; m < roles.length; m++) {\n // const role = roles[m];\n // await this.userService.addRoleToUser(user.email, role.name);\n // }\n }\n }\n\n // OK\n private async seedModuleModelFields(moduleMetadata: CreateModuleMetadataDto): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing module metadata`);\n\n // First we create the module. \n const module = await this.moduleMetadataService.upsert(moduleMetadata);\n let pruned = 0;\n let upserted = 1;\n\n // Next create all the models. \n const modelsMetadata: CreateModelMetadataDto[] = moduleMetadata.models;\n upserted += modelsMetadata?.length ?? 0;\n for (let j = 0; j < modelsMetadata.length; j++) {\n const modelMetadata = modelsMetadata[j];\n\n // Before creating the model, we need to make sure we are linking it to the newly created module.\n modelMetadata['module'] = module;\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = modelMetadata;\n\n // Load and set the parent model if it exists.\n if (modelMetadata.isChild && modelMetadata.parentModelUserKey) {\n const parentModel = await this.modelMetadataService.findOneByUserKey(modelMetadata.parentModelUserKey);\n modelMetaDataWithoutFields['parentModel'] = parentModel;\n }\n\n await this.modelMetadataService.upsert(modelMetaDataWithoutFields);\n const model = await this.modelMetadataService.findOneBySingularName(modelMetadata.singularName)\n\n // iterate over all fields and upsert. \n if (this.enablePruning) {\n pruned += await this.pruneFieldsForModel(model, fieldsMetadata);\n }\n let userKeyField = null;\n const userKeyFieldName = modelMetadata.userKeyFieldUserKey;\n upserted += fieldsMetadata?.length ?? 0;\n for (let k = 0; k < fieldsMetadata.length; k++) {\n const fieldMetadata = fieldsMetadata[k];\n\n // Link model & mediaStorageProvider. \n fieldMetadata['model'] = model;\n if (fieldMetadata.mediaStorageProviderUserKey) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOneByUserKey(fieldMetadata.mediaStorageProviderUserKey);\n }\n // console.log(fieldMetadata.displayName);\n\n const affectedField = await this.fieldMetadataService.upsert(fieldMetadata);\n if (fieldMetadata.name === userKeyFieldName || fieldMetadata.isUserKey) {\n const { model, ...fieldData } = affectedField;\n userKeyField = fieldData;\n }\n }\n\n // Now that we have created fields & model update the model to stamp the userKeyField. \n if (userKeyField) {\n modelMetaDataWithoutFields['userKeyField'] = userKeyField;\n await this.modelMetadataService.upsert(modelMetaDataWithoutFields);\n }\n }\n if (this.enablePruning) {\n pruned += await this.pruneModels(modelsMetadata, moduleMetadata.name);\n }\n this.logger.debug(`[End] Processing module metadata`);\n return { pruned, upserted };\n }\n\n\n private async handleSeedSecurityRules(rulesDto: CreateSecurityRuleDto[]) {\n if (!rulesDto || rulesDto.length === 0) {\n this.logger.debug(`No security rules found to seed`);\n return;\n }\n for (const dto of rulesDto) {\n await this.securityRuleRepo.upsertWithDto({ ...dto, securityRuleConfig: JSON.stringify(dto.securityRuleConfig) });\n }\n }\n\n // Not Ok\n private async handleSeedListOfValues(listOfValuesDto: CreateListOfValuesDto[]) {\n if (!listOfValuesDto || listOfValuesDto.length === 0) {\n this.logger.debug(`No List Of Values found to seed`);\n return;\n }\n for (let j = 0; j < listOfValuesDto.length; j++) {\n const listOfValueDto = listOfValuesDto[j];\n listOfValueDto['module'] = await this.moduleMetadataService.findOneByUserKey(listOfValueDto.moduleUserKey);\n await this.listOfValuesService.upsert(listOfValuesDto[j]);\n }\n }\n\n private async handleSeedDashboards(dashboardDtos: CreateDashboardDto[]) {\n if (!dashboardDtos || dashboardDtos.length === 0) {\n this.logger.debug(`No dashboards found to seed`);\n return;\n }\n for (const dto of dashboardDtos) {\n await this.dashboardRepo.upsertWithDto(dto);\n }\n }\n\n private async handleSeedScheduledJobs(createScheduledJobDto: CreateScheduledJobDto[]) {\n if (!createScheduledJobDto || createScheduledJobDto.length === 0) {\n this.logger.debug(`No scheduled jobs found to seed`);\n return;\n }\n for (const dto of createScheduledJobDto) {\n await this.scheduledJobRepository.upsertWithDto(dto);\n }\n }\n\n private async handleSeedSavedFilters(createSavedFilterDto: CreateSavedFiltersDto[]) {\n if (!createSavedFilterDto || createSavedFilterDto.length === 0) {\n this.logger.debug(`No saved filters found to seed`);\n return;\n }\n for (const dto of createSavedFilterDto) {\n await this.savedFiltersRepo.upsertWithDto({ ...dto, filterQueryJson: JSON.stringify(dto.filterQueryJson) });\n }\n }\n\n private async handleSeedModelSequences(modelSequencesDto: CreateModelSequenceDto[]) {\n if (!modelSequencesDto || modelSequencesDto.length === 0) {\n this.logger.debug(`No Model Sequences found to seed`);\n return;\n }\n for (const dto of modelSequencesDto) {\n await this.modelSequenceRepo.upsertWithDto(dto);\n }\n }\n\n private async pruneModelSequences(modelSequencesDto: CreateModelSequenceDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping model sequence prune: missing module name in metadata.`);\n return 0;\n }\n const sequences = modelSequencesDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping model sequence prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const sequenceNames = [...new Set(sequences.map(dto => dto.sequenceName).filter(Boolean))];\n const repo = this.dataSource.getRepository(ModelSequence);\n const idsToDeleteQuery = repo\n .createQueryBuilder('ms')\n .select('ms.id', 'id')\n .innerJoin('ms.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (sequenceNames.length > 0) {\n idsToDeleteQuery.andWhere('ms.sequenceName NOT IN (:...sequenceNames)', { sequenceNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ModelSequence)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneSavedFilters(savedFiltersDto: CreateSavedFiltersDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping saved filters prune: missing module name in metadata.`);\n return 0;\n }\n const savedFilters = savedFiltersDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping saved filters prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const filterNames = [...new Set(savedFilters.map(dto => dto.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(SavedFilters);\n const idsToDeleteQuery = repo\n .createQueryBuilder('sf')\n .select('sf.id', 'id')\n .innerJoin('sf.view', 'view')\n .innerJoin('view.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (filterNames.length > 0) {\n idsToDeleteQuery.andWhere('sf.name NOT IN (:...filterNames)', { filterNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(SavedFilters)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneScheduledJobs(scheduledJobsDto: CreateScheduledJobDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping scheduled jobs prune: missing module name in metadata.`);\n return 0;\n }\n const scheduledJobs = scheduledJobsDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping scheduled jobs prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const scheduleNames = [...new Set(scheduledJobs.map(dto => dto.scheduleName).filter(Boolean))];\n const repo = this.dataSource.getRepository(ScheduledJob);\n const idsToDeleteQuery = repo\n .createQueryBuilder('sj')\n .select('sj.id', 'id')\n .innerJoin('sj.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (scheduleNames.length > 0) {\n idsToDeleteQuery.andWhere('sj.scheduleName NOT IN (:...scheduleNames)', { scheduleNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ScheduledJob)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneSecurityRules(securityRulesDto: CreateSecurityRuleDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping security rules prune: missing module name in metadata.`);\n return 0;\n }\n const securityRules = securityRulesDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping security rules prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const ruleNames = [...new Set(securityRules.map(dto => dto.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(SecurityRule);\n const idsToDeleteQuery = repo\n .createQueryBuilder('sr')\n .select('sr.id', 'id')\n .innerJoin('sr.modelMetadata', 'model')\n .innerJoin('model.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (ruleNames.length > 0) {\n idsToDeleteQuery.andWhere('sr.name NOT IN (:...ruleNames)', { ruleNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(SecurityRule)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneListOfValues(listOfValuesDto: CreateListOfValuesDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping list of values prune: missing module name in metadata.`);\n return 0;\n }\n const listOfValues = listOfValuesDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping list of values prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const pairs = listOfValues\n .filter(dto => dto.type && dto.value)\n .map(dto => ({ type: dto.type, value: dto.value }));\n const repo = this.dataSource.getRepository(ListOfValues);\n const idsToDeleteQuery = repo\n .createQueryBuilder('lov')\n .select('lov.id', 'id')\n .innerJoin('lov.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (pairs.length > 0) {\n const conditions = pairs.map((_, i) => `(lov.type = :t${i} AND lov.value = :v${i})`).join(' OR ');\n const params = pairs.reduce((acc, pair, i) => {\n acc[`t${i}`] = pair.type;\n acc[`v${i}`] = pair.value;\n return acc;\n }, {} as Record<string, string>);\n\n idsToDeleteQuery.andWhere(`NOT (${conditions})`, params);\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ListOfValues)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneDashboards(dashboardsDto: CreateDashboardDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping dashboards prune: missing module name in metadata.`);\n return 0;\n }\n const dashboards = dashboardsDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping dashboards prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const dashboardNames = [...new Set(dashboards.map(dto => dto.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(Dashboard);\n const idsToDeleteQuery = repo\n .createQueryBuilder('db')\n .select('db.id', 'id')\n .innerJoin('db.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (dashboardNames.length > 0) {\n idsToDeleteQuery.andWhere('db.name NOT IN (:...dashboardNames)', { dashboardNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(Dashboard)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneMenus(menusDto: any[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping menus prune: missing module name in metadata.`);\n return 0;\n }\n const menus = menusDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping menus prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const menuNames = [...new Set(menus.map(m => m.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(MenuItemMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('menu')\n .select('menu.id', 'id')\n .innerJoin('menu.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (menuNames.length > 0) {\n idsToDeleteQuery.andWhere('menu.name NOT IN (:...menuNames)', { menuNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n await this.dataSource\n .createQueryBuilder()\n .delete()\n .from(MENU_ROLE_JOIN_TABLE_NAME)\n .where(`${MENU_ROLE_JOIN_TABLE_NAME_MENU_COL} IN (:...ids)`, { ids })\n .execute();\n }\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(MenuItemMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneViews(viewsDto: any[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping views prune: missing module name in metadata.`);\n return 0;\n }\n const views = viewsDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping views prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const viewNames = [...new Set(views.map((v: any) => v.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(ViewMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('view')\n .select('view.id', 'id')\n .innerJoin('view.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (viewNames.length > 0) {\n idsToDeleteQuery.andWhere('view.name NOT IN (:...viewNames)', { viewNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n // Delete actions tied to these views before deleting the views themselves.\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const actionRows = await actionRepo\n .createQueryBuilder('action')\n .select('action.id', 'id')\n .innerJoin('action.view', 'view')\n .where('view.id IN (:...viewIds)', { viewIds: ids })\n .getRawMany();\n const actionIds = actionRows.map((row) => row.id);\n if (actionIds.length > 0) {\n const result = await actionRepo\n .createQueryBuilder()\n .delete()\n .from(ActionMetadata)\n .whereInIds(actionIds)\n .execute();\n if ((result.affected ?? 0) === 0) {\n this.logger.warn(`No actions deleted for pruned views in module ${moduleName}.`);\n }\n }\n\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ViewMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneActions(actionsDto: any[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping actions prune: missing module name in metadata.`);\n return 0;\n }\n const actions = actionsDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping actions prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const actionNames = [...new Set(actions.map((a: any) => a.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(ActionMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('action')\n .select('action.id', 'id')\n .innerJoin('action.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (actionNames.length > 0) {\n idsToDeleteQuery.andWhere('action.name NOT IN (:...actionNames)', { actionNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const menuRepo = this.dataSource.getRepository(MenuItemMetadata);\n const menuRows = await menuRepo\n .createQueryBuilder('menu')\n .select('menu.id', 'id')\n .innerJoin('menu.action', 'action')\n .where('action.id IN (:...actionIds)', { actionIds: ids })\n .getRawMany();\n const menuIds = menuRows.map((row) => row.id);\n\n if (menuIds.length > 0) {\n await this.dataSource\n .createQueryBuilder()\n .delete()\n .from(MENU_ROLE_JOIN_TABLE_NAME)\n .where(`${MENU_ROLE_JOIN_TABLE_NAME_MENU_COL} IN (:...ids)`, { ids: menuIds })\n .execute();\n\n await menuRepo\n .createQueryBuilder()\n .delete()\n .from(MenuItemMetadata)\n .whereInIds(menuIds)\n .execute();\n }\n\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ActionMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneFieldsForModel(model: any, fieldsMetadata: any[] | undefined): Promise<number> {\n if (!model) {\n this.logger.warn(`Skipping fields prune: model not found.`);\n return 0;\n }\n const fields = fieldsMetadata ?? [];\n\n const fieldNames = [...new Set(fields.map(f => f.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(FieldMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('field')\n .select('field.id', 'id')\n .innerJoin('field.model', 'model')\n .where('model.id = :modelId', { modelId: model.id })\n .andWhere('field.isSystem = :isSystem', { isSystem: false });\n\n if (fieldNames.length > 0) {\n idsToDeleteQuery.andWhere('field.name NOT IN (:...fieldNames)', { fieldNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(FieldMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneModels(modelsMetadata: CreateModelMetadataDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping models prune: missing module name in metadata.`);\n return 0;\n }\n const models = modelsMetadata ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping models prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const modelNames = [...new Set(models.map(m => m.singularName).filter(Boolean))];\n const repo = this.dataSource.getRepository(ModelMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('model')\n .select('model.id', 'id')\n .innerJoin('model.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id })\n .andWhere('model.isSystem = :isSystem', { isSystem: false });\n\n if (modelNames.length > 0) {\n idsToDeleteQuery.andWhere('model.singularName NOT IN (:...modelNames)', { modelNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ModelMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private getRolePermissionJoinInfo(): { tableName: string; permissionIdColumn: string } | null {\n const roleMetadata = this.dataSource.getMetadata(RoleMetadata);\n const relation = roleMetadata.relations.find((r) => r.propertyName === 'permissions');\n if (!relation || !relation.junctionEntityMetadata) {\n this.logger.warn(`Role-permission join table metadata not found; skipping join cleanup.`);\n return null;\n }\n\n const permissionIdColumn = relation.inverseJoinColumns[0]?.databaseName;\n if (!permissionIdColumn) {\n this.logger.warn(`Role-permission join column not found; skipping join cleanup.`);\n return null;\n }\n\n return {\n tableName: relation.junctionEntityMetadata.tableName,\n permissionIdColumn,\n };\n }\n\n private async prunePermissions(permissionNames: string[]): Promise<number> {\n const uniqueNames = [...new Set(permissionNames.filter(Boolean))];\n const repo = this.dataSource.getRepository(PermissionMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('perm')\n .select('perm.id', 'id');\n\n if (uniqueNames.length > 0) {\n idsToDeleteQuery.andWhere('perm.name NOT IN (:...names)', { names: uniqueNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n // Commented out to allow pruning when metadata is empty/missing.\n // if (ids.length === 0) {\n // return;\n // }\n\n const joinInfo = this.getRolePermissionJoinInfo();\n if (joinInfo && ids.length > 0) {\n await this.dataSource\n .createQueryBuilder()\n .delete()\n .from(joinInfo.tableName)\n .where(`${joinInfo.permissionIdColumn} IN (:...ids)`, { ids })\n .execute();\n }\n\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(PermissionMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n // private async resolvePruningChoice(conf?: any): Promise<boolean> {\n // if (typeof conf?.pruneMetadata === 'boolean') {\n // return conf.pruneMetadata;\n // }\n // if (!process.stdin.isTTY) {\n // return false;\n // }\n\n // const rl = readline.createInterface({\n // input: process.stdin,\n // output: process.stdout,\n // });\n\n // const question = `Prune metadata entries not in JSON? (y/N) `;\n // const answer: string = await new Promise((resolve) => {\n // rl.question(question, (input) => resolve(input));\n // });\n // rl.close();\n\n // return answer.trim().toLowerCase().startsWith('y');\n // }\n\n private formatSeedResult(moduleName: string, label: string, counts: { pruned: number; upserted: number }): string {\n if (this.enablePruning) {\n return `✔ [${moduleName}] ${label} seeded (pruned ${counts.pruned}, upserted ${counts.upserted})`;\n }\n return `✔ [${moduleName}] ${label} seeded (upserted ${counts.upserted})`;\n }\n\n}\n"]}
1
+ {"version":3,"file":"module-metadata-seeder.service.js","sourceRoot":"","sources":["../../src/seeders/module-metadata-seeder.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAwE;AACxE,uCAAyB;AACzB,2CAA6B;AAQ7B,6EAA0E;AAC1E,qFAAiF;AACjF,+EAA4E;AAC5E,+EAA2E;AAC3E,+EAA0E;AAC1E,iEAA8D;AAC9D,2EAAuE;AACvE,2DAAwD;AACxD,qCAAyC;AAGzC,4DAAgF;AAChF,8DAA0D;AAC1D,iFAA4E;AAC5E,+EAA0E;AAC1E,iHAA0G;AAC1G,+EAA0E;AAC1E,iFAA4E;AAC5E,6EAAwE;AACxE,6EAAwE;AACxE,oGAAqE;AACrE,iFAA2E;AAE3E,4BAAwN;AACxN,+EAA2F;AAG3F,iGAA6F;AAC7F,qFAAiF;AACjF,qFAAiF;AACjF,yEAAsE;AAEtE,uFAAmF;AACnF,6EAAmE;AACnE,2EAAiE;AACjE,2EAAiE;AACjE,2EAAiE;AACjE,6EAAkE;AAClE,mEAA0D;AAC1D,6EAAmE;AACnE,6EAAmE;AACnE,uFAA6E;AAC7E,2EAAiE;AAI1D,IAAM,2BAA2B,mCAAjC,MAAM,2BAA2B;IAIpC,YACqB,qBAA4C,EAE7D,oBAA2D,EAC1C,oBAA0C,EAC1C,mCAAwE,EACxE,WAAgC,EAChC,WAAwB,EACxB,qBAA4C,EAC5C,kBAAyC,EACzC,gBAAqC,EACrC,oBAA0C,EAC1C,kBAAsC,EACtC,mBAAwC,EAGxC,cAA4C,EAC5C,aAA4B,EAC5B,cAA8B,EAG9B,YAA+B,EACvC,gBAAwC,EACxC,yBAAoD,EACpD,aAAkC,EAClC,sBAA8C,EAC9C,gBAAwC,EACxC,UAAsB,EACtB,iBAA0C;QA3BlC,0BAAqB,GAArB,qBAAqB,CAAuB;QAE5C,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,wCAAmC,GAAnC,mCAAmC,CAAqC;QACxE,gBAAW,GAAX,WAAW,CAAqB;QAChC,gBAAW,GAAX,WAAW,CAAa;QACxB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,uBAAkB,GAAlB,kBAAkB,CAAuB;QACzC,qBAAgB,GAAhB,gBAAgB,CAAqB;QACrC,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,wBAAmB,GAAnB,mBAAmB,CAAqB;QAGxC,mBAAc,GAAd,cAAc,CAA8B;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAG9B,iBAAY,GAAZ,YAAY,CAAmB;QACvC,qBAAgB,GAAhB,gBAAgB,CAAwB;QACxC,8BAAyB,GAAzB,yBAAyB,CAA2B;QACpD,kBAAa,GAAb,aAAa,CAAqB;QAClC,2BAAsB,GAAtB,sBAAsB,CAAwB;QAC9C,qBAAgB,GAAhB,gBAAgB,CAAwB;QACxC,eAAU,GAAV,UAAU,CAAY;QACtB,sBAAiB,GAAjB,iBAAiB,CAAyB;QA/BtC,WAAM,GAAG,IAAI,eAAM,CAAC,6BAA2B,CAAC,IAAI,CAAC,CAAC;QAC/D,kBAAa,GAAY,KAAK,CAAC;IA+BnC,CAAC;IAEL,KAAK,CAAC,IAAI,CAAC,IAAU;QACjB,IAAI,aAAa,GAAG,QAAQ,CAAC;QAC7B,IAAI,WAAW,GAAG,WAAW,CAAC;QAC9B,IAAI,aAAa,GAAoB,IAAI,CAAC;QAE1C,IAAI,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,kEAAkE,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC;YAG7J,WAAW,GAAG,oBAAoB,CAAC;YACnC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAIhC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAOpG,WAAW,GAAG,sBAAsB,CAAC;YACrC,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5C,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,iDAAiD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+CAA+C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/F,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YACvE,CAAC;YAGD,MAAM,qBAAqB,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAEhJ,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;gBACxE,OAAO;YACX,CAAC;YAID,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpD,MAAM,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,cAAc,GAA4B,eAAe,CAAC,cAAc,CAAC;gBAC/E,aAAa,GAAG,cAAc,EAAE,IAAI,IAAI,SAAS,CAAC;gBAElD,OAAO,CAAC,GAAG,CAAC,kCAAkC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;gBAGvE,WAAW,GAAG,uBAAuB,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBACnD,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;gBAChF,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,EAAE,CAAC,CAAC;gBAE5G,WAAW,GAAG,2BAA2B,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBACnD,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;gBACvG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,yBAAyB,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAE5G,WAAW,GAAG,WAAW,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;gBAElF,WAAW,GAAG,WAAW,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;gBAElF,WAAW,GAAG,WAAW,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;gBAElF,WAAW,GAAG,aAAa,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACnC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;gBAEtF,WAAW,GAAG,WAAW,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;gBAElF,WAAW,GAAG,oBAAoB,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBAC3C,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;gBAChG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;gBAErG,WAAW,GAAG,kBAAkB,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACzC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC5F,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBAEjG,WAAW,GAAG,mBAAmB,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;gBAC1C,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;gBACzE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAEnG,WAAW,GAAG,kBAAkB,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;gBAC1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;gBAE1F,WAAW,GAAG,gBAAgB,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBACtC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;gBACnF,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;gBAE5F,WAAW,GAAG,mBAAmB,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;gBAC1C,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;gBACzF,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAEnG,WAAW,GAAG,kBAAkB,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACzC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;gBACvF,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBAEjG,WAAW,GAAG,oBAAoB,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBAC3C,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACzG,CAAC;YAED,aAAa,GAAG,QAAQ,CAAC;YACzB,WAAW,GAAG,kCAAkC,CAAC;YACjD,MAAM,IAAI,CAAC,gCAAgC,EAAE,CAAC;YAG9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAKxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;gBAC7B,UAAU,EAAE,aAAa;gBACzB,IAAI,EAAE,WAAW;gBACjB,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,aAAa;aAChB,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,cAAuC,EAAE,eAAoB;QACzF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,aAAa,GAA4B,eAAe,CAAC,aAAa,CAAC;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,IAAI,aAAa,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,cAAuC,EAAE,eAAoB;QACxF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACjF,MAAM,YAAY,GAA4B,eAAe,CAAC,YAAY,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,IAAI,YAAY,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,cAAuC,EAAE,eAAoB;QACtF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAyB,eAAe,CAAC,UAAU,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,cAAuC,EAAE,eAAoB;QACxF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,YAAY,GAA4B,eAAe,CAAC,YAAY,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,MAAM,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,gCAAgC;QAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,0CAAe,CAAC,CAAC;IAQpE,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,eAAoB;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,MAAM,aAAa,GAA4B,eAAe,CAAC,aAAa,CAAC;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5H,MAAM,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IAC5D,CAAC;IAGO,KAAK,CAAC,mBAAmB;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,cAAc,CAAC,uCAAuC,EAAE,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,eAAoB,EAAE,UAAkB;QACnE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,MAAM,YAAY,GAA2B,eAAe,CAAC,YAAY,CAAC;QAC1E,MAAM,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IAC9D,CAAC;IAGO,KAAK,CAAC,kBAAkB,CAAC,eAAoB,EAAE,UAAkB;QACrE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,MAAM,cAAc,GAA6B,eAAe,CAAC,cAAc,CAAC;QAChF,MAAM,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IAChE,CAAC;IAGO,KAAK,CAAC,SAAS,CAAC,eAAoB;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5G,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IACpD,CAAC;IAGO,KAAK,CAAC,WAAW,CAAC,eAAoB;QAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IACtD,CAAC;IAGO,KAAK,CAAC,SAAS,CAAC,eAAoB;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5G,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IACpD,CAAC;IAGO,KAAK,CAAC,SAAS,CAAC,eAAoB;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;QAEpC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IACvD,CAAC;IAGO,KAAK,CAAC,SAAS,CAAC,eAAoB;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAE9C,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAGlH,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IACvE,CAAC;IAGD,IAAY,aAAa;QACrB,MAAM,sBAAsB,GAAG,eAAe,CAAC,kCAAiB,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAE/C,MAAM,cAAc,GAAG,IAAA,oDAAoC,GAAE,CAAC;QAC9D,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YACzC,MAAM,qBAAqB,GAAG,mBAAmB,aAAa,IAAI,aAAa,gBAAgB,CAAC;YAChG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAEjE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvE,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACxC,CAAC;QACL,CAAC;QAED,OAAO,aAAa,CAAC;IACzB,CAAC;IAGO,KAAK,CAAC,kBAAkB;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAK7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAGrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAGjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,uBAAuB;QACjC,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IAGO,KAAK,CAAC,eAAe;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QACxD,MAAM,eAAe,GAAa,EAAE,CAAC;QAGrC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACD,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;gBAGnC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;gBACnC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;oBAE5C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAChC,MAAM,cAAc,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC1D,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAErC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;wBACzD,KAAK,EAAE;4BACH,IAAI,EAAE,cAAc;yBACvB;qBACJ,CAAC,CAAC;oBAOH,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAEtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,cAAc,gCAAgC,CAAC,CAAC;wBAE9E,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;4BAC7C,IAAI,EAAE,cAAc;yBACvB,CAAC,CAAC;wBACH,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAGlD,CAAC;gBACL,CAAC;YAEL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAQO,KAAK,CAAC,yBAAyB,CAAC,qBAA4B;QAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IACvE,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,eAAoB;QACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,MAAM,cAAc,GAA6B,eAAe,CAAC,cAAc,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9H,MAAM,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7D,CAAC;IAGO,KAAK,CAAC,wBAAwB,CAAC,cAAwC,EAAE,UAAkB;QAC/F,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAIxC,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAC9B,IAAI,UAAU,GAAkB,IAAI,CAAC;gBAErC,IAAI,CAAC;oBAED,UAAU,GAAG,IAAI,CAAC,OAAO,CACrB,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CACjD,CAAC;gBACN,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,8EAA8E,CACjF,CAAC;gBACN,CAAC;gBAED,MAAM,gBAAgB,GAAG,wCAAwC,CAAC;gBAClE,IAAI,QAAgB,CAAC;gBAErB,IAAI,UAAU,EAAE,CAAC;oBACb,QAAQ,GAAG,IAAI,CAAC,IAAI,CAChB,UAAU,EACV,gBAAgB,EAChB,aAAa,CAAC,IAAI,CACrB,CAAC;gBACN,CAAC;qBACI,CAAC;oBAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBACpC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAChB,aAAa,EACb,gBAAgB,EAChB,aAAa,CAAC,IAAI,CACrB,CAAC;gBACN,CAAC;gBAED,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,aAAa,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC5D,CAAC;YACL,CAAC;iBACI,CAAC;gBAEF,MAAM,sBAAsB,GAAG,mBAAmB,UAAU,oBAAoB,aAAa,CAAC,IAAI,EAAE,CAAA;gBACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;gBAElE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,aAAa,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACvE,CAAC;YACL,CAAC;YAGD,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC;IAEL,CAAC;IAGO,KAAK,CAAC,sBAAsB,CAAC,YAAoC,EAAE,UAAkB;QACzF,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAIpC,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAC9B,IAAI,UAAU,GAAkB,IAAI,CAAC;gBAErC,IAAI,CAAC;oBAED,UAAU,GAAG,IAAI,CAAC,OAAO,CACrB,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CACjD,CAAC;gBACN,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,8EAA8E,CACjF,CAAC;gBACN,CAAC;gBAED,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;gBAChE,IAAI,QAAgB,CAAC;gBAErB,IAAI,UAAU,EAAE,CAAC;oBACb,QAAQ,GAAG,IAAI,CAAC,IAAI,CAChB,UAAU,EACV,gBAAgB,EAChB,WAAW,CAAC,IAAI,CACnB,CAAC;gBACN,CAAC;qBACI,CAAC;oBAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBACpC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAChB,aAAa,EACb,gBAAgB,EAChB,WAAW,CAAC,IAAI,CACnB,CAAC;gBACN,CAAC;gBAED,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC1D,CAAC;YACL,CAAC;iBACI,CAAC;gBAEF,MAAM,sBAAsB,GAAG,mBAAmB,UAAU,kBAAkB,WAAW,CAAC,IAAI,EAAE,CAAA;gBAChG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;gBAElE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACrE,CAAC;YACL,CAAC;YAID,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAGO,KAAK,CAAC,eAAe,CAAC,KAAU;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO;QACX,CAAC;QAED,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5C,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,sBAAgB,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,kBAAY,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAc,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAc,CAAC,CAAC;YAGrD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa;oBAC1B,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChF,CAAC,CAAC,IAAI,CAAC;gBAEX,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa;oBAC1B,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChF,CAAC,CAAC,IAAI,CAAC;gBAEX,MAAM,cAAc,GAAG,CAAC,CAAC,qBAAqB;oBAC1C,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtF,CAAC,CAAC,IAAI,CAAC;gBAGX,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;oBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;oBACvB,MAAM,EAAE,CAAC,IAAI,CAAC;iBACjB,CAAC,CAAC;gBAGH,MAAM,IAAI,GAAG;oBACT,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,MAAM;oBACN,MAAM;oBACN,cAAc;oBACd,cAAc,EAAE,CAAC,CAAC,cAAc;oBAChC,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACvB,CAAC;gBAGF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAC1B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACjD,CAAC;gBAEF,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;YAGD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;gBAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,IAAA,YAAE,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;gBAClD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;aACzB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAG1D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,0CAAe,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACnG,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,IAAI,KAAK;gBAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAExC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;gBAC9B,KAAK,EAAE,EAAE,IAAI,EAAE,IAAA,YAAE,EAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE;gBACtC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;aACzB,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAExD,MAAM,QAAQ,GAA8C,EAAE,CAAC;YAC/D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC,CAAC;gBACjG,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChC,IAAI,IAAI;wBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzD,CAAC;YACL,CAAC;YAID,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,GAAG;qBACJ,kBAAkB,EAAE;qBACpB,MAAM,EAAE;qBACR,IAAI,CAAC,+BAAyB,CAAC;qBAC/B,KAAK,CAAC,GAAG,wCAAkC,eAAe,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;qBAC7E,OAAO,EAAE,CAAC;YACnB,CAAC;YAGD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC9B,CAAC,wCAAkC,CAAC,EAAE,CAAC,CAAC,MAAM;oBAC9C,CAAC,wCAAkC,CAAC,EAAE,CAAC,CAAC,MAAM;iBACjD,CAAC,CAAC,CAAC;gBAEJ,MAAM,GAAG;qBACJ,kBAAkB,EAAE;qBACpB,MAAM,EAAE;qBACR,IAAI,CAAC,+BAAyB,CAAC;qBAC/B,MAAM,CAAC,MAAM,CAAC;qBAEd,OAAO,EAAE,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAGO,KAAK,CAAC,iBAAiB,CAAC,OAAY;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACnG,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC9B,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAChG,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC9F,CAAC;iBACI,CAAC;gBACF,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;oBAC1B,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACpG,CAAC;YACL,CAAC;YACD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAGO,KAAK,CAAC,eAAe,CAAC,KAAU;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO;QACX,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAG1B,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAEjE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC/F,QAAQ,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAG5F,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAGO,KAAK,CAAC,eAAe,CAAC,KAAkB;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO;QACX,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAc,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5E,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACzB,IAAI,CAAC,QAAQ,GAAG,yBAAmB,CAAC;gBACxC,CAAC;gBAED,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3D,CAAC;QAOL,CAAC;IACL,CAAC;IAGO,KAAK,CAAC,qBAAqB,CAAC,cAAuC;QACvE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAGxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,CAAC;QAGjB,MAAM,cAAc,GAA6B,cAAc,CAAC,MAAM,CAAC;QACvE,QAAQ,IAAI,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAGxC,aAAa,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YACjC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,0BAA0B,EAAE,GAAG,aAAa,CAAC;YAGhF,IAAI,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,kBAAkB,EAAE,CAAC;gBAC5D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBACvG,0BAA0B,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC;YAC5D,CAAC;YAED,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;YAG/F,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM,IAAI,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,YAAY,GAAG,IAAI,CAAC;YACxB,MAAM,gBAAgB,GAAG,aAAa,CAAC,mBAAmB,CAAC;YAC3D,QAAQ,IAAI,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAGxC,aAAa,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;gBAC/B,IAAI,aAAa,CAAC,2BAA2B,EAAE,CAAC;oBAC5C,aAAa,CAAC,sBAAsB,CAAC,GAAG,MAAM,IAAI,CAAC,mCAAmC,CAAC,gBAAgB,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC;gBACvJ,CAAC;gBAGD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC5E,IAAI,aAAa,CAAC,IAAI,KAAK,gBAAgB,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;oBACrE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,aAAa,CAAC;oBAC9C,YAAY,GAAG,SAAS,CAAC;gBAC7B,CAAC;YACL,CAAC;YAGD,IAAI,YAAY,EAAE,CAAC;gBACf,0BAA0B,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;gBAC1D,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACvE,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,QAAiC;QACnE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,GAAG,GAAG,EAAE,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACtH,CAAC;IACL,CAAC;IAGO,KAAK,CAAC,sBAAsB,CAAC,eAAwC;QACzE,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC1C,cAAc,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAC3G,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,aAAmC;QAClE,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,OAAO;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,qBAA8C;QAChF,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,oBAA6C;QAC9E,IAAI,CAAC,oBAAoB,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpD,OAAO;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,IAAI,CAAC,mCAAmC,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,GAAG,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAChH,CAAC;IACL,CAAC;IAEO,mCAAmC,CAAC,GAA0B;QAClE,MAAM,UAAU,GAAG,GAAG,EAAE,IAAI,IAAI,WAAW,CAAC;QAC5C,MAAM,eAAe,GAAG,GAAG,EAAE,eAAe,CAAC;QAC7C,MAAM,gBAAgB,GAClB,yBAAyB,UAAU,uEAAuE;YAC1G,wDAAwD,CAAC;QAE7D,IAAI,CAAC,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5F,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,iBAAiB,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrB,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,8BAA8B,YAAY,EAAE,CAAC,CAAC;QACrF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,iBAA2C;QAC9E,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,OAAO;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,iBAAuD,EAAE,UAAmB;QAC1G,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YACpF,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,SAAS,GAAG,iBAAiB,IAAI,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,UAAU,GAAG,CAAC,CAAC;YACvF,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qCAAa,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,IAAI,CAAC;aACxB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;aACrB,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;aAChC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,gBAAgB,CAAC,QAAQ,CAAC,4CAA4C,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,qCAAa,CAAC;iBACnB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,eAAoD,EAAE,UAAmB;QACrG,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YACnF,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,YAAY,GAAG,eAAe,IAAI,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sDAAsD,UAAU,GAAG,CAAC,CAAC;YACtF,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mCAAY,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,IAAI,CAAC;aACxB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;aACrB,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;aAC5B,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;aAClC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,gBAAgB,CAAC,QAAQ,CAAC,kCAAkC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,mCAAY,CAAC;iBAClB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,gBAAqD,EAAE,UAAmB;QACvG,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YACpF,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,aAAa,GAAG,gBAAgB,IAAI,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,UAAU,GAAG,CAAC,CAAC;YACvF,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mCAAY,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,IAAI,CAAC;aACxB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;aACrB,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;aAChC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,gBAAgB,CAAC,QAAQ,CAAC,4CAA4C,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,mCAAY,CAAC;iBAClB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,gBAAqD,EAAE,UAAmB;QACvG,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YACpF,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,aAAa,GAAG,gBAAgB,IAAI,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,UAAU,GAAG,CAAC,CAAC;YACvF,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mCAAY,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,IAAI,CAAC;aACxB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;aACrB,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC;aACtC,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC;aACnC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,gBAAgB,CAAC,QAAQ,CAAC,gCAAgC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,mCAAY,CAAC;iBAClB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,eAAoD,EAAE,UAAmB;QACrG,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YACpF,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,YAAY,GAAG,eAAe,IAAI,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,UAAU,GAAG,CAAC,CAAC;YACvF,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,KAAK,GAAG,YAAY;aACrB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC;aACpC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,oCAAY,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,KAAK,CAAC;aACzB,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;aACtB,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC;aACjC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;gBACzC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;gBACzB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC1B,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAA4B,CAAC,CAAC;YAEjC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,UAAU,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,oCAAY,CAAC;iBAClB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,aAA+C,EAAE,UAAmB;QAC9F,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAChF,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,IAAI,EAAE,CAAC;QAEvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,UAAU,GAAG,CAAC,CAAC;YACnF,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,4BAAS,CAAC,CAAC;QACtD,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,IAAI,CAAC;aACxB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;aACrB,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;aAChC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,gBAAgB,CAAC,QAAQ,CAAC,qCAAqC,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,4BAAS,CAAC;iBACf,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAA2B,EAAE,UAAmB;QACrE,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YAC3E,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,UAAU,GAAG,CAAC,CAAC;YAC9E,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAgB,CAAC,CAAC;QAC7D,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,MAAM,CAAC;aAC1B,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;aACvB,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;aAClC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,gBAAgB,CAAC,QAAQ,CAAC,kCAAkC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU;iBAChB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,+BAAyB,CAAC;iBAC/B,KAAK,CAAC,GAAG,wCAAkC,eAAe,EAAE,EAAE,GAAG,EAAE,CAAC;iBACpE,OAAO,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,sBAAgB,CAAC;iBACtB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAA2B,EAAE,UAAmB;QACrE,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YAC3E,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,UAAU,GAAG,CAAC,CAAC;YAC9E,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mCAAY,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,MAAM,CAAC;aAC1B,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;aACvB,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;aAClC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,gBAAgB,CAAC,QAAQ,CAAC,kCAAkC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAEjB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,oBAAc,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,MAAM,UAAU;iBAC9B,kBAAkB,CAAC,QAAQ,CAAC;iBAC5B,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC;iBACzB,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;iBAChC,KAAK,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;iBACnD,UAAU,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,UAAU;qBAC1B,kBAAkB,EAAE;qBACpB,MAAM,EAAE;qBACR,IAAI,CAAC,oBAAc,CAAC;qBACpB,UAAU,CAAC,SAAS,CAAC;qBACrB,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,UAAU,GAAG,CAAC,CAAC;gBACrF,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,mCAAY,CAAC;iBAClB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,UAA6B,EAAE,UAAmB;QACzE,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YAC7E,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,IAAI,EAAE,CAAC;QAEjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,UAAU,GAAG,CAAC,CAAC;YAChF,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,oBAAc,CAAC,CAAC;QAC3D,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,QAAQ,CAAC;aAC5B,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC;aACzB,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC;aACpC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,gBAAgB,CAAC,QAAQ,CAAC,sCAAsC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAgB,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,QAAQ;iBAC1B,kBAAkB,CAAC,MAAM,CAAC;iBAC1B,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;iBACvB,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;iBAClC,KAAK,CAAC,8BAA8B,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;iBACzD,UAAU,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,UAAU;qBAChB,kBAAkB,EAAE;qBACpB,MAAM,EAAE;qBACR,IAAI,CAAC,+BAAyB,CAAC;qBAC/B,KAAK,CAAC,GAAG,wCAAkC,eAAe,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;qBAC7E,OAAO,EAAE,CAAC;gBAEf,MAAM,QAAQ;qBACT,kBAAkB,EAAE;qBACpB,MAAM,EAAE;qBACR,IAAI,CAAC,sBAAgB,CAAC;qBACtB,UAAU,CAAC,OAAO,CAAC;qBACnB,OAAO,EAAE,CAAC;YACnB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,oBAAc,CAAC;iBACpB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,KAAU,EAAE,cAAiC;QAC3E,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YAC5D,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,IAAI,EAAE,CAAC;QAEpC,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qCAAa,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,OAAO,CAAC;aAC3B,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;aACxB,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC;aACjC,KAAK,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;aACnD,QAAQ,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,gBAAgB,CAAC,QAAQ,CAAC,oCAAoC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,qCAAa,CAAC;iBACnB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,cAAoD,EAAE,UAAmB;QAC/F,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAC5E,OAAO,CAAC,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,IAAI,EAAE,CAAC;QAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,UAAU,GAAG,CAAC,CAAC;YAC/E,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qCAAa,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,OAAO,CAAC;aAC3B,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;aACxB,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC;aACnC,KAAK,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;aACvD,QAAQ,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,gBAAgB,CAAC,QAAQ,CAAC,4CAA4C,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,qCAAa,CAAC;iBACnB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,yBAAyB;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,kBAAY,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,CAAC;QACtF,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YAC1F,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;QACxE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO;YACH,SAAS,EAAE,QAAQ,CAAC,sBAAsB,CAAC,SAAS;YACpD,kBAAkB;SACrB,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,eAAyB;QACpD,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,+CAAkB,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAG,IAAI;aACxB,kBAAkB,CAAC,MAAM,CAAC;aAC1B,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE7B,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,gBAAgB,CAAC,QAAQ,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAMtC,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAClD,IAAI,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,UAAU;iBAChB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;iBACxB,KAAK,CAAC,GAAG,QAAQ,CAAC,kBAAkB,eAAe,EAAE,EAAE,GAAG,EAAE,CAAC;iBAC7D,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,+CAAkB,CAAC;iBACxB,UAAU,CAAC,GAAG,CAAC;iBACf,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAwBO,oBAAoB,CACxB,KAAc,EACd,OAAoG;QAEpG,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;aAC/B,KAAK,CAAC,IAAI,CAAC;aACX,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,UAAU,GAAG;YACf,MAAM,EAAE,OAAO,CAAC,UAAU;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK;YAC5E,KAAK,EAAE;gBACH,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,YAAY,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;aAC/D;SACJ,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAEO,gBAAgB,CAAC,UAAkB,EAAE,KAAa,EAAE,MAA4C;QACpG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,MAAM,UAAU,KAAK,KAAK,mBAAmB,MAAM,CAAC,MAAM,cAAc,MAAM,CAAC,QAAQ,GAAG,CAAC;QACtG,CAAC;QACD,OAAO,MAAM,UAAU,KAAK,KAAK,qBAAqB,MAAM,CAAC,QAAQ,GAAG,CAAC;IAC7E,CAAC;CAEJ,CAAA;AAr+CY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;IAOJ,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6CAAoB,CAAC,CAAC,CAAA;qCADP,+CAAqB;QAEtB,6CAAoB;QACpB,6CAAoB;QACL,6EAAmC;QAC3D,2CAAmB;QACnB,0BAAW;QACD,8CAAqB;QACxB,+CAAqB;QACvB,2CAAmB;QACf,6CAAoB;QACtB,yCAAkB;QACjB,4CAAmB;QAGxB,6DAA4B;QAC7B,8BAAa;QACZ,gCAAc;QAGhB,sCAAiB;QACrB,iDAAsB;QACb,wDAAyB;QACrC,0CAAmB;QACV,iDAAsB;QAC5B,iDAAsB;QAC5B,oBAAU;QACH,mDAAuB;GAhC9C,2BAA2B,CAq+CvC","sourcesContent":["import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { CreateDashboardDto } from 'src/dtos/create-dashboard.dto';\nimport { CreateEmailTemplateDto } from 'src/dtos/create-email-template.dto';\nimport { CreateListOfValuesDto } from 'src/dtos/create-list-of-values.dto';\nimport { CreateSecurityRuleDto } from 'src/dtos/create-security-rule.dto';\nimport { CreateSmsTemplateDto } from 'src/dtos/create-sms-template.dto';\nimport { DashboardRepository } from 'src/repository/dashboard.repository';\nimport { SecurityRuleRepository } from 'src/repository/security-rule.repository';\nimport { AuthenticationService } from 'src/services/authentication.service';\nimport { EmailTemplateService } from 'src/services/email-template.service';\nimport { ListOfValuesService } from 'src/services/list-of-values.service';\nimport { SettingService } from 'src/services/setting.service';\nimport { SmsTemplateService } from 'src/services/sms-template.service';\nimport { UserService } from 'src/services/user.service';\nimport { DataSource, In } from 'typeorm';\nimport { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';\nimport { CreateModuleMetadataDto } from '../dtos/create-module-metadata.dto';\nimport { getDynamicModuleNamesBasedOnMetadata } from '../helpers/module.helper';\nimport { SolidRegistry } from '../helpers/solid-registry';\nimport { ActionMetadataService } from '../services/action-metadata.service';\nimport { FieldMetadataService } from '../services/field-metadata.service';\nimport { MediaStorageProviderMetadataService } from '../services/media-storage-provider-metadata.service';\nimport { ModelMetadataService } from '../services/model-metadata.service';\nimport { ModuleMetadataService } from '../services/module-metadata.service';\nimport { RoleMetadataService } from '../services/role-metadata.service';\nimport { ViewMetadataService } from '../services/view-metadata.service';\nimport solidCoreMetadata from './seed-data/solid-core-metadata.json';\nimport { SystemFieldsSeederService } from './system-fields-seeder.service';\n// import { CreateScheduledJobDto } from 'src/dtos/create-scheduled-job.dto';\nimport { ActionMetadata, DEFAULT_SA_PASSWORD, MENU_ROLE_JOIN_TABLE_NAME, MENU_ROLE_JOIN_TABLE_NAME_MENU_COL, MENU_ROLE_JOIN_TABLE_NAME_ROLE_COL, MenuItemMetadata, ModuleMetadata, RoleMetadata, SignUpDto } from 'src';\nimport { ADMIN_ROLE_NAME, CreateRoleMetadataDto } from 'src/dtos/create-role-metadata.dto';\nimport { CreateSavedFiltersDto } from 'src/dtos/create-saved-filters.dto';\nimport { CreateScheduledJobDto } from 'src/dtos/create-scheduled-job.dto';\nimport { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';\nimport { SavedFiltersRepository } from 'src/repository/saved-filters.repository';\nimport { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';\nimport { SettingRepository } from 'src/repository/setting.repository';\nimport { CreateModelSequenceDto } from 'src/dtos/create-model-sequence.dto';\nimport { ModelSequenceRepository } from 'src/repository/model-sequence.repository';\nimport { ModelSequence } from 'src/entities/model-sequence.entity';\nimport { SavedFilters } from 'src/entities/saved-filters.entity';\nimport { ScheduledJob } from 'src/entities/scheduled-job.entity';\nimport { SecurityRule } from 'src/entities/security-rule.entity';\nimport { ListOfValues } from 'src/entities/list-of-values.entity';\nimport { Dashboard } from 'src/entities/dashboard.entity';\nimport { FieldMetadata } from 'src/entities/field-metadata.entity';\nimport { ModelMetadata } from 'src/entities/model-metadata.entity';\nimport { PermissionMetadata } from 'src/entities/permission-metadata.entity';\nimport { ViewMetadata } from 'src/entities/view-metadata.entity';\n\n\n@Injectable()\nexport class ModuleMetadataSeederService {\n private readonly logger = new Logger(ModuleMetadataSeederService.name);\n private enablePruning: boolean = false;\n\n constructor(\n private readonly moduleMetadataService: ModuleMetadataService,\n @Inject(forwardRef(() => ModelMetadataService))\n private readonly modelMetadataService: ModelMetadataService,\n private readonly fieldMetadataService: FieldMetadataService,\n private readonly mediaStorageProviderMetadataService: MediaStorageProviderMetadataService,\n private readonly roleService: RoleMetadataService,\n private readonly userService: UserService,\n private readonly authenticationService: AuthenticationService,\n private readonly solidActionService: ActionMetadataService,\n private readonly solidViewService: ViewMetadataService,\n private readonly emailTemplateService: EmailTemplateService,\n private readonly smsTemplateService: SmsTemplateService,\n private readonly listOfValuesService: ListOfValuesService,\n // @InjectRepository(PermissionMetadata)\n // private readonly permissionRepo: Repository<PermissionMetadata>,\n private readonly permissionRepo: PermissionMetadataRepository,\n private readonly solidRegistry: SolidRegistry,\n private readonly settingService: SettingService,\n // @InjectRepository(Setting, 'default')\n // readonly settingsRepo: Repository<Setting>,\n private readonly settingsRepo: SettingRepository,\n readonly securityRuleRepo: SecurityRuleRepository,\n readonly systemFieldsSeederService: SystemFieldsSeederService,\n readonly dashboardRepo: DashboardRepository,\n readonly scheduledJobRepository: ScheduledJobRepository,\n readonly savedFiltersRepo: SavedFiltersRepository,\n readonly dataSource: DataSource,\n readonly modelSequenceRepo: ModelSequenceRepository,\n ) { }\n\n async seed(conf?: any) {\n let currentModule = 'global';\n let currentStep = 'bootstrap';\n let modulesToSeed: string[] | null = null;\n\n try {\n this.enablePruning = Boolean(conf?.pruneMetadata);\n console.log(this.enablePruning ? '▶ Pruning enabled: metadata not present in JSON will be removed.' : '▶ Pruning disabled: existing metadata will be kept.');\n\n // Global seeding steps i.e across all modules\n currentStep = 'seedGlobalMetadata';\n await this.seedGlobalMetadata();\n\n // Module specific seeding steps.\n // Get all the module metadata files which needs to be seeded.\n const seedDataFiles = this.seedDataFiles;\n this.logger.debug(`Found seed data for modules: ${seedDataFiles.map(s => s.moduleMetadata?.name)}`);\n\n /** \n * -------------------------------------------------------------\n * Selective module seeding via: solid seed --modules-to-seed onboarding,reports \n * -------------------------------------------------------------\n */\n currentStep = 'resolveModulesToSeed';\n if (conf && Array.isArray(conf.modulesToSeed)) {\n modulesToSeed = conf.modulesToSeed;\n console.log(`▶ Selective seeding enabled. Modules to seed: ${modulesToSeed.join(', ')}`);\n this.logger.log(`Selective seeding enabled. Modules to seed: ${modulesToSeed.join(', ')}`);\n } else {\n console.log(`▶ No modulesToSeed provided. Seeding ALL modules.`);\n this.logger.log(`No modulesToSeed provided. Seeding ALL modules.`);\n }\n\n // Filter modules if needed\n const filteredSeedDataFiles = modulesToSeed ? seedDataFiles.filter((file) => modulesToSeed.includes(file.moduleMetadata?.name)) : seedDataFiles;\n\n if (filteredSeedDataFiles.length === 0) {\n this.logger.warn(`No modules matched the provided modulesToSeed list.`);\n return;\n }\n\n // let usersDetail;\n // For each module metadata file, we will process the seeding steps one by one.\n for (let i = 0; i < filteredSeedDataFiles.length; i++) {\n const overallMetadata = filteredSeedDataFiles[i];\n const moduleMetadata: CreateModuleMetadataDto = overallMetadata.moduleMetadata;\n currentModule = moduleMetadata?.name ?? 'unknown';\n\n console.log(`▶ Seeding Metadata for Module: ${moduleMetadata.name}`);\n this.logger.log(`Seeding Metadata for Module: ${moduleMetadata.name}`);\n\n // Process module metadata first.\n currentStep = 'seedModuleModelFields';\n this.logger.log(`Seeding Module / Model / Fields`);\n const moduleModelFieldCounts = await this.seedModuleModelFields(moduleMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);\n\n currentStep = 'seedMediaStorageProviders';\n this.logger.log(`Seeding Media Storage Providers`);\n const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);\n\n currentStep = 'seedRoles';\n this.logger.log(`Seeding Roles`);\n const roleCounts = await this.seedRoles(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Roles', roleCounts)}`);\n\n currentStep = 'seedUsers';\n this.logger.log(`Seeding Users`);\n const userCounts = await this.seedUsers(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Users', userCounts)}`);\n\n currentStep = 'seedViews';\n this.logger.log(`Seeding Views`);\n const viewCounts = await this.seedViews(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Views', viewCounts)}`);\n\n currentStep = 'seedActions';\n this.logger.log(`Seeding Actions`);\n const actionCounts = await this.seedActions(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Actions', actionCounts)}`);\n\n currentStep = 'seedMenus';\n this.logger.log(`Seeding Menus`);\n const menuCounts = await this.seedMenus(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Menus', menuCounts)}`);\n\n currentStep = 'seedEmailTemplates';\n this.logger.log(`Seeding Email Templates`);\n const emailTemplateCounts = await this.seedEmailTemplates(overallMetadata, moduleMetadata.name);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Email Templates', emailTemplateCounts)}`);\n\n currentStep = 'seedSmsTemplates';\n this.logger.log(`Seeding Sms Templates`);\n const smsTemplateCounts = await this.seedSmsTemplates(overallMetadata, moduleMetadata.name);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Sms Templates', smsTemplateCounts)}`);\n\n currentStep = 'seedSecurityRules';\n this.logger.log(`Seeding Security Rules`);\n const securityRuleCounts = await this.seedSecurityRules(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Security Rules', securityRuleCounts)}`);\n\n currentStep = 'seedListOfValues';\n this.logger.log(`Seeding List Of Values`);\n const lovCounts = await this.seedListOfValues(moduleMetadata, overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'List Of Values', lovCounts)}`);\n\n currentStep = 'seedDashboards';\n this.logger.log(`Seeding Dashboards`);\n const dashboardCounts = await this.seedDashboards(moduleMetadata, overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Dashboards', dashboardCounts)}`);\n\n currentStep = 'seedScheduledJobs';\n this.logger.log(`Seeding Scheduled Jobs`);\n const scheduledJobCounts = await this.seedScheduledJobs(moduleMetadata, overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Scheduled Jobs', scheduledJobCounts)}`);\n\n currentStep = 'seedSavedFilters';\n this.logger.log(`Seeding Saved Filters`);\n const savedFilterCounts = await this.seedSavedFilters(moduleMetadata, overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Saved Filters', savedFilterCounts)}`);\n\n currentStep = 'seedModelSequences';\n this.logger.log(`Seeding Model Sequences`);\n const modelSequenceCounts = await this.seedModelSequences(overallMetadata);\n console.log(`${this.formatSeedResult(moduleMetadata.name, 'Model Sequences', modelSequenceCounts)}`);\n }\n\n currentModule = 'global';\n currentStep = 'setupDefaultRolesWithPermissions';\n await this.setupDefaultRolesWithPermissions();\n\n // Add a console log indicating seeding is finished. This needs to be console.log so that it looks proper when this code is run via CLI.\n console.log(`✔ Seeding completed.`);\n //this.logger.log(`All Seeders finished`);\n\n //FIXME: Handle displaying the created users credentials in a better way.\n // this.logger.log(`Newly created username is: ${usersDetail?.length > 0 ? usersDetail[0]?.username : ''} and password is ${usersDetail?.length > 0 ? usersDetail[0]?.password : ''}`);\n } catch (error) {\n this.logSeedFailureForCli(error, {\n moduleName: currentModule,\n step: currentStep,\n pruneEnabled: this.enablePruning,\n modulesToSeed,\n });\n throw error;\n }\n }\n\n private async seedScheduledJobs(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing scheduled jobs for ${moduleMetadata.name}`);\n const scheduledJobs: CreateScheduledJobDto[] = overallMetadata.scheduledJobs;\n const pruned = this.enablePruning ? await this.pruneScheduledJobs(scheduledJobs, moduleMetadata.name) : 0;\n if (scheduledJobs?.length > 0) {\n await this.handleSeedScheduledJobs(scheduledJobs);\n }\n this.logger.debug(`[End] Processing scheduled jobs for ${moduleMetadata.name}`);\n return { pruned, upserted: scheduledJobs?.length ?? 0 };\n }\n\n private async seedSavedFilters(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing saved filters for ${moduleMetadata.name}`);\n const savedFilters: CreateSavedFiltersDto[] = overallMetadata.savedFilters;\n const pruned = this.enablePruning ? await this.pruneSavedFilters(savedFilters, moduleMetadata.name) : 0;\n if (savedFilters?.length > 0) {\n await this.handleSeedSavedFilters(savedFilters);\n }\n this.logger.debug(`[End] Processing saved filters for ${moduleMetadata.name}`);\n return { pruned, upserted: savedFilters?.length ?? 0 };\n }\n\n private async seedDashboards(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing dashboards for ${moduleMetadata.name}`);\n const dashboards: CreateDashboardDto[] = overallMetadata.dashboards;\n const pruned = this.enablePruning ? await this.pruneDashboards(dashboards, moduleMetadata.name) : 0;\n await this.handleSeedDashboards(dashboards);\n this.logger.debug(`[End] Processing dashboards for ${moduleMetadata.name}`);\n return { pruned, upserted: dashboards?.length ?? 0 };\n }\n\n private async seedListOfValues(moduleMetadata: CreateModuleMetadataDto, overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing List Of Values for ${moduleMetadata.name}`);\n const listOfValues: CreateListOfValuesDto[] = overallMetadata.listOfValues;\n const pruned = this.enablePruning ? await this.pruneListOfValues(listOfValues, moduleMetadata.name) : 0;\n await this.handleSeedListOfValues(listOfValues);\n this.logger.debug(`[End] Processing List Of Values for ${moduleMetadata.name}`);\n return { pruned, upserted: listOfValues?.length ?? 0 };\n }\n\n private async setupDefaultRolesWithPermissions() {\n this.logger.debug(`About to add all permissions to the Admin role`);\n await this.roleService.addAllPermissionsToRole(ADMIN_ROLE_NAME);\n\n // 2. Give permissions to the Internal / Public role.\n // this.logger.debug(`About to add all permissions to the Internal role`);\n // await this.roleService.addPermissionToRole(INTERNAL_ROLE_NAME, INTERNAL_ROLE_PERMISSIONS);\n\n // this.logger.debug(`About to add all permissions to the Public role`);\n // await this.roleService.addPermissionToRole(PUBLIC_ROLE_NAME, ['SettingController.wrapSettings', 'AuthenticationController.logout']);\n }\n\n private async seedSecurityRules(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing security rules`);\n const securityRules: CreateSecurityRuleDto[] = overallMetadata.securityRules;\n const pruned = this.enablePruning ? await this.pruneSecurityRules(securityRules, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedSecurityRules(securityRules);\n this.logger.debug(`[End] Processing security rules`);\n return { pruned, upserted: securityRules?.length ?? 0 };\n }\n\n // Ok\n private async seedDefaultSettings() {\n this.logger.debug(`[Start] Processing settings`);\n await this.settingService.seedSystemAdminEditableAndAboveSettings();\n this.logger.debug(`[End] Processing settings`);\n }\n\n private async seedSmsTemplates(overallMetadata: any, moduleName: string): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing sms templates`);\n const smsTemplates: CreateSmsTemplateDto[] = overallMetadata.smsTemplates;\n await this.handleSeedSmsTemplates(smsTemplates, moduleName);\n this.logger.debug(`[End] Processing sms templates`);\n return { pruned: 0, upserted: smsTemplates?.length ?? 0 };\n }\n\n // OK\n private async seedEmailTemplates(overallMetadata: any, moduleName: string): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing email templates`);\n const emailTemplates: CreateEmailTemplateDto[] = overallMetadata.emailTemplates;\n await this.handleSeedEmailTemplates(emailTemplates, moduleName);\n this.logger.debug(`[End] Processing email templates`);\n return { pruned: 0, upserted: emailTemplates?.length ?? 0 };\n }\n\n // Ok\n private async seedMenus(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing menus`);\n const menus = overallMetadata.menus;\n const pruned = this.enablePruning ? await this.pruneMenus(menus, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedMenus(menus);\n this.logger.debug(`[End] Processing menus`);\n return { pruned, upserted: menus?.length ?? 0 };\n }\n\n // Ok\n private async seedActions(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing actions`);\n const actions = overallMetadata.actions;\n const pruned = this.enablePruning ? await this.pruneActions(actions, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedActions(actions);\n this.logger.debug(`[End] Processing actions`);\n return { pruned, upserted: actions?.length ?? 0 };\n }\n\n // Ok\n private async seedViews(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing views`);\n const views = overallMetadata.views;\n const pruned = this.enablePruning ? await this.pruneViews(views, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedViews(views);\n this.logger.debug(`[End] Processing views`);\n return { pruned, upserted: views?.length ?? 0 };\n }\n\n // Ok\n private async seedUsers(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing users`);\n const users = overallMetadata.users;\n // usersDetail = users;\n await this.handleSeedUsers(users);\n this.logger.debug(`[End] Processing users`);\n return { pruned: 0, upserted: users?.length ?? 0 };\n }\n\n // OK\n private async seedRoles(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing roles`);\n // While creating roles we are only passing the role name to be used. \n await this.roleService.createRolesIfNotExists(overallMetadata.roles.map(role => { return { name: role.name }; }));\n // After roles are created, we iterate over all roles and attach permissions (if specified in the seeder json) to the respective role.\n // Every role configuration in the seeder json can optionally have a permissions attribute. \n for (const role of overallMetadata.roles) {\n if (role.permissions) {\n await this.roleService.addPermissionsToRole(role.name, role.permissions);\n }\n }\n this.logger.debug(`[End] Processing roles`);\n return { pruned: 0, upserted: overallMetadata.roles?.length ?? 0 };\n }\n\n // OK\n private get seedDataFiles(): any[] {\n const typedSolidCoreMetadata = structuredClone(solidCoreMetadata);\n const seedDataFiles = [typedSolidCoreMetadata];\n // const enabledModules = getDynamicModuleNames();\n const enabledModules = getDynamicModuleNamesBasedOnMetadata();\n for (const enabledModule of enabledModules) {\n const enabledModuleSeedFile = `module-metadata/${enabledModule}/${enabledModule}-metadata.json`;\n const fullPath = path.join(process.cwd(), enabledModuleSeedFile);\n\n if (fs.existsSync(fullPath)) {\n const overallMetadata = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));\n seedDataFiles.push(overallMetadata);\n }\n }\n\n return seedDataFiles;\n }\n\n // OK\n private async seedGlobalMetadata() {\n this.logger.log(`Seeding Permissions`);\n await this.seedPermissions();\n\n // this.logger.log(`Seeding Default Media Storage Providers`);\n // await this.seedDefaultMediaStorageProviders();\n\n this.logger.log(`Seeding System Fields Metadata`);\n await this.seedDefaultSystemFields();\n\n // Settings\n this.logger.log(`Seeding Default Settings`);\n await this.seedDefaultSettings();\n\n\n this.logger.debug(`Global metadata seeding completed`);\n }\n\n private async seedDefaultSystemFields() {\n await this.systemFieldsSeederService.seed();\n }\n\n // OK\n private async seedPermissions() {\n\n const controllers = this.solidRegistry.getControllers();\n const permissionNames: string[] = [];\n\n // Loop over the countries and create them.\n for (let id = 0; id < controllers.length; id++) {\n try {\n const controller = controllers[id];\n // this.logger.log(`Resolving controller: ${controller.name}`);\n\n const methods = controller.methods;\n for (let mId = 0; mId < methods.length; mId++) {\n\n const methodName = methods[mId];\n const permissionName = `${controller.name}.${methodName}`;\n permissionNames.push(permissionName);\n\n const existingPermission = await this.permissionRepo.findOne({\n where: {\n name: permissionName\n }\n });\n\n // if (existingPermission) {\n // this.logger.log(`Permission ${permissionName} already exists.`);\n // }\n // else { }\n\n if (!existingPermission) {\n\n this.logger.log(`Permission ${permissionName} does not exist, creating new.`);\n\n const newPermission = this.permissionRepo.create({\n name: permissionName\n });\n await this.permissionRepo.save(newPermission);\n\n\n }\n }\n\n } catch (error) {\n this.logger.error(error);\n }\n }\n\n if (this.enablePruning) {\n await this.prunePermissions(permissionNames);\n }\n }\n\n // OK\n // private async seedDefaultMediaStorageProviders() {\n // await this.mediaStorageProviderSeederService.seed();\n // }\n\n // OK\n private async seedMediaStorageProviders(mediaStorageProviders: any[]): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing Media Storage Provider`);\n\n for (let i = 0; i < mediaStorageProviders.length; i++) {\n const mediaStorageProvider = mediaStorageProviders[i];\n await this.mediaStorageProviderMetadataService.upsert(mediaStorageProvider);\n }\n this.logger.debug(`[End] Processing Media Storage Provider`);\n return { pruned: 0, upserted: mediaStorageProviders?.length ?? 0 };\n }\n\n private async seedModelSequences(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing model sequences`);\n const modelSequences: CreateModelSequenceDto[] = overallMetadata.modelSequences;\n const pruned = this.enablePruning ? await this.pruneModelSequences(modelSequences, overallMetadata?.moduleMetadata?.name) : 0;\n await this.handleSeedModelSequences(modelSequences);\n this.logger.debug(`[End] Processing model sequences`);\n return { pruned, upserted: modelSequences?.length ?? 0 };\n }\n\n // OK\n private async handleSeedEmailTemplates(emailTemplates: CreateEmailTemplateDto[], moduleName: string) {\n if (!emailTemplates) {\n return;\n }\n\n for (let i = 0; i < emailTemplates.length; i++) {\n const emailTemplate = emailTemplates[i];\n // this.logger.log(`Found ${emailTemplate.name} email template`);\n\n // We need to load the actual template contents. \n if (moduleName === 'solid-core') {\n let moduleRoot: string | null = null;\n\n try {\n // Always resolve package.json, never the module entry\n moduleRoot = path.dirname(\n require.resolve('@solidxai/core/package.json'),\n );\n } catch (err) {\n this.logger.debug(\n 'Could not resolve @solidxai/core from node_modules, assuming local execution',\n );\n }\n\n const filePathInternal = 'src/seeders/seed-data/email-templates/';\n let filePath: string;\n // Case 1: solid-core installed as dependency\n if (moduleRoot) {\n filePath = path.join(\n moduleRoot,\n filePathInternal,\n emailTemplate.body,\n );\n }\n else {\n // Case 2: running INSIDE solid-core repo\n const localCoreRoot = process.cwd(); // or configurable root\n filePath = path.join(\n localCoreRoot,\n filePathInternal,\n emailTemplate.body,\n );\n }\n\n if (fs.existsSync(filePath)) {\n emailTemplate.body = fs.readFileSync(filePath, 'utf-8');\n }\n }\n else {\n // Check if file exists\n const emailTemplateHandlebar = `module-metadata/${moduleName}/email-templates/${emailTemplate.body}`\n const fullPath = path.join(process.cwd(), emailTemplateHandlebar);\n // this.logger.log(`Seeding custom email template from consuming model at path: ${fullPath}`);\n if (fs.existsSync(fullPath)) {\n emailTemplate.body = fs.readFileSync(fullPath, 'utf-8').toString();\n }\n }\n\n // Save to DB.\n await this.emailTemplateService.removeByName(emailTemplate.name);\n await this.emailTemplateService.create(emailTemplate);\n }\n\n }\n\n // Ok\n private async handleSeedSmsTemplates(smsTemplates: CreateSmsTemplateDto[], moduleName: string) {\n if (!smsTemplates) {\n return;\n }\n\n for (let i = 0; i < smsTemplates.length; i++) {\n const smsTemplate = smsTemplates[i];\n // this.logger.log(`Found ${smsTemplate.name} sms template`);\n\n // We need to load the actual template contents. \n if (moduleName === 'solid-core') {\n let moduleRoot: string | null = null;\n\n try {\n // Always resolve package.json, never the module entry\n moduleRoot = path.dirname(\n require.resolve('@solidxai/core/package.json'),\n );\n } catch (err) {\n this.logger.debug(\n 'Could not resolve @solidxai/core from node_modules, assuming local execution',\n );\n }\n\n const filePathInternal = 'src/seeders/seed-data/sms-templates/';\n let filePath: string;\n // Case 1: solid-core installed as dependency\n if (moduleRoot) {\n filePath = path.join(\n moduleRoot,\n filePathInternal,\n smsTemplate.body,\n );\n }\n else {\n // Case 2: running INSIDE solid-core repo\n const localCoreRoot = process.cwd(); // or configurable root\n filePath = path.join(\n localCoreRoot,\n filePathInternal,\n smsTemplate.body,\n );\n }\n\n if (fs.existsSync(filePath)) {\n smsTemplate.body = fs.readFileSync(filePath, 'utf-8');\n }\n }\n else {\n // Check if file exists\n const emailTemplateHandlebar = `module-metadata/${moduleName}/sms-templates/${smsTemplate.body}`\n const fullPath = path.join(process.cwd(), emailTemplateHandlebar);\n // this.logger.log(`Seeding custom sms template from consuming model at path: ${fullPath}`);\n if (fs.existsSync(fullPath)) {\n smsTemplate.body = fs.readFileSync(fullPath, 'utf-8').toString();\n }\n }\n\n\n // Save to DB.\n await this.smsTemplateService.removeByName(smsTemplate.name);\n await this.smsTemplateService.create(smsTemplate);\n }\n }\n\n // Ok\n private async handleSeedMenus(menus: any) {\n if (!menus) {\n return;\n }\n\n await this.dataSource.transaction(async (trx) => {\n const menuRepo = trx.getRepository(MenuItemMetadata);\n const roleRepo = trx.getRepository(RoleMetadata);\n const actionRepo = trx.getRepository(ActionMetadata);\n const moduleRepo = trx.getRepository(ModuleMetadata);\n\n // 1) Upsert menus WITHOUT roles (manual upsert)\n for (const m of menus) {\n const action = m.actionUserKey\n ? await actionRepo.findOne({ where: { name: m.actionUserKey }, select: [\"id\"] })\n : null;\n\n const module = m.moduleUserKey\n ? await moduleRepo.findOne({ where: { name: m.moduleUserKey }, select: [\"id\"] })\n : null;\n\n const parentMenuItem = m.parentMenuItemUserKey\n ? await menuRepo.findOne({ where: { name: m.parentMenuItemUserKey }, select: [\"id\"] })\n : null;\n\n // Check if a menu with this name already exists\n const existing = await menuRepo.findOne({\n where: { name: m.name },\n select: [\"id\"],\n });\n\n // Build the entity data (without id)\n const base = {\n name: m.name,\n displayName: m.displayName,\n action,\n module,\n parentMenuItem,\n sequenceNumber: m.sequenceNumber,\n iconName: m.iconName,\n };\n\n // If existing, set its id so save() will perform an update, otherwise insert\n const entity = menuRepo.create(\n existing ? { id: existing.id, ...base } : base,\n );\n\n await menuRepo.save(entity);\n }\n\n // 2) Fetch ids for batching\n const seeded = await menuRepo.find({\n where: { name: In(menus.map((m: any) => m.name)) },\n select: [\"id\", \"name\"],\n });\n const idByName = new Map(seeded.map(s => [s.name, s.id]));\n\n // 3) Build desired join rows once\n const admin = await roleRepo.findOne({ where: { name: ADMIN_ROLE_NAME }, select: [\"id\", \"name\"] });\n const allRoleNames = new Set<string>();\n for (const m of menus) (m.roles ?? []).forEach((r: string) => allRoleNames.add(r));\n if (admin) allRoleNames.add(admin.name);\n\n const roles = await roleRepo.find({\n where: { name: In([...allRoleNames]) },\n select: [\"id\", \"name\"],\n });\n const roleByName = new Map(roles.map(r => [r.name, r]));\n\n const joinRows: Array<{ menuId: number; roleId: number }> = [];\n for (const m of menus) {\n const menuId = idByName.get(m.name)!;\n const roleNames = new Set<string>([...(m.roles ?? []), admin?.name].filter(Boolean) as string[]);\n for (const rn of roleNames) {\n const role = roleByName.get(rn);\n if (role) joinRows.push({ menuId, roleId: role.id });\n }\n }\n\n // 4) Replace in bulk — no orIgnore, safe for MSSQL\n // 4a) delete existing for affected menus\n const menuIds = [...new Set(joinRows.map(r => r.menuId))];\n if (menuIds.length) {\n await trx\n .createQueryBuilder()\n .delete()\n .from(MENU_ROLE_JOIN_TABLE_NAME) // string table name is fine\n .where(`${MENU_ROLE_JOIN_TABLE_NAME_MENU_COL} IN (:...ids)`, { ids: menuIds })\n .execute();\n }\n\n // 4b) bulk insert all pairs\n if (joinRows.length) {\n const values = joinRows.map(r => ({\n [MENU_ROLE_JOIN_TABLE_NAME_MENU_COL]: r.menuId,\n [MENU_ROLE_JOIN_TABLE_NAME_ROLE_COL]: r.roleId,\n }));\n\n await trx\n .createQueryBuilder()\n .insert()\n .into(MENU_ROLE_JOIN_TABLE_NAME)\n .values(values)\n // .orIgnore() // ❌ remove this – it triggers unsupported onUpdate path\n .execute();\n }\n });\n }\n\n // Ok\n private async handleSeedActions(actions: any) {\n if (!actions) {\n return;\n }\n\n for (let j = 0; j < actions.length; j++) {\n const actionData = actions[j];\n actionData['module'] = await this.moduleMetadataService.findOneByUserKey(actionData.moduleUserKey);\n if (actionData.type === 'solid') {\n actionData['model'] = await this.modelMetadataService.findOneByUserKey(actionData.modelUserKey);\n actionData['view'] = await this.solidViewService.findOneByUserKey(actionData.viewUserKey);\n }\n else {\n if (actionData.modelUserKey) {\n actionData['model'] = await this.modelMetadataService.findOneByUserKey(actionData.modelUserKey);\n }\n }\n await this.solidActionService.upsert(actionData);\n }\n }\n\n // Ok\n private async handleSeedViews(views: any) {\n if (!views) {\n return;\n }\n\n for (let j = 0; j < views.length; j++) {\n const viewData = views[j];\n\n // preety format the layout & context. \n viewData['layout'] = JSON.stringify(viewData['layout'], null, 2);\n\n viewData['module'] = await this.moduleMetadataService.findOneByUserKey(viewData.moduleUserKey);\n viewData['model'] = await this.modelMetadataService.findOneByUserKey(viewData.modelUserKey);\n\n // Changed the below to upsert as now we are saving modifications to the view json to file system also.\n await this.solidViewService.upsert(viewData);\n }\n }\n\n // OK\n private async handleSeedUsers(users: SignUpDto[]) {\n if (!users) {\n return;\n }\n\n for (let l = 0; l < users.length; l++) {\n const user: SignUpDto = users[l];\n let exisitingUser = await this.userService.findOneByUsername(user.username);\n if (!exisitingUser) {\n if (user.username === 'sa') {\n user.password = DEFAULT_SA_PASSWORD;\n }\n\n exisitingUser = await this.authenticationService.signUp(user);\n this.logger.log(`Newly created user ${user.username}`);\n }\n //FIXME: Create the user roles assignment logic here.\n // now add Roles to user.\n // for (let m = 0; m < roles.length; m++) {\n // const role = roles[m];\n // await this.userService.addRoleToUser(user.email, role.name);\n // }\n }\n }\n\n // OK\n private async seedModuleModelFields(moduleMetadata: CreateModuleMetadataDto): Promise<{ pruned: number; upserted: number }> {\n this.logger.debug(`[Start] Processing module metadata`);\n\n // First we create the module. \n const module = await this.moduleMetadataService.upsert(moduleMetadata);\n let pruned = 0;\n let upserted = 1;\n\n // Next create all the models. \n const modelsMetadata: CreateModelMetadataDto[] = moduleMetadata.models;\n upserted += modelsMetadata?.length ?? 0;\n for (let j = 0; j < modelsMetadata.length; j++) {\n const modelMetadata = modelsMetadata[j];\n\n // Before creating the model, we need to make sure we are linking it to the newly created module.\n modelMetadata['module'] = module;\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = modelMetadata;\n\n // Load and set the parent model if it exists.\n if (modelMetadata.isChild && modelMetadata.parentModelUserKey) {\n const parentModel = await this.modelMetadataService.findOneByUserKey(modelMetadata.parentModelUserKey);\n modelMetaDataWithoutFields['parentModel'] = parentModel;\n }\n\n await this.modelMetadataService.upsert(modelMetaDataWithoutFields);\n const model = await this.modelMetadataService.findOneBySingularName(modelMetadata.singularName)\n\n // iterate over all fields and upsert. \n if (this.enablePruning) {\n pruned += await this.pruneFieldsForModel(model, fieldsMetadata);\n }\n let userKeyField = null;\n const userKeyFieldName = modelMetadata.userKeyFieldUserKey;\n upserted += fieldsMetadata?.length ?? 0;\n for (let k = 0; k < fieldsMetadata.length; k++) {\n const fieldMetadata = fieldsMetadata[k];\n\n // Link model & mediaStorageProvider. \n fieldMetadata['model'] = model;\n if (fieldMetadata.mediaStorageProviderUserKey) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOneByUserKey(fieldMetadata.mediaStorageProviderUserKey);\n }\n // console.log(fieldMetadata.displayName);\n\n const affectedField = await this.fieldMetadataService.upsert(fieldMetadata);\n if (fieldMetadata.name === userKeyFieldName || fieldMetadata.isUserKey) {\n const { model, ...fieldData } = affectedField;\n userKeyField = fieldData;\n }\n }\n\n // Now that we have created fields & model update the model to stamp the userKeyField. \n if (userKeyField) {\n modelMetaDataWithoutFields['userKeyField'] = userKeyField;\n await this.modelMetadataService.upsert(modelMetaDataWithoutFields);\n }\n }\n if (this.enablePruning) {\n pruned += await this.pruneModels(modelsMetadata, moduleMetadata.name);\n }\n this.logger.debug(`[End] Processing module metadata`);\n return { pruned, upserted };\n }\n\n private async handleSeedSecurityRules(rulesDto: CreateSecurityRuleDto[]) {\n if (!rulesDto || rulesDto.length === 0) {\n this.logger.debug(`No security rules found to seed`);\n return;\n }\n for (const dto of rulesDto) {\n await this.securityRuleRepo.upsertWithDto({ ...dto, securityRuleConfig: JSON.stringify(dto.securityRuleConfig) });\n }\n }\n\n // Not Ok\n private async handleSeedListOfValues(listOfValuesDto: CreateListOfValuesDto[]) {\n if (!listOfValuesDto || listOfValuesDto.length === 0) {\n this.logger.debug(`No List Of Values found to seed`);\n return;\n }\n for (let j = 0; j < listOfValuesDto.length; j++) {\n const listOfValueDto = listOfValuesDto[j];\n listOfValueDto['module'] = await this.moduleMetadataService.findOneByUserKey(listOfValueDto.moduleUserKey);\n await this.listOfValuesService.upsert(listOfValuesDto[j]);\n }\n }\n\n private async handleSeedDashboards(dashboardDtos: CreateDashboardDto[]) {\n if (!dashboardDtos || dashboardDtos.length === 0) {\n this.logger.debug(`No dashboards found to seed`);\n return;\n }\n for (const dto of dashboardDtos) {\n await this.dashboardRepo.upsertWithDto(dto);\n }\n }\n\n private async handleSeedScheduledJobs(createScheduledJobDto: CreateScheduledJobDto[]) {\n if (!createScheduledJobDto || createScheduledJobDto.length === 0) {\n this.logger.debug(`No scheduled jobs found to seed`);\n return;\n }\n for (const dto of createScheduledJobDto) {\n await this.scheduledJobRepository.upsertWithDto(dto);\n }\n }\n\n private async handleSeedSavedFilters(createSavedFilterDto: CreateSavedFiltersDto[]) {\n if (!createSavedFilterDto || createSavedFilterDto.length === 0) {\n this.logger.debug(`No saved filters found to seed`);\n return;\n }\n for (const dto of createSavedFilterDto) {\n this.validateSavedFilterQueryJsonWrapper(dto);\n await this.savedFiltersRepo.upsertWithDto({ ...dto, filterQueryJson: JSON.stringify(dto.filterQueryJson) });\n }\n }\n\n private validateSavedFilterQueryJsonWrapper(dto: CreateSavedFiltersDto): void {\n const filterName = dto?.name ?? '<unnamed>';\n const filterQueryJson = dto?.filterQueryJson;\n const baseErrorMessage =\n `Invalid saved filter \"${filterName}\": filterQueryJson must be wrapped with a top-level \"$or\" or \"$and\". ` +\n `Example: {\"$or\":[{\"employeeStatus\":{\"$eq\":\"Active\"}}]}`;\n\n if (!filterQueryJson || typeof filterQueryJson !== 'object' || Array.isArray(filterQueryJson)) {\n throw new Error(baseErrorMessage);\n }\n\n const topLevelKeys = Object.keys(filterQueryJson);\n const hasLogicalWrapper = topLevelKeys.includes('$or') || topLevelKeys.includes('$and');\n if (!hasLogicalWrapper) {\n const receivedKeys = topLevelKeys.length > 0 ? topLevelKeys.join(', ') : '(none)';\n throw new Error(`${baseErrorMessage}. Received top-level keys: ${receivedKeys}`);\n }\n }\n\n private async handleSeedModelSequences(modelSequencesDto: CreateModelSequenceDto[]) {\n if (!modelSequencesDto || modelSequencesDto.length === 0) {\n this.logger.debug(`No Model Sequences found to seed`);\n return;\n }\n for (const dto of modelSequencesDto) {\n await this.modelSequenceRepo.upsertWithDto(dto);\n }\n }\n\n private async pruneModelSequences(modelSequencesDto: CreateModelSequenceDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping model sequence prune: missing module name in metadata.`);\n return 0;\n }\n const sequences = modelSequencesDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping model sequence prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const sequenceNames = [...new Set(sequences.map(dto => dto.sequenceName).filter(Boolean))];\n const repo = this.dataSource.getRepository(ModelSequence);\n const idsToDeleteQuery = repo\n .createQueryBuilder('ms')\n .select('ms.id', 'id')\n .innerJoin('ms.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (sequenceNames.length > 0) {\n idsToDeleteQuery.andWhere('ms.sequenceName NOT IN (:...sequenceNames)', { sequenceNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ModelSequence)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneSavedFilters(savedFiltersDto: CreateSavedFiltersDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping saved filters prune: missing module name in metadata.`);\n return 0;\n }\n const savedFilters = savedFiltersDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping saved filters prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const filterNames = [...new Set(savedFilters.map(dto => dto.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(SavedFilters);\n const idsToDeleteQuery = repo\n .createQueryBuilder('sf')\n .select('sf.id', 'id')\n .innerJoin('sf.view', 'view')\n .innerJoin('view.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (filterNames.length > 0) {\n idsToDeleteQuery.andWhere('sf.name NOT IN (:...filterNames)', { filterNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(SavedFilters)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneScheduledJobs(scheduledJobsDto: CreateScheduledJobDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping scheduled jobs prune: missing module name in metadata.`);\n return 0;\n }\n const scheduledJobs = scheduledJobsDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping scheduled jobs prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const scheduleNames = [...new Set(scheduledJobs.map(dto => dto.scheduleName).filter(Boolean))];\n const repo = this.dataSource.getRepository(ScheduledJob);\n const idsToDeleteQuery = repo\n .createQueryBuilder('sj')\n .select('sj.id', 'id')\n .innerJoin('sj.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (scheduleNames.length > 0) {\n idsToDeleteQuery.andWhere('sj.scheduleName NOT IN (:...scheduleNames)', { scheduleNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ScheduledJob)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneSecurityRules(securityRulesDto: CreateSecurityRuleDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping security rules prune: missing module name in metadata.`);\n return 0;\n }\n const securityRules = securityRulesDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping security rules prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const ruleNames = [...new Set(securityRules.map(dto => dto.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(SecurityRule);\n const idsToDeleteQuery = repo\n .createQueryBuilder('sr')\n .select('sr.id', 'id')\n .innerJoin('sr.modelMetadata', 'model')\n .innerJoin('model.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (ruleNames.length > 0) {\n idsToDeleteQuery.andWhere('sr.name NOT IN (:...ruleNames)', { ruleNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(SecurityRule)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneListOfValues(listOfValuesDto: CreateListOfValuesDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping list of values prune: missing module name in metadata.`);\n return 0;\n }\n const listOfValues = listOfValuesDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping list of values prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const pairs = listOfValues\n .filter(dto => dto.type && dto.value)\n .map(dto => ({ type: dto.type, value: dto.value }));\n const repo = this.dataSource.getRepository(ListOfValues);\n const idsToDeleteQuery = repo\n .createQueryBuilder('lov')\n .select('lov.id', 'id')\n .innerJoin('lov.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (pairs.length > 0) {\n const conditions = pairs.map((_, i) => `(lov.type = :t${i} AND lov.value = :v${i})`).join(' OR ');\n const params = pairs.reduce((acc, pair, i) => {\n acc[`t${i}`] = pair.type;\n acc[`v${i}`] = pair.value;\n return acc;\n }, {} as Record<string, string>);\n\n idsToDeleteQuery.andWhere(`NOT (${conditions})`, params);\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ListOfValues)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneDashboards(dashboardsDto: CreateDashboardDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping dashboards prune: missing module name in metadata.`);\n return 0;\n }\n const dashboards = dashboardsDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping dashboards prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const dashboardNames = [...new Set(dashboards.map(dto => dto.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(Dashboard);\n const idsToDeleteQuery = repo\n .createQueryBuilder('db')\n .select('db.id', 'id')\n .innerJoin('db.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (dashboardNames.length > 0) {\n idsToDeleteQuery.andWhere('db.name NOT IN (:...dashboardNames)', { dashboardNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(Dashboard)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneMenus(menusDto: any[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping menus prune: missing module name in metadata.`);\n return 0;\n }\n const menus = menusDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping menus prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const menuNames = [...new Set(menus.map(m => m.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(MenuItemMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('menu')\n .select('menu.id', 'id')\n .innerJoin('menu.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (menuNames.length > 0) {\n idsToDeleteQuery.andWhere('menu.name NOT IN (:...menuNames)', { menuNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n await this.dataSource\n .createQueryBuilder()\n .delete()\n .from(MENU_ROLE_JOIN_TABLE_NAME)\n .where(`${MENU_ROLE_JOIN_TABLE_NAME_MENU_COL} IN (:...ids)`, { ids })\n .execute();\n }\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(MenuItemMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneViews(viewsDto: any[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping views prune: missing module name in metadata.`);\n return 0;\n }\n const views = viewsDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping views prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const viewNames = [...new Set(views.map((v: any) => v.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(ViewMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('view')\n .select('view.id', 'id')\n .innerJoin('view.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (viewNames.length > 0) {\n idsToDeleteQuery.andWhere('view.name NOT IN (:...viewNames)', { viewNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n // Delete actions tied to these views before deleting the views themselves.\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const actionRows = await actionRepo\n .createQueryBuilder('action')\n .select('action.id', 'id')\n .innerJoin('action.view', 'view')\n .where('view.id IN (:...viewIds)', { viewIds: ids })\n .getRawMany();\n const actionIds = actionRows.map((row) => row.id);\n if (actionIds.length > 0) {\n const result = await actionRepo\n .createQueryBuilder()\n .delete()\n .from(ActionMetadata)\n .whereInIds(actionIds)\n .execute();\n if ((result.affected ?? 0) === 0) {\n this.logger.warn(`No actions deleted for pruned views in module ${moduleName}.`);\n }\n }\n\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ViewMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneActions(actionsDto: any[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping actions prune: missing module name in metadata.`);\n return 0;\n }\n const actions = actionsDto ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping actions prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const actionNames = [...new Set(actions.map((a: any) => a.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(ActionMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('action')\n .select('action.id', 'id')\n .innerJoin('action.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id });\n\n if (actionNames.length > 0) {\n idsToDeleteQuery.andWhere('action.name NOT IN (:...actionNames)', { actionNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const menuRepo = this.dataSource.getRepository(MenuItemMetadata);\n const menuRows = await menuRepo\n .createQueryBuilder('menu')\n .select('menu.id', 'id')\n .innerJoin('menu.action', 'action')\n .where('action.id IN (:...actionIds)', { actionIds: ids })\n .getRawMany();\n const menuIds = menuRows.map((row) => row.id);\n\n if (menuIds.length > 0) {\n await this.dataSource\n .createQueryBuilder()\n .delete()\n .from(MENU_ROLE_JOIN_TABLE_NAME)\n .where(`${MENU_ROLE_JOIN_TABLE_NAME_MENU_COL} IN (:...ids)`, { ids: menuIds })\n .execute();\n\n await menuRepo\n .createQueryBuilder()\n .delete()\n .from(MenuItemMetadata)\n .whereInIds(menuIds)\n .execute();\n }\n\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ActionMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneFieldsForModel(model: any, fieldsMetadata: any[] | undefined): Promise<number> {\n if (!model) {\n this.logger.warn(`Skipping fields prune: model not found.`);\n return 0;\n }\n const fields = fieldsMetadata ?? [];\n\n const fieldNames = [...new Set(fields.map(f => f.name).filter(Boolean))];\n const repo = this.dataSource.getRepository(FieldMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('field')\n .select('field.id', 'id')\n .innerJoin('field.model', 'model')\n .where('model.id = :modelId', { modelId: model.id })\n .andWhere('field.isSystem = :isSystem', { isSystem: false });\n\n if (fieldNames.length > 0) {\n idsToDeleteQuery.andWhere('field.name NOT IN (:...fieldNames)', { fieldNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(FieldMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private async pruneModels(modelsMetadata: CreateModelMetadataDto[] | undefined, moduleName?: string): Promise<number> {\n if (!moduleName) {\n this.logger.warn(`Skipping models prune: missing module name in metadata.`);\n return 0;\n }\n const models = modelsMetadata ?? [];\n\n const module = await this.moduleMetadataService.findOneByUserKey(moduleName);\n if (!module) {\n this.logger.warn(`Skipping models prune: module not found for ${moduleName}.`);\n return 0;\n }\n\n const modelNames = [...new Set(models.map(m => m.singularName).filter(Boolean))];\n const repo = this.dataSource.getRepository(ModelMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('model')\n .select('model.id', 'id')\n .innerJoin('model.module', 'module')\n .where('module.id = :moduleId', { moduleId: module.id })\n .andWhere('model.isSystem = :isSystem', { isSystem: false });\n\n if (modelNames.length > 0) {\n idsToDeleteQuery.andWhere('model.singularName NOT IN (:...modelNames)', { modelNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(ModelMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n private getRolePermissionJoinInfo(): { tableName: string; permissionIdColumn: string } | null {\n const roleMetadata = this.dataSource.getMetadata(RoleMetadata);\n const relation = roleMetadata.relations.find((r) => r.propertyName === 'permissions');\n if (!relation || !relation.junctionEntityMetadata) {\n this.logger.warn(`Role-permission join table metadata not found; skipping join cleanup.`);\n return null;\n }\n\n const permissionIdColumn = relation.inverseJoinColumns[0]?.databaseName;\n if (!permissionIdColumn) {\n this.logger.warn(`Role-permission join column not found; skipping join cleanup.`);\n return null;\n }\n\n return {\n tableName: relation.junctionEntityMetadata.tableName,\n permissionIdColumn,\n };\n }\n\n private async prunePermissions(permissionNames: string[]): Promise<number> {\n const uniqueNames = [...new Set(permissionNames.filter(Boolean))];\n const repo = this.dataSource.getRepository(PermissionMetadata);\n const idsToDeleteQuery = repo\n .createQueryBuilder('perm')\n .select('perm.id', 'id');\n\n if (uniqueNames.length > 0) {\n idsToDeleteQuery.andWhere('perm.name NOT IN (:...names)', { names: uniqueNames });\n }\n\n const rows = await idsToDeleteQuery.getRawMany();\n const ids = rows.map((row) => row.id);\n // Commented out to allow pruning when metadata is empty/missing.\n // if (ids.length === 0) {\n // return;\n // }\n\n const joinInfo = this.getRolePermissionJoinInfo();\n if (joinInfo && ids.length > 0) {\n await this.dataSource\n .createQueryBuilder()\n .delete()\n .from(joinInfo.tableName)\n .where(`${joinInfo.permissionIdColumn} IN (:...ids)`, { ids })\n .execute();\n }\n\n if (ids.length > 0) {\n const result = await repo\n .createQueryBuilder()\n .delete()\n .from(PermissionMetadata)\n .whereInIds(ids)\n .execute();\n return result.affected ?? 0;\n }\n return 0;\n }\n\n // private async resolvePruningChoice(conf?: any): Promise<boolean> {\n // if (typeof conf?.pruneMetadata === 'boolean') {\n // return conf.pruneMetadata;\n // }\n // if (!process.stdin.isTTY) {\n // return false;\n // }\n\n // const rl = readline.createInterface({\n // input: process.stdin,\n // output: process.stdout,\n // });\n\n // const question = `Prune metadata entries not in JSON? (y/N) `;\n // const answer: string = await new Promise((resolve) => {\n // rl.question(question, (input) => resolve(input));\n // });\n // rl.close();\n\n // return answer.trim().toLowerCase().startsWith('y');\n // }\n\n private logSeedFailureForCli(\n error: unknown,\n context: { moduleName: string; step: string; pruneEnabled: boolean; modulesToSeed: string[] | null }\n ): void {\n const err = error instanceof Error ? error : new Error(String(error));\n const stackLines = (err.stack ?? '')\n .split('\\n')\n .slice(0, 8)\n .map((line) => line.trim())\n .filter(Boolean);\n const logPayload = {\n module: context.moduleName,\n step: context.step,\n pruneEnabled: context.pruneEnabled,\n modulesToSeed: context.modulesToSeed?.length ? context.modulesToSeed : 'ALL',\n error: {\n name: err.name,\n message: err.message,\n stackPreview: stackLines.length > 0 ? stackLines : undefined,\n },\n };\n\n console.log('✖ Seeding failed');\n console.log(JSON.stringify(logPayload, null, 2));\n }\n\n private formatSeedResult(moduleName: string, label: string, counts: { pruned: number; upserted: number }): string {\n if (this.enablePruning) {\n return `✔ [${moduleName}] ${label} seeded (pruned ${counts.pruned}, upserted ${counts.upserted})`;\n }\n return `✔ [${moduleName}] ${label} seeded (upserted ${counts.upserted})`;\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"module-test-data.service.d.ts","sourceRoot":"","sources":["../../src/seeders/module-test-data.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAW3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,qBACa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAG9C,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa;IAGzC,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqEtC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD5C,OAAO,KAAK,aAAa,GAexB;YAEa,YAAY;IA6E1B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,oBAAoB;YA4Bd,yBAAyB;IA6BvC,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,kBAAkB;YAmCZ,uBAAuB;YA4BvB,eAAe;CA4B9B"}
1
+ {"version":3,"file":"module-test-data.service.d.ts","sourceRoot":"","sources":["../../src/seeders/module-test-data.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAW3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,qBACa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAG9C,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa;IAGzC,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqEtC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD5C,OAAO,KAAK,aAAa,GAexB;YAEa,YAAY;IA+E1B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,oBAAoB;YA4Bd,yBAAyB;IA6BvC,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,kBAAkB;YAmCZ,uBAAuB;YA4BvB,eAAe;CA4B9B"}