@solidxai/core 0.1.11-beta.0 → 0.1.11-beta.11

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 (226) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/CLAUDE.md +26 -0
  3. package/dist/commands/migrate-removed-fields.command.d.ts +19 -0
  4. package/dist/commands/migrate-removed-fields.command.d.ts.map +1 -0
  5. package/dist/commands/migrate-removed-fields.command.js +77 -0
  6. package/dist/commands/migrate-removed-fields.command.js.map +1 -0
  7. package/dist/controllers/datasource-introspection.controller.d.ts +46 -1
  8. package/dist/controllers/datasource-introspection.controller.d.ts.map +1 -1
  9. package/dist/controllers/datasource-introspection.controller.js +38 -0
  10. package/dist/controllers/datasource-introspection.controller.js.map +1 -1
  11. package/dist/controllers/service.controller.d.ts +1 -0
  12. package/dist/controllers/service.controller.d.ts.map +1 -1
  13. package/dist/controllers/service.controller.js +2 -2
  14. package/dist/controllers/service.controller.js.map +1 -1
  15. package/dist/dtos/datasource-introspection-mapping.dto.d.ts +5 -0
  16. package/dist/dtos/datasource-introspection-mapping.dto.d.ts.map +1 -1
  17. package/dist/dtos/datasource-introspection-mapping.dto.js +24 -2
  18. package/dist/dtos/datasource-introspection-mapping.dto.js.map +1 -1
  19. package/dist/entities/{legacy-common-with-id.entity.d.ts → legacy-common-with-generated-id.entity.d.ts} +2 -2
  20. package/dist/entities/legacy-common-with-generated-id.entity.d.ts.map +1 -0
  21. package/dist/entities/{legacy-common-with-id.entity.js → legacy-common-with-generated-id.entity.js} +4 -4
  22. package/dist/entities/legacy-common-with-generated-id.entity.js.map +1 -0
  23. package/dist/entities/{legacy-common.entity.d.ts → legacy-common.entity-with-existing-id.entity.d.ts} +1 -1
  24. package/dist/entities/legacy-common.entity-with-existing-id.entity.d.ts.map +1 -0
  25. package/dist/entities/{legacy-common.entity.js → legacy-common.entity-with-existing-id.entity.js} +1 -1
  26. package/dist/entities/legacy-common.entity-with-existing-id.entity.js.map +1 -0
  27. package/dist/helpers/command.service.d.ts +2 -0
  28. package/dist/helpers/command.service.d.ts.map +1 -1
  29. package/dist/helpers/command.service.js +6 -2
  30. package/dist/helpers/command.service.js.map +1 -1
  31. package/dist/helpers/environment.helper.d.ts +1 -0
  32. package/dist/helpers/environment.helper.d.ts.map +1 -1
  33. package/dist/helpers/environment.helper.js +4 -0
  34. package/dist/helpers/environment.helper.js.map +1 -1
  35. package/dist/helpers/field-crud-managers/IntFieldCrudManager.d.ts.map +1 -1
  36. package/dist/helpers/field-crud-managers/IntFieldCrudManager.js +4 -1
  37. package/dist/helpers/field-crud-managers/IntFieldCrudManager.js.map +1 -1
  38. package/dist/helpers/model-metadata-helper.service.d.ts +2 -1
  39. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  40. package/dist/helpers/model-metadata-helper.service.js +9 -5
  41. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  42. package/dist/helpers/nodemon-heartbeat.d.ts +5 -0
  43. package/dist/helpers/nodemon-heartbeat.d.ts.map +1 -0
  44. package/dist/helpers/nodemon-heartbeat.js +67 -0
  45. package/dist/helpers/nodemon-heartbeat.js.map +1 -0
  46. package/dist/helpers/solid-registry.d.ts +2 -1
  47. package/dist/helpers/solid-registry.d.ts.map +1 -1
  48. package/dist/helpers/solid-registry.js.map +1 -1
  49. package/dist/helpers/typeorm-db-helper.d.ts +1 -0
  50. package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
  51. package/dist/helpers/typeorm-db-helper.js +12 -0
  52. package/dist/helpers/typeorm-db-helper.js.map +1 -1
  53. package/dist/index.d.ts +3 -2
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/interfaces/datasource-introspection-provider.interface.d.ts +1 -0
  58. package/dist/interfaces/datasource-introspection-provider.interface.d.ts.map +1 -1
  59. package/dist/interfaces/datasource-introspection-provider.interface.js.map +1 -1
  60. package/dist/interfaces.d.ts +1 -0
  61. package/dist/interfaces.d.ts.map +1 -1
  62. package/dist/interfaces.js.map +1 -1
  63. package/dist/repository/scheduled-job.repository.d.ts +5 -2
  64. package/dist/repository/scheduled-job.repository.d.ts.map +1 -1
  65. package/dist/repository/scheduled-job.repository.js +66 -3
  66. package/dist/repository/scheduled-job.repository.js.map +1 -1
  67. package/dist/repository/security-rule.repository.d.ts +2 -2
  68. package/dist/repository/security-rule.repository.d.ts.map +1 -1
  69. package/dist/repository/security-rule.repository.js +6 -3
  70. package/dist/repository/security-rule.repository.js.map +1 -1
  71. package/dist/seeders/module-metadata-seeder.service.d.ts +43 -2
  72. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  73. package/dist/seeders/module-metadata-seeder.service.js +1173 -232
  74. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  75. package/dist/seeders/seed-data/solid-core-metadata.json +128 -34
  76. package/dist/services/action-metadata.service.d.ts +7 -0
  77. package/dist/services/action-metadata.service.d.ts.map +1 -1
  78. package/dist/services/action-metadata.service.js +76 -3
  79. package/dist/services/action-metadata.service.js.map +1 -1
  80. package/dist/services/api-key.service.d.ts.map +1 -1
  81. package/dist/services/api-key.service.js.map +1 -1
  82. package/dist/services/authentication.service.d.ts +2 -0
  83. package/dist/services/authentication.service.d.ts.map +1 -1
  84. package/dist/services/authentication.service.js +32 -11
  85. package/dist/services/authentication.service.js.map +1 -1
  86. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
  87. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +7 -5
  88. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
  89. package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts +4 -0
  90. package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts.map +1 -1
  91. package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js +18 -1
  92. package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js.map +1 -1
  93. package/dist/services/crud-helper.service.d.ts.map +1 -1
  94. package/dist/services/crud-helper.service.js +25 -12
  95. package/dist/services/crud-helper.service.js.map +1 -1
  96. package/dist/services/crud.service.d.ts +1 -0
  97. package/dist/services/crud.service.d.ts.map +1 -1
  98. package/dist/services/crud.service.js +27 -0
  99. package/dist/services/crud.service.js.map +1 -1
  100. package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.d.ts.map +1 -1
  101. package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js +12 -0
  102. package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js.map +1 -1
  103. package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.d.ts.map +1 -1
  104. package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js +2 -0
  105. package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js.map +1 -1
  106. package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.d.ts.map +1 -1
  107. package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js +28 -15
  108. package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js.map +1 -1
  109. package/dist/services/datasource-introspection.service.d.ts +62 -2
  110. package/dist/services/datasource-introspection.service.d.ts.map +1 -1
  111. package/dist/services/datasource-introspection.service.js +654 -186
  112. package/dist/services/datasource-introspection.service.js.map +1 -1
  113. package/dist/services/import-transaction.service.d.ts.map +1 -1
  114. package/dist/services/import-transaction.service.js +3 -0
  115. package/dist/services/import-transaction.service.js.map +1 -1
  116. package/dist/services/locale.service.d.ts +14 -0
  117. package/dist/services/locale.service.d.ts.map +1 -1
  118. package/dist/services/locale.service.js +83 -0
  119. package/dist/services/locale.service.js.map +1 -1
  120. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +10 -10
  121. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  122. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  123. package/dist/services/menu-item-metadata.service.js +1 -0
  124. package/dist/services/menu-item-metadata.service.js.map +1 -1
  125. package/dist/services/model-metadata.service.d.ts +3 -0
  126. package/dist/services/model-metadata.service.d.ts.map +1 -1
  127. package/dist/services/model-metadata.service.js +78 -0
  128. package/dist/services/model-metadata.service.js.map +1 -1
  129. package/dist/services/module-metadata.service.d.ts.map +1 -1
  130. package/dist/services/module-metadata.service.js +28 -0
  131. package/dist/services/module-metadata.service.js.map +1 -1
  132. package/dist/services/removed-field-migration.service.d.ts +30 -0
  133. package/dist/services/removed-field-migration.service.d.ts.map +1 -0
  134. package/dist/services/removed-field-migration.service.js +319 -0
  135. package/dist/services/removed-field-migration.service.js.map +1 -0
  136. package/dist/services/role-metadata.service.d.ts +5 -0
  137. package/dist/services/role-metadata.service.d.ts.map +1 -1
  138. package/dist/services/role-metadata.service.js +95 -33
  139. package/dist/services/role-metadata.service.js.map +1 -1
  140. package/dist/services/settings/default-settings-provider.service.d.ts +244 -0
  141. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  142. package/dist/services/settings/default-settings-provider.service.js +120 -0
  143. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  144. package/dist/services/solid-ts-morph.service.d.ts +6 -0
  145. package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
  146. package/dist/services/solid-ts-morph.service.js +43 -0
  147. package/dist/services/solid-ts-morph.service.js.map +1 -1
  148. package/dist/services/view-metadata.service.d.ts +6 -0
  149. package/dist/services/view-metadata.service.d.ts.map +1 -1
  150. package/dist/services/view-metadata.service.js +70 -8
  151. package/dist/services/view-metadata.service.js.map +1 -1
  152. package/dist/solid-core.module.d.ts.map +1 -1
  153. package/dist/solid-core.module.js +4 -0
  154. package/dist/solid-core.module.js.map +1 -1
  155. package/dist/subscribers/audit.subscriber.d.ts +5 -1
  156. package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
  157. package/dist/subscribers/audit.subscriber.js +76 -12
  158. package/dist/subscribers/audit.subscriber.js.map +1 -1
  159. package/dist/subscribers/computed-entity-field.subscriber.d.ts +9 -1
  160. package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
  161. package/dist/subscribers/computed-entity-field.subscriber.js +45 -11
  162. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  163. package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
  164. package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
  165. package/dist/subscribers/field-metadata.subscriber.d.ts.map +1 -1
  166. package/dist/subscribers/field-metadata.subscriber.js.map +1 -1
  167. package/dist/subscribers/scheduled-job.subscriber.d.ts.map +1 -1
  168. package/dist/subscribers/scheduled-job.subscriber.js +3 -2
  169. package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
  170. package/dist/subscribers/security-rule.subscriber.d.ts.map +1 -1
  171. package/dist/subscribers/security-rule.subscriber.js +5 -3
  172. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  173. package/package.json +1 -1
  174. package/src/commands/migrate-removed-fields.command.ts +81 -0
  175. package/src/controllers/datasource-introspection.controller.ts +27 -1
  176. package/src/controllers/service.controller.ts +3 -2
  177. package/src/dtos/datasource-introspection-mapping.dto.ts +15 -0
  178. package/src/entities/{legacy-common-with-id.entity.ts → legacy-common-with-generated-id.entity.ts} +1 -1
  179. package/src/helpers/command.service.ts +10 -2
  180. package/src/helpers/environment.helper.ts +11 -0
  181. package/src/helpers/field-crud-managers/IntFieldCrudManager.ts +4 -1
  182. package/src/helpers/model-metadata-helper.service.ts +8 -3
  183. package/src/helpers/nodemon-heartbeat.ts +59 -0
  184. package/src/helpers/solid-registry.ts +7 -1
  185. package/src/helpers/typeorm-db-helper.ts +15 -0
  186. package/src/index.ts +3 -2
  187. package/src/interfaces/datasource-introspection-provider.interface.ts +1 -0
  188. package/src/interfaces.ts +1 -0
  189. package/src/repository/scheduled-job.repository.ts +83 -4
  190. package/src/repository/security-rule.repository.ts +10 -4
  191. package/src/seeders/module-metadata-seeder.service.ts +1415 -264
  192. package/src/seeders/seed-data/solid-core-metadata.json +128 -34
  193. package/src/services/action-metadata.service.ts +87 -2
  194. package/src/services/api-key.service.ts +36 -36
  195. package/src/services/authentication.service.ts +46 -12
  196. package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +11 -5
  197. package/src/services/computed-fields/entity/concat-entity-computed-field-provider.service.ts +15 -1
  198. package/src/services/crud-helper.service.ts +25 -12
  199. package/src/services/crud.service.ts +36 -11
  200. package/src/services/datasource-introspection/mssql-datasource-introspection-provider.service.ts +12 -0
  201. package/src/services/datasource-introspection/mysql-datasource-introspection-provider.service.ts +2 -0
  202. package/src/services/datasource-introspection/postgres-datasource-introspection-provider.service.ts +28 -15
  203. package/src/services/datasource-introspection.service.ts +811 -161
  204. package/src/services/import-transaction.service.ts +5 -0
  205. package/src/services/locale.service.ts +111 -3
  206. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +2 -2
  207. package/src/services/menu-item-metadata.service.ts +2 -1
  208. package/src/services/model-metadata.service.ts +109 -1
  209. package/src/services/module-metadata.service.ts +36 -0
  210. package/src/services/removed-field-migration.service.ts +334 -0
  211. package/src/services/role-metadata.service.ts +112 -49
  212. package/src/services/settings/default-settings-provider.service.ts +120 -0
  213. package/src/services/solid-ts-morph.service.ts +61 -1
  214. package/src/services/view-metadata.service.ts +83 -9
  215. package/src/solid-core.module.ts +4 -0
  216. package/src/subscribers/audit.subscriber.ts +101 -18
  217. package/src/subscribers/computed-entity-field.subscriber.ts +81 -28
  218. package/src/subscribers/created-by-updated-by.subscriber.ts +3 -0
  219. package/src/subscribers/field-metadata.subscriber.ts +3 -0
  220. package/src/subscribers/scheduled-job.subscriber.ts +3 -2
  221. package/src/subscribers/security-rule.subscriber.ts +8 -3
  222. package/dist/entities/legacy-common-with-id.entity.d.ts.map +0 -1
  223. package/dist/entities/legacy-common-with-id.entity.js.map +0 -1
  224. package/dist/entities/legacy-common.entity.d.ts.map +0 -1
  225. package/dist/entities/legacy-common.entity.js.map +0 -1
  226. /package/src/entities/{legacy-common.entity.ts → legacy-common.entity-with-existing-id.entity.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-job.repository.js","sourceRoot":"","sources":["../../src/repository/scheduled-job.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { CreateScheduledJobDto } from \"src/dtos/create-scheduled-job.dto\";\nimport { ModuleMetadata } from \"src/entities/module-metadata.entity\";\nimport { ScheduledJob } from \"src/entities/scheduled-job.entity\";\nimport { RequestContextService } from \"src/services/request-context.service\";\nimport { DataSource } from \"typeorm\";\nimport { SecurityRuleRepository } from \"./security-rule.repository\";\nimport { SolidBaseRepository } from \"./solid-base.repository\";\n\n// This should match whatever DTO structure you’re using in your seeding logic\n// export type CreateScheduledJobDto = {\n// scheduleName: string;\n// isActive?: boolean;\n// frequency: string;\n// startTime?: Date;\n// endTime?: Date;\n// startDate?: Date;\n// endDate?: Date;\n// dayOfMonth?: number;\n// lastRunAt?: Date;\n// nextRunAt?: Date;\n// dayOfWeek?: string;\n// job: string;\n// moduleUserKey: string;\n// };\n\n@Injectable()\nexport class ScheduledJobRepository extends SolidBaseRepository<ScheduledJob> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n ) {\n super(ScheduledJob, dataSource, requestContextService, securityRuleRepository);\n }\n\n /**\n * Converts an entity to a plain DTO object.\n */\n async toDto(scheduledJob: ScheduledJob): Promise<CreateScheduledJobDto> {\n let populatedScheduledJob: ScheduledJob = scheduledJob;\n // If the scheduled job does not have the module relation loaded, load it\n if (!scheduledJob.module) {\n populatedScheduledJob = await this.findOne({\n where: {\n id: scheduledJob.id,\n },\n relations: {\n module: true,\n },\n });\n }\n\n if (!populatedScheduledJob.module) {\n throw new Error(`Module not found for scheduled job ID ${populatedScheduledJob.id}`);\n }\n\n return {\n scheduleName: populatedScheduledJob.scheduleName,\n isActive: populatedScheduledJob.isActive,\n frequency: populatedScheduledJob.frequency,\n startTime: populatedScheduledJob.startTime,\n endTime: populatedScheduledJob.endTime,\n startDate: populatedScheduledJob.startDate,\n endDate: populatedScheduledJob.endDate,\n dayOfMonth: populatedScheduledJob.dayOfMonth,\n lastRunAt: populatedScheduledJob.lastRunAt,\n nextRunAt: populatedScheduledJob.nextRunAt,\n dayOfWeek: populatedScheduledJob.dayOfWeek,\n job: populatedScheduledJob.job,\n moduleUserKey: populatedScheduledJob.module.name,\n moduleId: populatedScheduledJob.module.id,\n cronExpression: populatedScheduledJob.cronExpression,\n };\n }\n\n async upsertWithDto(dto: CreateScheduledJobDto): Promise<ScheduledJob> {\n const moduleRepo = this.dataSource.getRepository(ModuleMetadata);\n\n const moduleEntity = await moduleRepo.findOne({\n where: { name: dto.moduleUserKey },\n });\n\n if (!moduleEntity) {\n throw new Error(`Module with userKey ${dto.moduleUserKey} not found`);\n }\n\n const jobData = {\n ...dto,\n module: moduleEntity,\n };\n const existing = await this.findOne({\n where: { scheduleName: dto.scheduleName },\n });\n\n if (existing) {\n const merged = this.merge(existing, jobData);\n this.logger.debug(`Updating scheduled job: ${dto.scheduleName}`);\n return this.save(merged);\n } else {\n this.logger.debug(`Creating scheduled job: ${dto.scheduleName}`);\n return this.save(this.create(jobData));\n }\n }\n}\n"]}
1
+ {"version":3,"file":"scheduled-job.repository.js","sourceRoot":"","sources":["../../src/repository/scheduled-job.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { CreateScheduledJobDto } from \"src/dtos/create-scheduled-job.dto\";\nimport { ModuleMetadata } from \"src/entities/module-metadata.entity\";\nimport { ScheduledJob } from \"src/entities/scheduled-job.entity\";\nimport { RequestContextService } from \"src/services/request-context.service\";\nimport { DataSource, EntityManager } from \"typeorm\";\nimport { SecurityRuleRepository } from \"./security-rule.repository\";\nimport { SolidBaseRepository } from \"./solid-base.repository\";\n\n// This should match whatever DTO structure you’re using in your seeding logic\n// export type CreateScheduledJobDto = {\n// scheduleName: string;\n// isActive?: boolean;\n// frequency: string;\n// startTime?: Date;\n// endTime?: Date;\n// startDate?: Date;\n// endDate?: Date;\n// dayOfMonth?: number;\n// lastRunAt?: Date;\n// nextRunAt?: Date;\n// dayOfWeek?: string;\n// job: string;\n// moduleUserKey: string;\n// };\n\n@Injectable()\nexport class ScheduledJobRepository extends SolidBaseRepository<ScheduledJob> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n ) {\n super(ScheduledJob, dataSource, requestContextService, securityRuleRepository);\n }\n\n private normalizeComparableValue(value: any): any {\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (typeof value === \"string\") {\n const trimmedValue = value.trim();\n if (\n (trimmedValue.startsWith(\"{\") && trimmedValue.endsWith(\"}\")) ||\n (trimmedValue.startsWith(\"[\") && trimmedValue.endsWith(\"]\"))\n ) {\n try {\n return this.normalizeComparableValue(JSON.parse(trimmedValue));\n } catch {\n return value;\n }\n }\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.normalizeComparableValue(item));\n }\n\n if (value && typeof value === \"object\") {\n return Object.keys(value)\n .sort()\n .reduce((result, key) => {\n result[key] = this.normalizeComparableValue(value[key]);\n return result;\n }, {} as Record<string, any>);\n }\n\n return value;\n }\n\n private areValuesDifferent(currentValue: any, nextValue: any): boolean {\n const normalizedCurrentValue = this.normalizeComparableValue(currentValue);\n const normalizedNextValue = this.normalizeComparableValue(nextValue);\n\n if (\n (normalizedCurrentValue && typeof normalizedCurrentValue === \"object\") ||\n (normalizedNextValue && typeof normalizedNextValue === \"object\")\n ) {\n return JSON.stringify(normalizedCurrentValue ?? null) !== JSON.stringify(normalizedNextValue ?? null);\n }\n\n return normalizedCurrentValue !== normalizedNextValue;\n }\n\n private hasChanges(existing: ScheduledJob, dto: CreateScheduledJobDto, moduleEntity: ModuleMetadata): boolean {\n return existing.scheduleName !== dto.scheduleName\n || existing.isActive !== dto.isActive\n || this.areValuesDifferent(existing.frequency, dto.frequency)\n || this.areValuesDifferent(existing.startTime, dto.startTime)\n || this.areValuesDifferent(existing.endTime, dto.endTime)\n || this.areValuesDifferent(existing.startDate, dto.startDate)\n || this.areValuesDifferent(existing.endDate, dto.endDate)\n || this.areValuesDifferent(existing.dayOfMonth, dto.dayOfMonth)\n || this.areValuesDifferent(existing.dayOfWeek, dto.dayOfWeek)\n || this.areValuesDifferent(existing.job, dto.job)\n || this.areValuesDifferent(existing.cronExpression, dto.cronExpression)\n || existing.module?.id !== moduleEntity.id;\n }\n\n /**\n * Converts an entity to a plain DTO object.\n * When manager is provided (e.g. from a TypeORM subscriber event), the\n * fallback relation load uses it so the query runs on the active\n * transaction's connection instead of the default DataSource pool.\n */\n async toDto(scheduledJob: ScheduledJob, manager?: EntityManager): Promise<CreateScheduledJobDto> {\n let populatedScheduledJob: ScheduledJob = scheduledJob;\n // If the scheduled job does not have the module relation loaded, load it\n if (!scheduledJob.module) {\n const repo = manager\n ? manager.getRepository(ScheduledJob)\n : this;\n populatedScheduledJob = await repo.findOne({\n where: {\n id: scheduledJob.id,\n },\n relations: {\n module: true,\n },\n }) ?? scheduledJob;\n }\n\n if (!populatedScheduledJob.module) {\n throw new Error(`Module not found for scheduled job ID ${populatedScheduledJob.id}`);\n }\n\n return {\n scheduleName: populatedScheduledJob.scheduleName,\n isActive: populatedScheduledJob.isActive,\n frequency: populatedScheduledJob.frequency,\n startTime: populatedScheduledJob.startTime,\n endTime: populatedScheduledJob.endTime,\n startDate: populatedScheduledJob.startDate,\n endDate: populatedScheduledJob.endDate,\n dayOfMonth: populatedScheduledJob.dayOfMonth,\n lastRunAt: populatedScheduledJob.lastRunAt,\n nextRunAt: populatedScheduledJob.nextRunAt,\n dayOfWeek: populatedScheduledJob.dayOfWeek,\n job: populatedScheduledJob.job,\n moduleUserKey: populatedScheduledJob.module.name,\n moduleId: populatedScheduledJob.module.id,\n cronExpression: populatedScheduledJob.cronExpression,\n };\n }\n\n async upsertWithDto(dto: CreateScheduledJobDto): Promise<ScheduledJob> {\n const moduleRepo = this.dataSource.getRepository(ModuleMetadata);\n\n const moduleEntity = await moduleRepo.findOne({\n where: { name: dto.moduleUserKey },\n });\n\n if (!moduleEntity) {\n throw new Error(`Module with userKey ${dto.moduleUserKey} not found`);\n }\n\n const jobData = {\n ...dto,\n module: moduleEntity,\n };\n const existing = await this.findOne({\n where: { scheduleName: dto.scheduleName },\n relations: {\n module: true,\n },\n });\n\n if (existing) {\n if (!this.hasChanges(existing, dto, moduleEntity)) {\n this.logger.debug(`Skipping scheduled job upsert for ${dto.scheduleName}; no changes detected.`);\n return existing;\n }\n\n const merged = this.merge(existing, jobData);\n this.logger.debug(`Updating scheduled job: ${dto.scheduleName}`);\n return this.save(merged);\n } else {\n this.logger.debug(`Creating scheduled job: ${dto.scheduleName}`);\n return this.save(this.create(jobData));\n }\n }\n}\n"]}
@@ -5,7 +5,7 @@ import { SecurityRule } from '../entities/security-rule.entity';
5
5
  import { SolidRegistry } from '../helpers/solid-registry';
6
6
  import { ActiveUserData } from '../interfaces/active-user-data.interface';
7
7
  import { CrudHelperService } from '../services/crud-helper.service';
8
- import { DataSource, SelectQueryBuilder } from 'typeorm';
8
+ import { DataSource, EntityManager, SelectQueryBuilder } from 'typeorm';
9
9
  import { SolidBaseRepository } from './solid-base.repository';
10
10
  export declare class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
11
11
  readonly dataSource: DataSource;
@@ -14,7 +14,7 @@ export declare class SecurityRuleRepository extends SolidBaseRepository<Security
14
14
  constructor(dataSource: DataSource, solidRegistry: SolidRegistry, crudHelperService: CrudHelperService);
15
15
  applySecurityRules<T extends CommonEntity>(qb: SelectQueryBuilder<T>, modelSingularName: string, activeUser: ActiveUserData, securityRuleAlias?: string): Promise<SelectQueryBuilder<T>>;
16
16
  private resolveSecurityRuleConfig;
17
- toDto(securityRule: SecurityRule): Promise<UpdateSecurityRuleDto>;
17
+ toDto(securityRule: SecurityRule, manager?: EntityManager): Promise<UpdateSecurityRuleDto>;
18
18
  upsertWithDto(createDto: CreateSecurityRuleDto): Promise<SecurityRule>;
19
19
  }
20
20
  //# sourceMappingURL=security-rule.repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"security-rule.repository.d.ts","sourceRoot":"","sources":["../../src/repository/security-rule.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAY,UAAU,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBACa,sBAAuB,SAAQ,mBAAmB,CAAC,YAAY,CAAC;IAErE,QAAQ,CAAC,UAAU,EAAE,UAAU;IAE/B,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;gBAHpC,UAAU,EAAE,UAAU,EAEtB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB;IAK3C,kBAAkB,CAAC,CAAC,SAAS,YAAY,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,GAAE,MAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAyDxM,OAAO,CAAC,yBAAyB;IAI3B,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA6BjE,aAAa,CAAC,SAAS,EAAE,qBAAqB;CAyDvD"}
1
+ {"version":3,"file":"security-rule.repository.d.ts","sourceRoot":"","sources":["../../src/repository/security-rule.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAY,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBACa,sBAAuB,SAAQ,mBAAmB,CAAC,YAAY,CAAC;IAErE,QAAQ,CAAC,UAAU,EAAE,UAAU;IAE/B,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;gBAHpC,UAAU,EAAE,UAAU,EAEtB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB;IAK3C,kBAAkB,CAAC,CAAC,SAAS,YAAY,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,GAAE,MAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAyDxM,OAAO,CAAC,yBAAyB;IAI3B,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmC1F,aAAa,CAAC,SAAS,EAAE,qBAAqB;CAyDvD"}
@@ -66,10 +66,13 @@ let SecurityRuleRepository = class SecurityRuleRepository extends solid_base_rep
66
66
  resolveSecurityRuleConfig(configString, activeUser) {
67
67
  return configString.replace('$activeUserId', activeUser.sub.toString());
68
68
  }
69
- async toDto(securityRule) {
69
+ async toDto(securityRule, manager) {
70
70
  let populatedSecurityRule = securityRule;
71
71
  if (!securityRule.role || !securityRule.modelMetadata) {
72
- populatedSecurityRule = await this.findOne({
72
+ const repo = manager
73
+ ? manager.getRepository(security_rule_entity_1.SecurityRule)
74
+ : this;
75
+ populatedSecurityRule = await repo.findOne({
73
76
  where: {
74
77
  id: securityRule.id,
75
78
  },
@@ -77,7 +80,7 @@ let SecurityRuleRepository = class SecurityRuleRepository extends solid_base_rep
77
80
  role: true,
78
81
  modelMetadata: true,
79
82
  },
80
- });
83
+ }) ?? securityRule;
81
84
  }
82
85
  return {
83
86
  id: populatedSecurityRule.id,
@@ -1 +1 @@
1
- {"version":3,"file":"security-rule.repository.js","sourceRoot":"","sources":["../../src/repository/security-rule.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { CreateSecurityRuleDto } from 'src/dtos/create-security-rule.dto';\nimport { SecurityRuleConfig } from 'src/dtos/security-rule-config.dto';\nimport { UpdateSecurityRuleDto } from 'src/dtos/update-security-rule.dto';\nimport { CommonEntity } from 'src/entities/common.entity';\nimport { ModelMetadata } from 'src/entities/model-metadata.entity';\nimport { RoleMetadata } from 'src/entities/role-metadata.entity';\nimport { SecurityRule } from 'src/entities/security-rule.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { Brackets, DataSource, SelectQueryBuilder } from 'typeorm';\nimport { SolidBaseRepository } from './solid-base.repository';\n\n@Injectable()\nexport class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {\n constructor(\n readonly dataSource: DataSource,\n // readonly requestContextService: RequestContextService,\n readonly solidRegistry: SolidRegistry,\n readonly crudHelperService: CrudHelperService,\n ) {\n super(SecurityRule, dataSource, null, null);\n }\n\n async applySecurityRules<T extends CommonEntity>(qb: SelectQueryBuilder<T>, modelSingularName: string, activeUser: ActiveUserData, securityRuleAlias: string = qb.alias): Promise<SelectQueryBuilder<T>> {\n // Fetch the security rules for the model and roles\n const securityRules = this.solidRegistry.getSecurityRules(modelSingularName, activeUser.roles);\n\n // If no security rules, return the original query builder\n if (!securityRules.length) {\n return qb;\n }\n\n const evaluatedRules = [];\n\n for (const rule of securityRules) {\n\n let evaluatedRule = null;\n\n try {\n // First check if the rule has a \"dynamic\" security rule config provider. \n if (rule.securityRuleConfigProvider) {\n // TODO: Evaluation of the securityRuleConfig Provider should happen outside first...\n const securityRuleConfigProviderInstance = this.solidRegistry.getSecurityRuleConfigProviderInstance(rule.securityRuleConfigProvider);\n if (!securityRuleConfigProviderInstance) {\n throw new Error(`Unable to resolve instance for security rule config provider: ${rule.securityRuleConfigProvider}`);\n }\n evaluatedRule = await securityRuleConfigProviderInstance.securityRuleConfig(activeUser, rule);\n }\n else {\n evaluatedRule = JSON.parse(\n this.resolveSecurityRuleConfig(rule.securityRuleConfig, activeUser)\n ) as SecurityRuleConfig;\n }\n\n evaluatedRules.push(evaluatedRule);\n\n } catch (error: any) {\n this.logger.error(`Error parsing security rule: ${rule.securityRuleConfig}`, error);\n this.logger.error(error.stack);\n throw error;\n }\n }\n\n\n // Apply each security rule to the query builder. The rules are combined with OR logic at the top level.\n qb.andWhere(new Brackets(async (outerQb) => {\n for (const evaluatedRule of evaluatedRules) {\n if (evaluatedRule && evaluatedRule.filters) {\n outerQb.orWhere( // combine each rule-group with OR at the outer level\n new Brackets((innerQb) => {\n this.crudHelperService.applyFilters(innerQb, evaluatedRule.filters, securityRuleAlias, qb); // AND within a rule\n })\n );\n }\n }\n }));\n\n return qb;\n }\n\n private resolveSecurityRuleConfig(configString: string, activeUser: ActiveUserData) {\n return configString.replace('$activeUserId', activeUser.sub.toString());\n }\n\n async toDto(securityRule: SecurityRule): Promise<UpdateSecurityRuleDto> {\n // load the role and model relations for the security rule\n let populatedSecurityRule: SecurityRule = securityRule;\n // If the security rule does not have the role and model relations loaded, load them\n if (!securityRule.role || !securityRule.modelMetadata) {\n populatedSecurityRule = await this.findOne({\n where: {\n id: securityRule.id,\n },\n relations: {\n role: true,\n modelMetadata: true,\n },\n });\n }\n\n return {\n id: populatedSecurityRule.id,\n name: populatedSecurityRule.name,\n description: populatedSecurityRule.description,\n roleId: populatedSecurityRule.role.id,\n roleUserKey: populatedSecurityRule.role.name,\n modelMetadataId: populatedSecurityRule.modelMetadata.id,\n modelMetadataUserKey: populatedSecurityRule.modelMetadata.singularName,\n securityRuleConfig: populatedSecurityRule.securityRuleConfig,\n securityRuleConfigProvider: populatedSecurityRule.securityRuleConfigProvider,\n };\n }\n\n async upsertWithDto(createDto: CreateSecurityRuleDto) {\n // Populate the role from roleId or roleUserKey\n const roleRepository = this.dataSource.getRepository(RoleMetadata);\n if (createDto.roleId) {\n const role = await roleRepository.findOne({\n where: {\n id: createDto.roleId,\n },\n });\n createDto['role'] = role;\n }\n\n if (createDto.roleUserKey) {\n const role = await roleRepository.findOne({\n where: {\n name: createDto.roleUserKey,\n },\n });\n createDto['role'] = role;\n }\n\n // Populate the model from modelMetadataId or modelMetadataUserKey\n const modelMetadataRepository = this.dataSource.getRepository(ModelMetadata);\n if (createDto.modelMetadataId) {\n const modelMetadata = await modelMetadataRepository.findOne({\n where: {\n id: createDto.modelMetadataId,\n },\n });\n createDto['modelMetadata'] = modelMetadata;\n }\n if (createDto.modelMetadataUserKey) {\n const modelMetadata = await modelMetadataRepository.findOne({\n where: {\n singularName: createDto.modelMetadataUserKey,\n },\n });\n createDto['modelMetadata'] = modelMetadata;\n }\n\n // First check if module already exists using name\n const existingSecurityRule = await this.findOne({\n where: {\n name: createDto.name,\n },\n });\n\n if (existingSecurityRule) {\n const updatedSecurityRule = this.merge(existingSecurityRule, createDto);\n return this.save(updatedSecurityRule);\n }\n else {\n const securityRule = this.create(createDto);\n return this.save(securityRule);\n }\n }\n\n}"]}
1
+ {"version":3,"file":"security-rule.repository.js","sourceRoot":"","sources":["../../src/repository/security-rule.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { CreateSecurityRuleDto } from 'src/dtos/create-security-rule.dto';\nimport { SecurityRuleConfig } from 'src/dtos/security-rule-config.dto';\nimport { UpdateSecurityRuleDto } from 'src/dtos/update-security-rule.dto';\nimport { CommonEntity } from 'src/entities/common.entity';\nimport { ModelMetadata } from 'src/entities/model-metadata.entity';\nimport { RoleMetadata } from 'src/entities/role-metadata.entity';\nimport { SecurityRule } from 'src/entities/security-rule.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { Brackets, DataSource, EntityManager, SelectQueryBuilder } from 'typeorm';\nimport { SolidBaseRepository } from './solid-base.repository';\n\n@Injectable()\nexport class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {\n constructor(\n readonly dataSource: DataSource,\n // readonly requestContextService: RequestContextService,\n readonly solidRegistry: SolidRegistry,\n readonly crudHelperService: CrudHelperService,\n ) {\n super(SecurityRule, dataSource, null, null);\n }\n\n async applySecurityRules<T extends CommonEntity>(qb: SelectQueryBuilder<T>, modelSingularName: string, activeUser: ActiveUserData, securityRuleAlias: string = qb.alias): Promise<SelectQueryBuilder<T>> {\n // Fetch the security rules for the model and roles\n const securityRules = this.solidRegistry.getSecurityRules(modelSingularName, activeUser.roles);\n\n // If no security rules, return the original query builder\n if (!securityRules.length) {\n return qb;\n }\n\n const evaluatedRules = [];\n\n for (const rule of securityRules) {\n\n let evaluatedRule = null;\n\n try {\n // First check if the rule has a \"dynamic\" security rule config provider. \n if (rule.securityRuleConfigProvider) {\n // TODO: Evaluation of the securityRuleConfig Provider should happen outside first...\n const securityRuleConfigProviderInstance = this.solidRegistry.getSecurityRuleConfigProviderInstance(rule.securityRuleConfigProvider);\n if (!securityRuleConfigProviderInstance) {\n throw new Error(`Unable to resolve instance for security rule config provider: ${rule.securityRuleConfigProvider}`);\n }\n evaluatedRule = await securityRuleConfigProviderInstance.securityRuleConfig(activeUser, rule);\n }\n else {\n evaluatedRule = JSON.parse(\n this.resolveSecurityRuleConfig(rule.securityRuleConfig, activeUser)\n ) as SecurityRuleConfig;\n }\n\n evaluatedRules.push(evaluatedRule);\n\n } catch (error: any) {\n this.logger.error(`Error parsing security rule: ${rule.securityRuleConfig}`, error);\n this.logger.error(error.stack);\n throw error;\n }\n }\n\n\n // Apply each security rule to the query builder. The rules are combined with OR logic at the top level.\n qb.andWhere(new Brackets(async (outerQb) => {\n for (const evaluatedRule of evaluatedRules) {\n if (evaluatedRule && evaluatedRule.filters) {\n outerQb.orWhere( // combine each rule-group with OR at the outer level\n new Brackets((innerQb) => {\n this.crudHelperService.applyFilters(innerQb, evaluatedRule.filters, securityRuleAlias, qb); // AND within a rule\n })\n );\n }\n }\n }));\n\n return qb;\n }\n\n private resolveSecurityRuleConfig(configString: string, activeUser: ActiveUserData) {\n return configString.replace('$activeUserId', activeUser.sub.toString());\n }\n\n async toDto(securityRule: SecurityRule, manager?: EntityManager): Promise<UpdateSecurityRuleDto> {\n // load the role and model relations for the security rule\n let populatedSecurityRule: SecurityRule = securityRule;\n // If the security rule does not have the role and model relations loaded, load them\n if (!securityRule.role || !securityRule.modelMetadata) {\n // When a manager is provided (e.g. from a TypeORM subscriber event),\n // use it so the query runs on the active transaction's connection\n // instead of trying to acquire a second connection from the pool.\n const repo = manager\n ? manager.getRepository(SecurityRule)\n : this;\n populatedSecurityRule = await repo.findOne({\n where: {\n id: securityRule.id,\n },\n relations: {\n role: true,\n modelMetadata: true,\n },\n }) ?? securityRule;\n }\n\n return {\n id: populatedSecurityRule.id,\n name: populatedSecurityRule.name,\n description: populatedSecurityRule.description,\n roleId: populatedSecurityRule.role.id,\n roleUserKey: populatedSecurityRule.role.name,\n modelMetadataId: populatedSecurityRule.modelMetadata.id,\n modelMetadataUserKey: populatedSecurityRule.modelMetadata.singularName,\n securityRuleConfig: populatedSecurityRule.securityRuleConfig,\n securityRuleConfigProvider: populatedSecurityRule.securityRuleConfigProvider,\n };\n }\n\n async upsertWithDto(createDto: CreateSecurityRuleDto) {\n // Populate the role from roleId or roleUserKey\n const roleRepository = this.dataSource.getRepository(RoleMetadata);\n if (createDto.roleId) {\n const role = await roleRepository.findOne({\n where: {\n id: createDto.roleId,\n },\n });\n createDto['role'] = role;\n }\n\n if (createDto.roleUserKey) {\n const role = await roleRepository.findOne({\n where: {\n name: createDto.roleUserKey,\n },\n });\n createDto['role'] = role;\n }\n\n // Populate the model from modelMetadataId or modelMetadataUserKey\n const modelMetadataRepository = this.dataSource.getRepository(ModelMetadata);\n if (createDto.modelMetadataId) {\n const modelMetadata = await modelMetadataRepository.findOne({\n where: {\n id: createDto.modelMetadataId,\n },\n });\n createDto['modelMetadata'] = modelMetadata;\n }\n if (createDto.modelMetadataUserKey) {\n const modelMetadata = await modelMetadataRepository.findOne({\n where: {\n singularName: createDto.modelMetadataUserKey,\n },\n });\n createDto['modelMetadata'] = modelMetadata;\n }\n\n // First check if module already exists using name\n const existingSecurityRule = await this.findOne({\n where: {\n name: createDto.name,\n },\n });\n\n if (existingSecurityRule) {\n const updatedSecurityRule = this.merge(existingSecurityRule, createDto);\n return this.save(updatedSecurityRule);\n }\n else {\n const securityRule = this.create(createDto);\n return this.save(securityRule);\n }\n }\n\n}"]}
@@ -8,6 +8,7 @@ import { UserService } from '../services/user.service';
8
8
  import { DataSource } from 'typeorm';
9
9
  import { SolidRegistry } from '../helpers/solid-registry';
10
10
  import { ActionMetadataService } from '../services/action-metadata.service';
11
+ import { ApiKeyService } from '../services/api-key.service';
11
12
  import { FieldMetadataService } from '../services/field-metadata.service';
12
13
  import { MediaStorageProviderMetadataService } from '../services/media-storage-provider-metadata.service';
13
14
  import { ModelMetadataService } from '../services/model-metadata.service';
@@ -19,7 +20,9 @@ import { PermissionMetadataRepository } from '../repository/permission-metadata.
19
20
  import { SavedFiltersRepository } from '../repository/saved-filters.repository';
20
21
  import { ScheduledJobRepository } from '../repository/scheduled-job.repository';
21
22
  import { SettingRepository } from '../repository/setting.repository';
23
+ import { UserApiKeyRepository } from '../repository/user-api-key.repository';
22
24
  import { ModelSequenceRepository } from '../repository/model-sequence.repository';
25
+ import { LocaleRepository } from '../repository/locale.repository';
23
26
  export declare class ModuleMetadataSeederService {
24
27
  private readonly moduleMetadataService;
25
28
  private readonly modelMetadataService;
@@ -28,11 +31,13 @@ export declare class ModuleMetadataSeederService {
28
31
  private readonly roleService;
29
32
  private readonly userService;
30
33
  private readonly authenticationService;
34
+ private readonly apiKeyService;
31
35
  private readonly solidActionService;
32
36
  private readonly solidViewService;
33
37
  private readonly emailTemplateService;
34
38
  private readonly smsTemplateService;
35
39
  private readonly listOfValuesService;
40
+ private readonly userApiKeyRepository;
36
41
  private readonly permissionRepo;
37
42
  private readonly solidRegistry;
38
43
  private readonly settingService;
@@ -43,13 +48,31 @@ export declare class ModuleMetadataSeederService {
43
48
  readonly savedFiltersRepo: SavedFiltersRepository;
44
49
  readonly dataSource: DataSource;
45
50
  readonly modelSequenceRepo: ModelSequenceRepository;
51
+ readonly localeRepo: LocaleRepository;
46
52
  private readonly logger;
53
+ private readonly seedTimingTag;
54
+ private readonly permissionSeedBatchSize;
55
+ private readonly viewComparableFields;
56
+ private readonly actionComparableFields;
57
+ private readonly moduleLookupCache;
58
+ private readonly modelLookupCache;
59
+ private readonly viewLookupCache;
60
+ private readonly mediaStorageProviderLookupCache;
47
61
  private enablePruning;
48
- constructor(moduleMetadataService: ModuleMetadataService, modelMetadataService: ModelMetadataService, fieldMetadataService: FieldMetadataService, mediaStorageProviderMetadataService: MediaStorageProviderMetadataService, roleService: RoleMetadataService, userService: UserService, authenticationService: AuthenticationService, solidActionService: ActionMetadataService, solidViewService: ViewMetadataService, emailTemplateService: EmailTemplateService, smsTemplateService: SmsTemplateService, listOfValuesService: ListOfValuesService, permissionRepo: PermissionMetadataRepository, solidRegistry: SolidRegistry, settingService: SettingService, settingsRepo: SettingRepository, securityRuleRepo: SecurityRuleRepository, systemFieldsSeederService: SystemFieldsSeederService, scheduledJobRepository: ScheduledJobRepository, savedFiltersRepo: SavedFiltersRepository, dataSource: DataSource, modelSequenceRepo: ModelSequenceRepository);
62
+ constructor(moduleMetadataService: ModuleMetadataService, modelMetadataService: ModelMetadataService, fieldMetadataService: FieldMetadataService, mediaStorageProviderMetadataService: MediaStorageProviderMetadataService, roleService: RoleMetadataService, userService: UserService, authenticationService: AuthenticationService, apiKeyService: ApiKeyService, solidActionService: ActionMetadataService, solidViewService: ViewMetadataService, emailTemplateService: EmailTemplateService, smsTemplateService: SmsTemplateService, listOfValuesService: ListOfValuesService, userApiKeyRepository: UserApiKeyRepository, permissionRepo: PermissionMetadataRepository, solidRegistry: SolidRegistry, settingService: SettingService, settingsRepo: SettingRepository, securityRuleRepo: SecurityRuleRepository, systemFieldsSeederService: SystemFieldsSeederService, scheduledJobRepository: ScheduledJobRepository, savedFiltersRepo: SavedFiltersRepository, dataSource: DataSource, modelSequenceRepo: ModelSequenceRepository, localeRepo: LocaleRepository);
49
63
  seed(conf?: any): Promise<void>;
64
+ private buildTimingPrefix;
65
+ private formatDuration;
66
+ private resetLookupCaches;
67
+ private getModuleByUserKeyCached;
68
+ private getModelByUserKeyCached;
69
+ private getViewByUserKeyCached;
70
+ private getMediaStorageProviderByUserKeyCached;
71
+ private timeOperation;
50
72
  private seedScheduledJobs;
51
73
  private seedSavedFilters;
52
74
  private seedListOfValues;
75
+ private seedLocales;
53
76
  private setupDefaultRolesWithPermissions;
54
77
  private seedSecurityRules;
55
78
  private seedDefaultSettings;
@@ -65,8 +88,10 @@ export declare class ModuleMetadataSeederService {
65
88
  private seedGlobalMetadata;
66
89
  private seedDefaultSystemFields;
67
90
  private seedControllerPermissions;
68
- private createPermissionIfNotExists;
69
91
  private handleSeedPermissions;
92
+ private seedPermissionsInBatches;
93
+ private getUniquePermissionNames;
94
+ private normalizePermissionName;
70
95
  private seedMediaStorageProviders;
71
96
  private seedModelSequences;
72
97
  private handleSeedEmailTemplates;
@@ -75,12 +100,28 @@ export declare class ModuleMetadataSeederService {
75
100
  private handleSeedActions;
76
101
  private handleSeedViews;
77
102
  private handleSeedUsers;
103
+ private ensureSystemAdminApiKey;
104
+ private writeSolidxAdminApiKeyConfig;
78
105
  private seedModuleModelFields;
79
106
  private getSeedArray;
107
+ private loadExistingFieldsByName;
108
+ private primeModuleLookupCache;
109
+ private primeModelLookupCache;
110
+ private primeViewLookupCache;
111
+ private loadExistingViewsByName;
112
+ private loadExistingActionsByName;
113
+ private normalizeJsonFieldValue;
114
+ private getCanonicalJsonFieldString;
115
+ private hasViewMetadataChanges;
116
+ private hasActionMetadataChanges;
117
+ private upsertViewMetadataWithPreloadedExisting;
118
+ private upsertActionMetadataWithPreloadedExisting;
119
+ private upsertFieldMetadataWithPreloadedExisting;
80
120
  private handleSeedSecurityRules;
81
121
  private handleSeedListOfValues;
82
122
  private handleSeedScheduledJobs;
83
123
  private handleSeedSavedFilters;
124
+ private handleSeedLocales;
84
125
  private validateSavedFilterQueryJsonWrapper;
85
126
  private handleSeedModelSequences;
86
127
  private pruneModelSequences;
@@ -1 +1 @@
1
- {"version":3,"file":"module-metadata-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/module-metadata-seeder.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-metadata-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/module-metadata-seeder.service.ts"],"names":[],"mappings":"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"}