@solidxai/core 0.1.13-beta.12 → 0.1.13-beta.14

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 (115) hide show
  1. package/.claude/settings.local.json +16 -0
  2. package/CHANGELOG.md +1143 -0
  3. package/CLAUDE.md +26 -0
  4. package/README.md +19 -0
  5. package/dist/constants/media-file-types.d.ts +1 -0
  6. package/dist/constants/media-file-types.d.ts.map +1 -1
  7. package/dist/constants/media-file-types.js +2 -1
  8. package/dist/constants/media-file-types.js.map +1 -1
  9. package/dist/controllers/field-metadata.controller.d.ts +2 -2
  10. package/dist/dtos/create-field-metadata.dto.d.ts +2 -6
  11. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  12. package/dist/dtos/create-field-metadata.dto.js +4 -10
  13. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  14. package/dist/dtos/create-model-sequence.dto.d.ts +1 -1
  15. package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -1
  16. package/dist/dtos/create-model-sequence.dto.js +1 -1
  17. package/dist/dtos/create-model-sequence.dto.js.map +1 -1
  18. package/dist/helpers/bootstrap.helper.d.ts +2 -1
  19. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  20. package/dist/helpers/bootstrap.helper.js +2 -2
  21. package/dist/helpers/bootstrap.helper.js.map +1 -1
  22. package/dist/helpers/security.helper.d.ts +5 -1
  23. package/dist/helpers/security.helper.d.ts.map +1 -1
  24. package/dist/helpers/security.helper.js +15 -4
  25. package/dist/helpers/security.helper.js.map +1 -1
  26. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  27. package/dist/seeders/module-metadata-seeder.service.js +7 -3
  28. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  29. package/dist/seeders/seed-data/solid-core-metadata.json +1 -1
  30. package/dist/services/chatter-message.service.d.ts +4 -1
  31. package/dist/services/chatter-message.service.d.ts.map +1 -1
  32. package/dist/services/chatter-message.service.js +4 -1
  33. package/dist/services/chatter-message.service.js.map +1 -1
  34. package/dist/services/crud-helper.service.d.ts +1 -2
  35. package/dist/services/crud-helper.service.d.ts.map +1 -1
  36. package/dist/services/crud-helper.service.js +2 -16
  37. package/dist/services/crud-helper.service.js.map +1 -1
  38. package/dist/services/crud.service.d.ts.map +1 -1
  39. package/dist/services/crud.service.js +1 -1
  40. package/dist/services/crud.service.js.map +1 -1
  41. package/dist/services/draft-publish-helper.service.d.ts +1 -0
  42. package/dist/services/draft-publish-helper.service.d.ts.map +1 -1
  43. package/dist/services/draft-publish-helper.service.js +38 -4
  44. package/dist/services/draft-publish-helper.service.js.map +1 -1
  45. package/dist/services/field-metadata.service.d.ts +2 -2
  46. package/dist/services/field-metadata.service.d.ts.map +1 -1
  47. package/dist/services/field-metadata.service.js +2 -1
  48. package/dist/services/field-metadata.service.js.map +1 -1
  49. package/dist/services/settings/default-settings-provider.service.d.ts +62 -6
  50. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  51. package/dist/services/settings/default-settings-provider.service.js +34 -3
  52. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  53. package/dist/theme/theme-registry.d.ts +14 -0
  54. package/dist/theme/theme-registry.d.ts.map +1 -0
  55. package/dist/theme/theme-registry.js +147 -0
  56. package/dist/theme/theme-registry.js.map +1 -0
  57. package/package.json +1 -1
  58. package/src/constants/media-file-types.ts +2 -0
  59. package/src/dtos/create-field-metadata.dto.ts +4 -9
  60. package/src/dtos/create-model-sequence.dto.ts +1 -1
  61. package/src/helpers/bootstrap.helper.ts +17 -3
  62. package/src/helpers/security.helper.ts +35 -8
  63. package/src/seeders/module-metadata-seeder.service.ts +11 -3
  64. package/src/seeders/seed-data/solid-core-metadata.json +1 -1
  65. package/src/services/1.js +6 -0
  66. package/src/services/chatter-message.service.ts +22 -1
  67. package/src/services/crud-helper.service.ts +19 -16
  68. package/src/services/crud.service.ts +2 -1
  69. package/src/services/draft-publish-helper.service.ts +56 -4
  70. package/src/services/field-metadata.service.ts +3 -2
  71. package/src/services/settings/default-settings-provider.service.ts +34 -3
  72. package/src/theme/theme-registry.ts +181 -0
  73. package/dist-tests/api/authenticate.spec.js +0 -119
  74. package/dist-tests/api/authenticate.spec.js.map +0 -1
  75. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  76. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  77. package/dist-tests/api/ping.spec.js +0 -21
  78. package/dist-tests/api/ping.spec.js.map +0 -1
  79. package/dist-tests/helpers/auth.js +0 -41
  80. package/dist-tests/helpers/auth.js.map +0 -1
  81. package/dist-tests/helpers/env.js +0 -11
  82. package/dist-tests/helpers/env.js.map +0 -1
  83. package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +0 -136
  84. package/docs/agent-builder/team-ready-note-agent-builder.md +0 -305
  85. package/docs/agent-hub-grooming.md +0 -301
  86. package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
  87. package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
  88. package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
  89. package/docs/datasource-introspection-ddl-analysis.md +0 -326
  90. package/docs/datasource-introspection-implementation-plan.md +0 -306
  91. package/docs/grouping-enhancements.md +0 -89
  92. package/docs/java-spring/README.md +0 -3
  93. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  94. package/docs/module-package-import-handoff.md +0 -691
  95. package/docs/seed-changes.md +0 -65
  96. package/docs/test-data-workflow.md +0 -200
  97. package/docs/type-declaration-import-issue.md +0 -24
  98. package/docs/workflow/business-automation-example-notes.md +0 -309
  99. package/docs/workflow/control-flow-node-addition-sop.md +0 -324
  100. package/docs/workflow/data-engineering-pipeline-example-notes.md +0 -330
  101. package/docs/workflow/foreach-example-notes.md +0 -187
  102. package/docs/workflow/hello-world-example-notes.md +0 -271
  103. package/docs/workflow/kestra-concepts-plugins-blueprints.md +0 -315
  104. package/docs/workflow/loop-until-example-notes.md +0 -198
  105. package/docs/workflow/microservices-and-apis-example-notes.md +0 -264
  106. package/docs/workflow/samples.md +0 -25
  107. package/docs/workflow/what-is-kestra.md +0 -79
  108. package/docs/workflow/workflow-core-module-handoff-summary.md +0 -191
  109. package/docs/workflow/workflow-module-brd.md +0 -185
  110. package/docs/workflow/workflow-module-domain-model.md +0 -252
  111. package/docs/workflow/workflow-module-metadata-dsl.md +0 -302
  112. package/docs/workflow/workflow-module-technical-spec.md +0 -293
  113. package/docs/workflow/workflow-node-type-contracts.md +0 -635
  114. package/docs/workflow/workflow-node-ui-metadata-contract.md +0 -1262
  115. package/docs/workflow/workflow-solidx-model-field-spec.md +0 -284
@@ -1 +1 @@
1
- {"version":3,"file":"field-metadata.service.js","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { classify } from '../helpers/string.helper';\nimport { Injectable, Logger, NotFoundException, OnApplicationBootstrap } from '@nestjs/common';\nimport { InjectDataSource } from '@nestjs/typeorm';\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { ComputedFieldMetadata, SolidRegistry } from 'src/helpers/solid-registry';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { DataSource, Repository, SelectQueryBuilder } from 'typeorm';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { CascadeType, ComputedFieldValueType, CreateFieldMetadataDto, DecryptWhenType, EncryptionType, MediaType, MSSQLType, PSQLType, RelationType, SelectionValueType, SolidFieldType } from '../dtos/create-field-metadata.dto';\nimport { SelectionDynamicQueryDto } from '../dtos/selection-dynamic-query.dto';\nimport { UpdateFieldMetaDataDto } from '../dtos/update-field-metadata.dto';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { ModelMetadata } from '../entities/model-metadata.entity';\nimport { ISelectionProviderValues, MediaStorageProvider } from '../interfaces';\nimport { CrudHelperService } from './crud-helper.service';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport qs from 'qs';\nimport { ResolveS3UrlDto } from 'src/dtos/resolve-s3-url.dto';\nimport { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';\nimport { S3FileService } from './file';\nimport { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';\n\n@Injectable()\nexport class FieldMetadataService implements OnApplicationBootstrap {\n constructor(\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n private readonly fileService: S3FileService,\n private readonly mediaStorageProviderMetadataRepository: MediaStorageProviderMetadataRepository,\n\n @InjectDataSource()\n private readonly dataSource: DataSource,\n private readonly solidRegistry: SolidRegistry,\n private readonly crudHelperService: CrudHelperService,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n ) { }\n\n private logger = new Logger(FieldMetadataService.name);\n\n onApplicationBootstrap() {\n this.loadAndRegisterComputedFieldsDetails();\n }\n\n async loadAndRegisterComputedFieldsDetails() {\n // Load all the modules and models and within that load all the computed fields\n const computedFieldsWithModelAndModule = await this.fieldMetadataRepo.findComputedFieldsPopulatedWithModelAndModule();\n\n // Convert the computed fields object above to the ComputedFieldMetadata type\n const computedFieldMetadata: ComputedFieldMetadata[] = computedFieldsWithModelAndModule.map((field) => {\n // const defaultComputedFieldTriggerConfig: ComputedFieldTriggerConfig = {\n // moduleName: field.model.module.name,\n // modelName: field.model.singularName,\n // operations: [ComputedFieldTriggerOperation.create, ComputedFieldTriggerOperation.update, ComputedFieldTriggerOperation.delete], // Default operations, can be overridden\n // }\n return {\n moduleName: field.model.module.name,\n modelName: field.model.singularName,\n fieldName: field.name,\n computedFieldValueType: field.computedFieldValueType as ComputedFieldValueType,\n computedFieldTriggerConfig: field.computedFieldTriggerConfig ?? [], // Ensure it's an array, default to empty if not provided\n computedFieldValueProviderName: field.computedFieldValueProvider,\n computedFieldValueProviderCtxt: field.computedFieldValueProviderCtxt ? JSON.parse(field.computedFieldValueProviderCtxt) : {}, // Parse the context if it exists, default to empty object\n eventContext: {}\n };\n });\n\n // Register the computed fields in the SolidRegistry. Capture only computed field related info\n this.solidRegistry.registerComputedFieldMetadata(computedFieldMetadata);\n }\n\n async updateInverseField(field: FieldMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>) {\n if (!field.model || !field.model.module) {\n throw new Error(ERROR_MESSAGES.MODEL_AND_MODULE_REQUIRED_TO_UPDATE_INVERSE_FIELD);\n }\n // Update the inverse field in the db\n const savedInverseField = await this.updateInverseFieldInDb(field, fieldRepository, modelRepository);\n // Update the inverse field in the file\n this.updateRelationInverseFieldInFile(savedInverseField, field.relationCoModelSingularName, field.model.module.name);\n }\n\n private async updateInverseFieldInDb(field: FieldMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>): Promise<FieldMetadata> {\n const { moduleName, modelName } = this.validateForInverseField(field);\n\n // Get the relation model reference\n const relationModel = await this.getRelationModel(modelRepository, field, moduleName);\n\n // const {id, createdAt, updatedAt, deletedAt, ...fieldKeys} = field;\n switch (field.relationType) {\n case RelationType.manyToOne: {\n const fieldName = field.relationCoModelFieldName || `${modelName}s`;\n const inverseField: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.oneToMany,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: field.relationCascade,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n id: null,\n }\n\n // Load the inverse field, \n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseField);\n return savedField;\n }\n case RelationType.oneToMany: {\n const fieldName = field.relationCoModelFieldName || `${modelName}`;\n const inverseField: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.manyToOne,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: field.relationCascade,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n id: null,\n }\n\n // Load the inverse field, \n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseField);\n return savedField;\n }\n case RelationType.manyTomany: {\n const fieldName = field.relationCoModelFieldName;\n // Logic to create a manyToMany inverse field definition\n const inverseFieldManyToMany: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.manyTomany,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: null,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n isRelationManyToManyOwner: false,\n id: null,\n }\n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseFieldManyToMany);\n return savedField;\n }\n default:\n throw new Error(`Invalid relation type for field ${field.name} with relation type ${field.relationType}`);\n }\n }\n\n private async getRelationModel(modelRepository: Repository<ModelMetadata>, field: FieldMetadata, moduleName: string) {\n return await modelRepository.findOne({\n where: {\n singularName: field.relationCoModelSingularName,\n module: {\n name: field.relationModelModuleName ?? moduleName\n }\n }\n });\n }\n\n private async saveInverseField(fieldRepository: Repository<FieldMetadata>, relationModel: ModelMetadata, inverseField: FieldMetadata): Promise<FieldMetadata> {\n const existingInverseField = await fieldRepository.findOne({\n where: {\n model: { id: relationModel.id },\n name: inverseField.name\n }\n });\n\n if (existingInverseField) {\n return existingInverseField; // No need to update if it already exists\n }\n else {\n const savedField = await fieldRepository.save(fieldRepository.create(inverseField));\n return savedField;\n }\n }\n\n private validateForInverseField(field: FieldMetadata) {\n if (field.type !== SolidFieldType.relation) {\n throw new Error(ERROR_MESSAGES.INVALID_INVERSE_FIELD_TYPE);\n }\n const modelName = field.model.singularName;\n const moduleName = field.model.module.name;\n\n if (!modelName || !moduleName) {\n throw new Error(ERROR_MESSAGES.MODEL_NAME_AND_MODULE_NAME_REQUIRED_TO_CREATE_INVERSE_FIELD);\n }\n return { moduleName, modelName };\n }\n\n async find(basicFilterDto: BasicFilterDto) {\n return this.findMany(basicFilterDto);\n }\n\n async findMany(basicFilterDto: BasicFilterDto) {\n const alias = 'fieldMetadata';\n // Extract the required keys from the input query\n let { limit, offset, populateMedia } = basicFilterDto;\n\n // Create above query on pincode table using query builder\n var qb: SelectQueryBuilder<FieldMetadata> = await this.fieldMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)\n qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);\n\n // Get the records and the count\n const [entities, count] = await qb.getManyAndCount();\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n const r = {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n return r\n }\n\n async findOne(id: any, query?: any) {\n // const { fields, filters, populate } = basicFilterDto;\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: id,\n },\n relations: query && query?.populate,\n });\n if (!entity) {\n throw new NotFoundException(`entity #${id} not found`);\n }\n return entity;\n }\n\n async findByNameAndModelName(modelSingularName: string, fieldName: string) {\n\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n name: fieldName,\n model: {\n singularName: modelSingularName\n }\n },\n });\n\n return entity;\n }\n\n async selectionStaticValues(modelSingularName: string, fieldName: string) {\n\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n name: fieldName,\n model: {\n singularName: modelSingularName\n }\n },\n });\n\n if (!entity) {\n return [];\n }\n\n const selectionStaticValues = entity.selectionStaticValues;\n if (!selectionStaticValues) {\n return [];\n }\n\n return this.convertToSelectionProviderValues(selectionStaticValues);\n }\n\n convertToSelectionProviderValues(selectionStaticValues: string[]): ISelectionProviderValues[] {\n // return selectionStaticValues.split(',').map((item) => {\n // const [value, label] = item.split(':');\n // return { label, value };\n // });\n return selectionStaticValues.map((item) => {\n const [value, label] = item.split(':');\n return { label, value };\n });\n }\n\n async create(createDto: CreateFieldMetadataDto) {\n createDto['model'] = await this.dataSource.getRepository(ModelMetadata).findOne({\n where: {\n id: createDto['modelId']\n },\n });\n createDto['mediaStorageProvider'] = await this.dataSource.getRepository(ModelMetadata).findOne({\n where: {\n id: createDto['mediaStorageProviderId']\n },\n });\n\n const moduleMetadata = this.fieldMetadataRepo.create(createDto);\n return this.fieldMetadataRepo.save(moduleMetadata);\n }\n\n // async update(id: number, updateCountryDto: UpdateCountryDto) {\n\n // const country = await this.fieldMetadataRepo.preload({\n // id,\n // ...updateCountryDto,\n // });\n\n // if (!country) {\n // throw new NotFoundException(`Country ${id} not found`);\n // }\n // return this.moduleMetadataRepo.save(country);\n // }\n\n async delete(id: number) {\n const entity = await this.findOne(id);\n return this.fieldMetadataRepo.remove(entity);\n }\n\n async findFieldDefaultMetaData() {\n\n // Function to convert enum to array of objects\n const enumToResponseArray = (enumObj: any) => {\n return Object.entries(enumObj).map(([key, value]) => ({\n label: value,\n value: value,\n }));\n };\n\n // Orm Data type and Solid Dat Type Mapping\n const ormFieldTypeForSolid = this.getOrmFieldTypes();\n\n // Fetch Data Source Type \n const dataSourceTypes = Object.keys(ormFieldTypeForSolid); // [\"psql\"]\n\n const fieldTypes = Object.entries(ormFieldTypeForSolid.postgres).map(([key, value]) => ({\n type: key,\n label: key,\n value: key,\n fieldType: key,\n ormTypes: value.ormTypes,\n fields: this.fetchCurrentFields(key)\n }));\n\n const dataSource = this.solidRegistry.getSolidDatabaseModules().map((solidDatabaseModule) => {\n return {\n 'name': solidDatabaseModule.instance.name(),\n 'type': solidDatabaseModule.instance.type()\n }\n });\n\n // Creating response arrays for each enum\n // Get all selection providers. \n const sps = [];\n const selectionProviders = this.solidRegistry.getSelectionProviders();\n for (let i = 0; i < selectionProviders.length; i++) {\n const selectionProvider = selectionProviders[i];\n sps.push({\n provider: selectionProvider.instance.name(),\n help: selectionProvider.instance.help(),\n });\n }\n\n const cps = [];\n const computedProviders = this.solidRegistry.getComputedFieldProviders();\n for (let i = 0; i < computedProviders.length; i++) {\n const computedProvider = computedProviders[i];\n cps.push({\n provider: computedProvider.instance.name(),\n help: computedProvider.instance.help(),\n });\n }\n\n const r = {\n // Field Types with ormtypes, available fields \n fieldTypes: fieldTypes,\n encryptionTypes: enumToResponseArray(EncryptionType),\n ormType: ormFieldTypeForSolid,\n decryptWhenTypes: enumToResponseArray(DecryptWhenType),\n mediaTypes: enumToResponseArray(MediaType),\n relationTypes: enumToResponseArray(RelationType),\n selectionDynamicProviders: sps,\n computedProviders: cps,\n cascadeTypes: enumToResponseArray(CascadeType),\n selectionValueTypes: enumToResponseArray(SelectionValueType),\n computedFieldValueTypes: enumToResponseArray(ComputedFieldValueType),\n dataSourceType: dataSourceTypes,\n dataSource: dataSource,\n };\n\n return r\n }\n\n private getOrmFieldTypes() {\n return {\n \"postgres\": {\n // Numeric types\n \"int\": {\n \"ormTypes\": [{ label: PSQLType.integer, description: \"A 4-byte integer for general numeric data.\" }]\n },\n \"bigint\": {\n \"ormTypes\": [{ label: PSQLType.bigint, description: \"An 8-byte integer for large numeric values.\" }]\n },\n \"decimal\": {\n \"ormTypes\": [{ label: PSQLType.decimal, description: \"A high-precision numeric type, ideal for financial data.\" }]\n },\n\n // Text types\n \"shortText\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"A variable-length string for short text.\" }]\n },\n \"longText\": {\n \"ormTypes\": [{ label: PSQLType.text, description: \"A text type for large or unbounded strings.\" }]\n },\n \"richText\": {\n \"ormTypes\": [{ label: PSQLType.text, description: \"A text type for large or formatted content.\" }]\n },\n \"json\": {\n \"ormTypes\": [\n // { label: PSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: MSSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: PSQLType.json, description: \"Stores JSON data without indexing.\" },\n { label: PSQLType.jsonb, description: \"Stores JSON data with indexing for faster queries.\" }\n ]\n },\n\n // Boolean types\n \"boolean\": {\n \"ormTypes\": [{ label: PSQLType.boolean, description: \"Stores true or false values.\" }]\n },\n\n // Date and time types\n \"date\": {\n \"ormTypes\": [{ label: PSQLType.date, description: \"Stores calendar dates (YYYY-MM-DD).\" }]\n },\n \"datetime\": {\n \"ormTypes\": [\n { label: PSQLType.timestamp, description: \"Stores date and time without time zones.\" },\n { label: PSQLType.timestamptz, description: \"Stores date and time with time zones.\" }\n ]\n },\n \"time\": {\n \"ormTypes\": [\n { label: PSQLType.time, description: \"Stores time values (HH:MM:SS).\" },\n { label: PSQLType.timestamp, description: \"Stores date and time without time zones.\" },\n { label: PSQLType.timestamptz, description: \"Stores date and time with time zones.\" }\n ]\n },\n\n // Relation\n \"relation\": {\n \"ormTypes\": [{ label: PSQLType.integer, description: \"Used for foreign keys referencing other entities.\" }]\n },\n\n // Media types\n \"mediaSingle\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores file paths or URLs for single media files.\" }]\n },\n \"mediaMultiple\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores file paths or URLs for multiple media files.\" }]\n },\n\n // Email and password\n \"email\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores email addresses.\" }]\n },\n \"password\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores hashed or plain-text passwords.\" }]\n },\n\n // Selection types\n \"selectionStatic\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Used for predefined selection options.\" }]\n },\n \"selectionDynamic\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Used for dynamic selection options.\" }]\n },\n\n // Computed and external ID\n \"computed\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Represents computed or derived fields.\" }]\n },\n \"uuid\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores universally unique identifiers (UUIDs).\" }]\n }\n },\n \"mssql\": {\n // Numeric types\n \"int\": {\n ormTypes: [\n { label: MSSQLType.int, description: \"A 4-byte integer for general numeric data.\" }\n ]\n },\n \"bigint\": {\n ormTypes: [\n { label: MSSQLType.bigint, description: \"An 8-byte integer for large numeric values.\" }\n ]\n },\n \"decimal\": {\n ormTypes: [\n { label: MSSQLType.numeric, description: \"A high-precision numeric type for financial or exact values.\" },\n { label: MSSQLType.decimal, description: \"A high-precision decimal type for financial or exact values.\" }\n ]\n },\n\n // Text types\n \"shortText\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"A variable-length string for short text.\" },\n { label: MSSQLType.nvarchar, description: \"A unicode supported variable-length string for short text.\" }\n ]\n },\n \"longText\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"A large or unbounded string type.\" }\n ]\n },\n \"richText\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"A large text field for formatted or long content.\" }\n ]\n },\n \"json\": {\n ormTypes: [\n { label: MSSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: MSSQLType.nvarchar, description: \"Stores JSON data as string (MSSQL doesn't have native JSON type).\" }\n ]\n },\n\n // Boolean types\n \"boolean\": {\n ormTypes: [\n { label: MSSQLType.bit, description: \"Stores true or false values as 0 or 1.\" }\n ]\n },\n\n // Date and time types\n \"date\": {\n ormTypes: [\n { label: MSSQLType.date, description: \"Stores calendar dates (YYYY-MM-DD).\" }\n ]\n },\n \"datetime\": {\n ormTypes: [\n { label: MSSQLType.datetime, description: \"Stores date and time without timezone.\" },\n { label: MSSQLType.datetime2, description: \"High-precision date and time type.\" }\n ]\n },\n \"time\": {\n ormTypes: [\n { label: MSSQLType.time, description: \"Stores time values (HH:MM:SS).\" }\n ]\n },\n\n // Relation\n \"relation\": {\n ormTypes: [\n { label: MSSQLType.int, description: \"Used for foreign keys referencing other entities.\" }\n ]\n },\n\n // Media types\n \"mediaSingle\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"Stores file paths or URLs for single media files.\" }\n ]\n },\n \"mediaMultiple\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"Stores file paths or URLs for multiple media files.\" }\n ]\n },\n\n // Email and password\n \"email\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Stores email addresses.\" }\n ]\n },\n \"password\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Stores hashed or plain-text passwords.\" }\n ]\n },\n\n // Selection types\n \"selectionStatic\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Used for predefined selection options.\" }\n ]\n },\n \"selectionDynamic\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Used for dynamic selection options.\" }\n ]\n },\n\n // Computed and external ID\n \"computed\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Represents computed or derived fields.\" }\n ]\n },\n \"uuid\": {\n ormTypes: [\n { label: MSSQLType.uniqueidentifier, description: \"Stores universally unique identifiers (UUIDs).\" }\n ]\n }\n }\n };\n }\n\n async fetchCurrentFieldsBasedOnType(type: string) {\n return this.fetchCurrentFields(type);\n }\n\n private fetchCurrentFields(solidFieldType: string) {\n switch (solidFieldType) {\n case SolidFieldType.int:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.bigint:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n // case SolidFieldType.float:\n // return [\n // \"name\",\n // \"displayName\",\n // \"description\",\n // \"type\",\n // \"ormType\",\n // \"isSystem\",\n // \"defaultValue\",\n // \"required\",\n // \"unique\",\n // \"index\",\n // \"private\",\n // \"encrypt\",\n // \"encryptionType\",\n // \"decryptWhen\"\n // ];\n\n case SolidFieldType.decimal:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.shortText:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.longtext:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.richText:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n // \"min\",\n // \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.json:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n // \"min\",\n // \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.boolean:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n // \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.date:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.datetime:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.time:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.relation:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"relationType\",\n \"relationCoModelFieldName\",\n \"relationCreateInverse\",\n \"relationCoModelSingularName\",\n \"relationCoModelColumnName\",\n \"relationModelModuleName\",\n \"relationCascade\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"relationJoinTableName\",\n \"isRelationManyToManyOwner\",\n \"relationFieldFixedFilter\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.mediaSingle:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"mediaTypes\",\n \"mediaMaxSizeKb\",\n \"mediaStorageProviderId\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.mediaMultiple:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"mediaTypes\",\n \"mediaMaxSizeKb\",\n \"mediaStorageProviderId\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.email:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.password:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"min\",\n \"max\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.selectionStatic:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"selectionStaticValues\",\n \"selectionValueType\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isMultiSelect\"\n ];\n\n case SolidFieldType.selectionDynamic:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"selectionDynamicProvider\",\n \"selectionDynamicProviderCtxt\",\n \"selectionValueType\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\",\n \"isMultiSelect\"\n ];\n case SolidFieldType.computed:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"computedFieldValueType\",\n \"computedFieldTriggerConfig\",\n \"computedFieldValueProvider\",\n \"computedFieldValueProviderCtxt\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.uuid:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"uuid\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n default:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n }\n }\n\n async fetchAllDataSources() {\n // Initialize the data source\n // await AppDataSource.initialize();\n\n // // Get all entities metadata\n // const entities = AppDataSource.entityMetadatas;\n\n // // Create an array to hold the data sources\n // const dataSources = entities.map(entity => ({\n // name: entity.name,\n // tableName: entity.tableName,\n // columns: entity.columns.map(column => ({\n // propertyName: column.propertyName,\n // databaseName: column.databaseName,\n // type: column.type,\n // })),\n // }));\n\n // return dataSources;\n }\n\n async upsert(updateDto: UpdateFieldMetaDataDto) {\n // First check if module already exists using name\n const existingFieldMetadata = await this.fieldMetadataRepo.findOne({\n where: {\n //@ts-ignore\n model: { id: updateDto.model.id },\n name: updateDto.name\n }\n })\n\n // if found\n if (existingFieldMetadata) {\n const hasChanges = Object.entries(updateDto).some(([key, value]) => {\n if (key === 'model') {\n return existingFieldMetadata.model?.id !== value?.id;\n }\n if (key === 'mediaStorageProvider') {\n return existingFieldMetadata.mediaStorageProvider?.id !== value?.id;\n }\n const currentValue = existingFieldMetadata[key];\n if (Array.isArray(currentValue) || Array.isArray(value)) {\n return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);\n }\n if (value && typeof value === 'object') {\n return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);\n }\n return currentValue !== value;\n });\n\n if (!hasChanges) {\n return existingFieldMetadata;\n }\n\n const updatedFieldMetadata = { ...existingFieldMetadata, ...updateDto };\n return this.fieldMetadataRepo.save(updatedFieldMetadata);\n }\n // if not found - create new \n else {\n const fieldMetadata = this.fieldMetadataRepo.create(updateDto);\n return this.fieldMetadataRepo.save(fieldMetadata);\n }\n }\n\n async getSelectionDynamicValues(query: SelectionDynamicQueryDto) {\n // 1. use the id to identify the field. \n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: query.fieldId,\n },\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));\n }\n\n // 2. use the field metadata to identify the provider. \n const selectionDynamicProvider = entity.selectionDynamicProvider;\n const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');\n selectionDynamicProviderCtxt['limit'] = query.limit;\n selectionDynamicProviderCtxt['offset'] = query.offset;\n const formValues = query.formValues || {};\n // Parse the form values if they are in string format using qs\n const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;\n selectionDynamicProviderCtxt['formValues'] = parsedFormValues;\n\n // 3. get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);\n if (!selectionProviderInstance) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));\n }\n\n // 4. use the provider to fetch the dynamic values, pass the query string received from the UI.. \n return selectionProviderInstance.values(query.query, selectionDynamicProviderCtxt);\n }\n\n async getSelectionDynamicValue(query: SelectionDynamicQueryDto) {\n // 1. use the id to identify the field. \n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: query.fieldId,\n },\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));\n }\n\n // 2. use the field metadata to identify the provider. \n const selectionDynamicProvider = entity.selectionDynamicProvider;\n const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');\n selectionDynamicProviderCtxt['limit'] = query.limit;\n selectionDynamicProviderCtxt['offset'] = query.offset;\n const formValues = query.formValues || {};\n // Parse the form values if they are in string format using qs\n const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;\n selectionDynamicProviderCtxt['formValues'] = parsedFormValues;\n\n // 3. get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);\n if (!selectionProviderInstance) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));\n }\n\n // 4. use the provider to fetch the dynamic values, pass the query string received from the UI.. \n return selectionProviderInstance.value(query.optionValue, selectionDynamicProviderCtxt);\n }\n\n private async updateRelationInverseFieldInFile(savedInverseField: FieldMetadata, inverseModelName: string, moduleName: string) {\n try {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n // Create the config object for the inverse field\n const fieldObject: Record<string, any> = await this.createFieldConfig(savedInverseField);\n\n // Find the field config object in the json file\n const model = metaData.moduleMetadata.models.find((model: any) => model.singularName === inverseModelName);\n\n // Replace the current field object with the above field object\n const fieldIndex = model.fields.findIndex((field: any) => field.name === savedInverseField.name);\n if (fieldIndex === -1) {\n model.fields.push(fieldObject);\n }\n else {\n model.fields[fieldIndex] = fieldObject;\n }\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n } catch (error: any) {\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n //Moved existing reusable logic to a separate function\n async createFieldConfig(field: FieldMetadata) {\n const fieldsRequiredBasedOnType = await this.fetchCurrentFieldsBasedOnType(field.type);\n const fieldObject: Record<string, any> = {};\n\n // Assign default or placeholder values for required fields\n fieldsRequiredBasedOnType.forEach((requiredField) => {\n fieldObject[requiredField] = field[requiredField];\n });\n\n if (field.type == \"mediaSingle\" || field.type == \"mediaMultiple\") {\n if (field.mediaStorageProvider) {\n delete fieldObject.mediaStorageProviderId\n fieldObject.mediaStorageProviderUserKey = field.mediaStorageProvider.name\n }\n }\n if (field.isMarkedForRemoval) {\n fieldObject.isMarkedForRemoval = field.isMarkedForRemoval;\n }\n\n return fieldObject;\n }\n\n async resolveS3Url(resolveS3UrlDto: ResolveS3UrlDto) {\n const normalizedKey = this.normalizeS3Key(resolveS3UrlDto.s3Key);\n\n let resolvedBucketName = resolveS3UrlDto.bucketName;\n if (resolveS3UrlDto.mediaStorageProviderUserKey) {\n const mediaStorageProvider = await this.mediaStorageProviderMetadataRepository.findOne({\n where: {\n name: resolveS3UrlDto.mediaStorageProviderUserKey\n }\n });\n if (!mediaStorageProvider) {\n throw new NotFoundException(`MediaStorageProviderMetadata with user key ${resolveS3UrlDto.mediaStorageProviderUserKey} not found`);\n }\n resolvedBucketName = mediaStorageProvider.bucketName;\n }\n this.logger.debug(`INSIDE::resolveS3Url:: resolvedBucketName: ${resolvedBucketName}`)\n\n const expiryInSeconds = resolveS3UrlDto.isPrivate == \"true\" ? 60 * 60 : 0;\n const url = await this.fileService.getUrl(`${resolvedBucketName}:${normalizedKey}`, {\n expiresIn: expiryInSeconds,\n });\n\n return { url: url }\n }\n\n private normalizeS3Key(input: string): string {\n try {\n const url = new URL(input);\n\n // remove leading slash from pathname\n return decodeURIComponent(url.pathname.replace(/^\\/+/, \"\"));\n } catch {\n // not a valid URL → treat as raw S3 key\n return input;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"field-metadata.service.js","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { classify } from '../helpers/string.helper';\nimport { Injectable, Logger, NotFoundException, OnApplicationBootstrap } from '@nestjs/common';\nimport { InjectDataSource } from '@nestjs/typeorm';\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { ComputedFieldMetadata, SolidRegistry } from 'src/helpers/solid-registry';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { DataSource, Repository, SelectQueryBuilder } from 'typeorm';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { CascadeType, ComputedFieldValueType, CreateFieldMetadataDto, DecryptWhenType, EncryptionType, MSSQLType, PSQLType, RelationType, SelectionValueType, SolidFieldType } from '../dtos/create-field-metadata.dto';\nimport { SelectionDynamicQueryDto } from '../dtos/selection-dynamic-query.dto';\nimport { UpdateFieldMetaDataDto } from '../dtos/update-field-metadata.dto';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { ModelMetadata } from '../entities/model-metadata.entity';\nimport { ISelectionProviderValues, MediaStorageProvider } from '../interfaces';\nimport { MEDIA_CATEGORIES } from '../constants/media-file-types';\nimport { CrudHelperService } from './crud-helper.service';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport qs from 'qs';\nimport { ResolveS3UrlDto } from 'src/dtos/resolve-s3-url.dto';\nimport { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';\nimport { S3FileService } from './file';\nimport { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';\n\n@Injectable()\nexport class FieldMetadataService implements OnApplicationBootstrap {\n constructor(\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n private readonly fileService: S3FileService,\n private readonly mediaStorageProviderMetadataRepository: MediaStorageProviderMetadataRepository,\n\n @InjectDataSource()\n private readonly dataSource: DataSource,\n private readonly solidRegistry: SolidRegistry,\n private readonly crudHelperService: CrudHelperService,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n ) { }\n\n private logger = new Logger(FieldMetadataService.name);\n\n onApplicationBootstrap() {\n this.loadAndRegisterComputedFieldsDetails();\n }\n\n async loadAndRegisterComputedFieldsDetails() {\n // Load all the modules and models and within that load all the computed fields\n const computedFieldsWithModelAndModule = await this.fieldMetadataRepo.findComputedFieldsPopulatedWithModelAndModule();\n\n // Convert the computed fields object above to the ComputedFieldMetadata type\n const computedFieldMetadata: ComputedFieldMetadata[] = computedFieldsWithModelAndModule.map((field) => {\n // const defaultComputedFieldTriggerConfig: ComputedFieldTriggerConfig = {\n // moduleName: field.model.module.name,\n // modelName: field.model.singularName,\n // operations: [ComputedFieldTriggerOperation.create, ComputedFieldTriggerOperation.update, ComputedFieldTriggerOperation.delete], // Default operations, can be overridden\n // }\n return {\n moduleName: field.model.module.name,\n modelName: field.model.singularName,\n fieldName: field.name,\n computedFieldValueType: field.computedFieldValueType as ComputedFieldValueType,\n computedFieldTriggerConfig: field.computedFieldTriggerConfig ?? [], // Ensure it's an array, default to empty if not provided\n computedFieldValueProviderName: field.computedFieldValueProvider,\n computedFieldValueProviderCtxt: field.computedFieldValueProviderCtxt ? JSON.parse(field.computedFieldValueProviderCtxt) : {}, // Parse the context if it exists, default to empty object\n eventContext: {}\n };\n });\n\n // Register the computed fields in the SolidRegistry. Capture only computed field related info\n this.solidRegistry.registerComputedFieldMetadata(computedFieldMetadata);\n }\n\n async updateInverseField(field: FieldMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>) {\n if (!field.model || !field.model.module) {\n throw new Error(ERROR_MESSAGES.MODEL_AND_MODULE_REQUIRED_TO_UPDATE_INVERSE_FIELD);\n }\n // Update the inverse field in the db\n const savedInverseField = await this.updateInverseFieldInDb(field, fieldRepository, modelRepository);\n // Update the inverse field in the file\n this.updateRelationInverseFieldInFile(savedInverseField, field.relationCoModelSingularName, field.model.module.name);\n }\n\n private async updateInverseFieldInDb(field: FieldMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>): Promise<FieldMetadata> {\n const { moduleName, modelName } = this.validateForInverseField(field);\n\n // Get the relation model reference\n const relationModel = await this.getRelationModel(modelRepository, field, moduleName);\n\n // const {id, createdAt, updatedAt, deletedAt, ...fieldKeys} = field;\n switch (field.relationType) {\n case RelationType.manyToOne: {\n const fieldName = field.relationCoModelFieldName || `${modelName}s`;\n const inverseField: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.oneToMany,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: field.relationCascade,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n id: null,\n }\n\n // Load the inverse field, \n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseField);\n return savedField;\n }\n case RelationType.oneToMany: {\n const fieldName = field.relationCoModelFieldName || `${modelName}`;\n const inverseField: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.manyToOne,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: field.relationCascade,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n id: null,\n }\n\n // Load the inverse field, \n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseField);\n return savedField;\n }\n case RelationType.manyTomany: {\n const fieldName = field.relationCoModelFieldName;\n // Logic to create a manyToMany inverse field definition\n const inverseFieldManyToMany: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.manyTomany,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: null,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n isRelationManyToManyOwner: false,\n id: null,\n }\n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseFieldManyToMany);\n return savedField;\n }\n default:\n throw new Error(`Invalid relation type for field ${field.name} with relation type ${field.relationType}`);\n }\n }\n\n private async getRelationModel(modelRepository: Repository<ModelMetadata>, field: FieldMetadata, moduleName: string) {\n return await modelRepository.findOne({\n where: {\n singularName: field.relationCoModelSingularName,\n module: {\n name: field.relationModelModuleName ?? moduleName\n }\n }\n });\n }\n\n private async saveInverseField(fieldRepository: Repository<FieldMetadata>, relationModel: ModelMetadata, inverseField: FieldMetadata): Promise<FieldMetadata> {\n const existingInverseField = await fieldRepository.findOne({\n where: {\n model: { id: relationModel.id },\n name: inverseField.name\n }\n });\n\n if (existingInverseField) {\n return existingInverseField; // No need to update if it already exists\n }\n else {\n const savedField = await fieldRepository.save(fieldRepository.create(inverseField));\n return savedField;\n }\n }\n\n private validateForInverseField(field: FieldMetadata) {\n if (field.type !== SolidFieldType.relation) {\n throw new Error(ERROR_MESSAGES.INVALID_INVERSE_FIELD_TYPE);\n }\n const modelName = field.model.singularName;\n const moduleName = field.model.module.name;\n\n if (!modelName || !moduleName) {\n throw new Error(ERROR_MESSAGES.MODEL_NAME_AND_MODULE_NAME_REQUIRED_TO_CREATE_INVERSE_FIELD);\n }\n return { moduleName, modelName };\n }\n\n async find(basicFilterDto: BasicFilterDto) {\n return this.findMany(basicFilterDto);\n }\n\n async findMany(basicFilterDto: BasicFilterDto) {\n const alias = 'fieldMetadata';\n // Extract the required keys from the input query\n let { limit, offset, populateMedia } = basicFilterDto;\n\n // Create above query on pincode table using query builder\n var qb: SelectQueryBuilder<FieldMetadata> = await this.fieldMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)\n qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);\n\n // Get the records and the count\n const [entities, count] = await qb.getManyAndCount();\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n const r = {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n return r\n }\n\n async findOne(id: any, query?: any) {\n // const { fields, filters, populate } = basicFilterDto;\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: id,\n },\n relations: query && query?.populate,\n });\n if (!entity) {\n throw new NotFoundException(`entity #${id} not found`);\n }\n return entity;\n }\n\n async findByNameAndModelName(modelSingularName: string, fieldName: string) {\n\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n name: fieldName,\n model: {\n singularName: modelSingularName\n }\n },\n });\n\n return entity;\n }\n\n async selectionStaticValues(modelSingularName: string, fieldName: string) {\n\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n name: fieldName,\n model: {\n singularName: modelSingularName\n }\n },\n });\n\n if (!entity) {\n return [];\n }\n\n const selectionStaticValues = entity.selectionStaticValues;\n if (!selectionStaticValues) {\n return [];\n }\n\n return this.convertToSelectionProviderValues(selectionStaticValues);\n }\n\n convertToSelectionProviderValues(selectionStaticValues: string[]): ISelectionProviderValues[] {\n // return selectionStaticValues.split(',').map((item) => {\n // const [value, label] = item.split(':');\n // return { label, value };\n // });\n return selectionStaticValues.map((item) => {\n const [value, label] = item.split(':');\n return { label, value };\n });\n }\n\n async create(createDto: CreateFieldMetadataDto) {\n createDto['model'] = await this.dataSource.getRepository(ModelMetadata).findOne({\n where: {\n id: createDto['modelId']\n },\n });\n createDto['mediaStorageProvider'] = await this.dataSource.getRepository(ModelMetadata).findOne({\n where: {\n id: createDto['mediaStorageProviderId']\n },\n });\n\n const moduleMetadata = this.fieldMetadataRepo.create(createDto);\n return this.fieldMetadataRepo.save(moduleMetadata);\n }\n\n // async update(id: number, updateCountryDto: UpdateCountryDto) {\n\n // const country = await this.fieldMetadataRepo.preload({\n // id,\n // ...updateCountryDto,\n // });\n\n // if (!country) {\n // throw new NotFoundException(`Country ${id} not found`);\n // }\n // return this.moduleMetadataRepo.save(country);\n // }\n\n async delete(id: number) {\n const entity = await this.findOne(id);\n return this.fieldMetadataRepo.remove(entity);\n }\n\n async findFieldDefaultMetaData() {\n\n // Function to convert enum to array of objects\n const enumToResponseArray = (enumObj: any) => {\n return Object.entries(enumObj).map(([key, value]) => ({\n label: value,\n value: value,\n }));\n };\n\n // Orm Data type and Solid Dat Type Mapping\n const ormFieldTypeForSolid = this.getOrmFieldTypes();\n\n // Fetch Data Source Type \n const dataSourceTypes = Object.keys(ormFieldTypeForSolid); // [\"psql\"]\n\n const fieldTypes = Object.entries(ormFieldTypeForSolid.postgres).map(([key, value]) => ({\n type: key,\n label: key,\n value: key,\n fieldType: key,\n ormTypes: value.ormTypes,\n fields: this.fetchCurrentFields(key)\n }));\n\n const dataSource = this.solidRegistry.getSolidDatabaseModules().map((solidDatabaseModule) => {\n return {\n 'name': solidDatabaseModule.instance.name(),\n 'type': solidDatabaseModule.instance.type()\n }\n });\n\n // Creating response arrays for each enum\n // Get all selection providers. \n const sps = [];\n const selectionProviders = this.solidRegistry.getSelectionProviders();\n for (let i = 0; i < selectionProviders.length; i++) {\n const selectionProvider = selectionProviders[i];\n sps.push({\n provider: selectionProvider.instance.name(),\n help: selectionProvider.instance.help(),\n });\n }\n\n const cps = [];\n const computedProviders = this.solidRegistry.getComputedFieldProviders();\n for (let i = 0; i < computedProviders.length; i++) {\n const computedProvider = computedProviders[i];\n cps.push({\n provider: computedProvider.instance.name(),\n help: computedProvider.instance.help(),\n });\n }\n\n const r = {\n // Field Types with ormtypes, available fields \n fieldTypes: fieldTypes,\n encryptionTypes: enumToResponseArray(EncryptionType),\n ormType: ormFieldTypeForSolid,\n decryptWhenTypes: enumToResponseArray(DecryptWhenType),\n mediaTypes: MEDIA_CATEGORIES.map((value) => ({ label: value, value })),\n relationTypes: enumToResponseArray(RelationType),\n selectionDynamicProviders: sps,\n computedProviders: cps,\n cascadeTypes: enumToResponseArray(CascadeType),\n selectionValueTypes: enumToResponseArray(SelectionValueType),\n computedFieldValueTypes: enumToResponseArray(ComputedFieldValueType),\n dataSourceType: dataSourceTypes,\n dataSource: dataSource,\n };\n\n return r\n }\n\n private getOrmFieldTypes() {\n return {\n \"postgres\": {\n // Numeric types\n \"int\": {\n \"ormTypes\": [{ label: PSQLType.integer, description: \"A 4-byte integer for general numeric data.\" }]\n },\n \"bigint\": {\n \"ormTypes\": [{ label: PSQLType.bigint, description: \"An 8-byte integer for large numeric values.\" }]\n },\n \"decimal\": {\n \"ormTypes\": [{ label: PSQLType.decimal, description: \"A high-precision numeric type, ideal for financial data.\" }]\n },\n\n // Text types\n \"shortText\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"A variable-length string for short text.\" }]\n },\n \"longText\": {\n \"ormTypes\": [{ label: PSQLType.text, description: \"A text type for large or unbounded strings.\" }]\n },\n \"richText\": {\n \"ormTypes\": [{ label: PSQLType.text, description: \"A text type for large or formatted content.\" }]\n },\n \"json\": {\n \"ormTypes\": [\n // { label: PSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: MSSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: PSQLType.json, description: \"Stores JSON data without indexing.\" },\n { label: PSQLType.jsonb, description: \"Stores JSON data with indexing for faster queries.\" }\n ]\n },\n\n // Boolean types\n \"boolean\": {\n \"ormTypes\": [{ label: PSQLType.boolean, description: \"Stores true or false values.\" }]\n },\n\n // Date and time types\n \"date\": {\n \"ormTypes\": [{ label: PSQLType.date, description: \"Stores calendar dates (YYYY-MM-DD).\" }]\n },\n \"datetime\": {\n \"ormTypes\": [\n { label: PSQLType.timestamp, description: \"Stores date and time without time zones.\" },\n { label: PSQLType.timestamptz, description: \"Stores date and time with time zones.\" }\n ]\n },\n \"time\": {\n \"ormTypes\": [\n { label: PSQLType.time, description: \"Stores time values (HH:MM:SS).\" },\n { label: PSQLType.timestamp, description: \"Stores date and time without time zones.\" },\n { label: PSQLType.timestamptz, description: \"Stores date and time with time zones.\" }\n ]\n },\n\n // Relation\n \"relation\": {\n \"ormTypes\": [{ label: PSQLType.integer, description: \"Used for foreign keys referencing other entities.\" }]\n },\n\n // Media types\n \"mediaSingle\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores file paths or URLs for single media files.\" }]\n },\n \"mediaMultiple\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores file paths or URLs for multiple media files.\" }]\n },\n\n // Email and password\n \"email\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores email addresses.\" }]\n },\n \"password\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores hashed or plain-text passwords.\" }]\n },\n\n // Selection types\n \"selectionStatic\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Used for predefined selection options.\" }]\n },\n \"selectionDynamic\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Used for dynamic selection options.\" }]\n },\n\n // Computed and external ID\n \"computed\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Represents computed or derived fields.\" }]\n },\n \"uuid\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores universally unique identifiers (UUIDs).\" }]\n }\n },\n \"mssql\": {\n // Numeric types\n \"int\": {\n ormTypes: [\n { label: MSSQLType.int, description: \"A 4-byte integer for general numeric data.\" }\n ]\n },\n \"bigint\": {\n ormTypes: [\n { label: MSSQLType.bigint, description: \"An 8-byte integer for large numeric values.\" }\n ]\n },\n \"decimal\": {\n ormTypes: [\n { label: MSSQLType.numeric, description: \"A high-precision numeric type for financial or exact values.\" },\n { label: MSSQLType.decimal, description: \"A high-precision decimal type for financial or exact values.\" }\n ]\n },\n\n // Text types\n \"shortText\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"A variable-length string for short text.\" },\n { label: MSSQLType.nvarchar, description: \"A unicode supported variable-length string for short text.\" }\n ]\n },\n \"longText\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"A large or unbounded string type.\" }\n ]\n },\n \"richText\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"A large text field for formatted or long content.\" }\n ]\n },\n \"json\": {\n ormTypes: [\n { label: MSSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: MSSQLType.nvarchar, description: \"Stores JSON data as string (MSSQL doesn't have native JSON type).\" }\n ]\n },\n\n // Boolean types\n \"boolean\": {\n ormTypes: [\n { label: MSSQLType.bit, description: \"Stores true or false values as 0 or 1.\" }\n ]\n },\n\n // Date and time types\n \"date\": {\n ormTypes: [\n { label: MSSQLType.date, description: \"Stores calendar dates (YYYY-MM-DD).\" }\n ]\n },\n \"datetime\": {\n ormTypes: [\n { label: MSSQLType.datetime, description: \"Stores date and time without timezone.\" },\n { label: MSSQLType.datetime2, description: \"High-precision date and time type.\" }\n ]\n },\n \"time\": {\n ormTypes: [\n { label: MSSQLType.time, description: \"Stores time values (HH:MM:SS).\" }\n ]\n },\n\n // Relation\n \"relation\": {\n ormTypes: [\n { label: MSSQLType.int, description: \"Used for foreign keys referencing other entities.\" }\n ]\n },\n\n // Media types\n \"mediaSingle\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"Stores file paths or URLs for single media files.\" }\n ]\n },\n \"mediaMultiple\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"Stores file paths or URLs for multiple media files.\" }\n ]\n },\n\n // Email and password\n \"email\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Stores email addresses.\" }\n ]\n },\n \"password\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Stores hashed or plain-text passwords.\" }\n ]\n },\n\n // Selection types\n \"selectionStatic\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Used for predefined selection options.\" }\n ]\n },\n \"selectionDynamic\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Used for dynamic selection options.\" }\n ]\n },\n\n // Computed and external ID\n \"computed\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Represents computed or derived fields.\" }\n ]\n },\n \"uuid\": {\n ormTypes: [\n { label: MSSQLType.uniqueidentifier, description: \"Stores universally unique identifiers (UUIDs).\" }\n ]\n }\n }\n };\n }\n\n async fetchCurrentFieldsBasedOnType(type: string) {\n return this.fetchCurrentFields(type);\n }\n\n private fetchCurrentFields(solidFieldType: string) {\n switch (solidFieldType) {\n case SolidFieldType.int:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.bigint:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n // case SolidFieldType.float:\n // return [\n // \"name\",\n // \"displayName\",\n // \"description\",\n // \"type\",\n // \"ormType\",\n // \"isSystem\",\n // \"defaultValue\",\n // \"required\",\n // \"unique\",\n // \"index\",\n // \"private\",\n // \"encrypt\",\n // \"encryptionType\",\n // \"decryptWhen\"\n // ];\n\n case SolidFieldType.decimal:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.shortText:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.longtext:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.richText:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n // \"min\",\n // \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.json:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n // \"min\",\n // \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.boolean:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n // \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.date:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.datetime:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.time:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.relation:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"relationType\",\n \"relationCoModelFieldName\",\n \"relationCreateInverse\",\n \"relationCoModelSingularName\",\n \"relationCoModelColumnName\",\n \"relationModelModuleName\",\n \"relationCascade\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"relationJoinTableName\",\n \"isRelationManyToManyOwner\",\n \"relationFieldFixedFilter\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.mediaSingle:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"mediaTypes\",\n \"mediaMaxSizeKb\",\n \"mediaStorageProviderId\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.mediaMultiple:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"mediaTypes\",\n \"mediaMaxSizeKb\",\n \"mediaStorageProviderId\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.email:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.password:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"min\",\n \"max\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.selectionStatic:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"selectionStaticValues\",\n \"selectionValueType\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isMultiSelect\"\n ];\n\n case SolidFieldType.selectionDynamic:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"selectionDynamicProvider\",\n \"selectionDynamicProviderCtxt\",\n \"selectionValueType\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\",\n \"isMultiSelect\"\n ];\n case SolidFieldType.computed:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"computedFieldValueType\",\n \"computedFieldTriggerConfig\",\n \"computedFieldValueProvider\",\n \"computedFieldValueProviderCtxt\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.uuid:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"uuid\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n default:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n }\n }\n\n async fetchAllDataSources() {\n // Initialize the data source\n // await AppDataSource.initialize();\n\n // // Get all entities metadata\n // const entities = AppDataSource.entityMetadatas;\n\n // // Create an array to hold the data sources\n // const dataSources = entities.map(entity => ({\n // name: entity.name,\n // tableName: entity.tableName,\n // columns: entity.columns.map(column => ({\n // propertyName: column.propertyName,\n // databaseName: column.databaseName,\n // type: column.type,\n // })),\n // }));\n\n // return dataSources;\n }\n\n async upsert(updateDto: UpdateFieldMetaDataDto) {\n // First check if module already exists using name\n const existingFieldMetadata = await this.fieldMetadataRepo.findOne({\n where: {\n //@ts-ignore\n model: { id: updateDto.model.id },\n name: updateDto.name\n }\n })\n\n // if found\n if (existingFieldMetadata) {\n const hasChanges = Object.entries(updateDto).some(([key, value]) => {\n if (key === 'model') {\n return existingFieldMetadata.model?.id !== value?.id;\n }\n if (key === 'mediaStorageProvider') {\n return existingFieldMetadata.mediaStorageProvider?.id !== value?.id;\n }\n const currentValue = existingFieldMetadata[key];\n if (Array.isArray(currentValue) || Array.isArray(value)) {\n return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);\n }\n if (value && typeof value === 'object') {\n return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);\n }\n return currentValue !== value;\n });\n\n if (!hasChanges) {\n return existingFieldMetadata;\n }\n\n const updatedFieldMetadata = { ...existingFieldMetadata, ...updateDto };\n return this.fieldMetadataRepo.save(updatedFieldMetadata);\n }\n // if not found - create new \n else {\n const fieldMetadata = this.fieldMetadataRepo.create(updateDto);\n return this.fieldMetadataRepo.save(fieldMetadata);\n }\n }\n\n async getSelectionDynamicValues(query: SelectionDynamicQueryDto) {\n // 1. use the id to identify the field. \n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: query.fieldId,\n },\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));\n }\n\n // 2. use the field metadata to identify the provider. \n const selectionDynamicProvider = entity.selectionDynamicProvider;\n const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');\n selectionDynamicProviderCtxt['limit'] = query.limit;\n selectionDynamicProviderCtxt['offset'] = query.offset;\n const formValues = query.formValues || {};\n // Parse the form values if they are in string format using qs\n const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;\n selectionDynamicProviderCtxt['formValues'] = parsedFormValues;\n\n // 3. get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);\n if (!selectionProviderInstance) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));\n }\n\n // 4. use the provider to fetch the dynamic values, pass the query string received from the UI.. \n return selectionProviderInstance.values(query.query, selectionDynamicProviderCtxt);\n }\n\n async getSelectionDynamicValue(query: SelectionDynamicQueryDto) {\n // 1. use the id to identify the field. \n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: query.fieldId,\n },\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));\n }\n\n // 2. use the field metadata to identify the provider. \n const selectionDynamicProvider = entity.selectionDynamicProvider;\n const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');\n selectionDynamicProviderCtxt['limit'] = query.limit;\n selectionDynamicProviderCtxt['offset'] = query.offset;\n const formValues = query.formValues || {};\n // Parse the form values if they are in string format using qs\n const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;\n selectionDynamicProviderCtxt['formValues'] = parsedFormValues;\n\n // 3. get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);\n if (!selectionProviderInstance) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));\n }\n\n // 4. use the provider to fetch the dynamic values, pass the query string received from the UI.. \n return selectionProviderInstance.value(query.optionValue, selectionDynamicProviderCtxt);\n }\n\n private async updateRelationInverseFieldInFile(savedInverseField: FieldMetadata, inverseModelName: string, moduleName: string) {\n try {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n // Create the config object for the inverse field\n const fieldObject: Record<string, any> = await this.createFieldConfig(savedInverseField);\n\n // Find the field config object in the json file\n const model = metaData.moduleMetadata.models.find((model: any) => model.singularName === inverseModelName);\n\n // Replace the current field object with the above field object\n const fieldIndex = model.fields.findIndex((field: any) => field.name === savedInverseField.name);\n if (fieldIndex === -1) {\n model.fields.push(fieldObject);\n }\n else {\n model.fields[fieldIndex] = fieldObject;\n }\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n } catch (error: any) {\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n //Moved existing reusable logic to a separate function\n async createFieldConfig(field: FieldMetadata) {\n const fieldsRequiredBasedOnType = await this.fetchCurrentFieldsBasedOnType(field.type);\n const fieldObject: Record<string, any> = {};\n\n // Assign default or placeholder values for required fields\n fieldsRequiredBasedOnType.forEach((requiredField) => {\n fieldObject[requiredField] = field[requiredField];\n });\n\n if (field.type == \"mediaSingle\" || field.type == \"mediaMultiple\") {\n if (field.mediaStorageProvider) {\n delete fieldObject.mediaStorageProviderId\n fieldObject.mediaStorageProviderUserKey = field.mediaStorageProvider.name\n }\n }\n if (field.isMarkedForRemoval) {\n fieldObject.isMarkedForRemoval = field.isMarkedForRemoval;\n }\n\n return fieldObject;\n }\n\n async resolveS3Url(resolveS3UrlDto: ResolveS3UrlDto) {\n const normalizedKey = this.normalizeS3Key(resolveS3UrlDto.s3Key);\n\n let resolvedBucketName = resolveS3UrlDto.bucketName;\n if (resolveS3UrlDto.mediaStorageProviderUserKey) {\n const mediaStorageProvider = await this.mediaStorageProviderMetadataRepository.findOne({\n where: {\n name: resolveS3UrlDto.mediaStorageProviderUserKey\n }\n });\n if (!mediaStorageProvider) {\n throw new NotFoundException(`MediaStorageProviderMetadata with user key ${resolveS3UrlDto.mediaStorageProviderUserKey} not found`);\n }\n resolvedBucketName = mediaStorageProvider.bucketName;\n }\n this.logger.debug(`INSIDE::resolveS3Url:: resolvedBucketName: ${resolvedBucketName}`)\n\n const expiryInSeconds = resolveS3UrlDto.isPrivate == \"true\" ? 60 * 60 : 0;\n const url = await this.fileService.getUrl(`${resolvedBucketName}:${normalizedKey}`, {\n expiresIn: expiryInSeconds,\n });\n\n return { url: url }\n }\n\n private normalizeS3Key(input: string): string {\n try {\n const url = new URL(input);\n\n // remove leading slash from pathname\n return decodeURIComponent(url.pathname.replace(/^\\/+/, \"\"));\n } catch {\n // not a valid URL → treat as raw S3 key\n return input;\n }\n }\n}\n"]}
@@ -197,14 +197,42 @@ declare const getSolidCoreSettings: (isProd: boolean) => [{
197
197
  readonly helpText: "Privacy policy URL shown when legal links are enabled.";
198
198
  }, {
199
199
  readonly moduleName: "solid-core";
200
- readonly key: "enableDarkMode";
200
+ readonly key: "showThemeToggle";
201
201
  readonly value: true;
202
202
  readonly level: SettingLevel.SystemAdminEditable;
203
- readonly label: "Enable Dark Mode";
203
+ readonly label: "Show Theme Toggle";
204
204
  readonly group: "app-settings";
205
205
  readonly sortOrder: 120;
206
206
  readonly controlType: "boolean";
207
- readonly helpText: "Enables dark theme support for frontend surfaces that honor the global appearance setting.";
207
+ readonly helpText: "Shows the theme toggle in the frontend so users can switch between light and dark themes.";
208
+ }, {
209
+ readonly moduleName: "solid-core";
210
+ readonly key: "lightTheme";
211
+ readonly value: string;
212
+ readonly level: SettingLevel.SystemAdminEditable;
213
+ readonly label: "Light Theme";
214
+ readonly group: "app-settings";
215
+ readonly sortOrder: 125;
216
+ readonly controlType: "selectionStatic";
217
+ readonly options: {
218
+ label: string;
219
+ value: string;
220
+ }[];
221
+ readonly helpText: "Selects the theme used whenever the application is in light mode.";
222
+ }, {
223
+ readonly moduleName: "solid-core";
224
+ readonly key: "darkTheme";
225
+ readonly value: string;
226
+ readonly level: SettingLevel.SystemAdminEditable;
227
+ readonly label: "Dark Theme";
228
+ readonly group: "app-settings";
229
+ readonly sortOrder: 126;
230
+ readonly controlType: "selectionStatic";
231
+ readonly options: {
232
+ label: string;
233
+ value: string;
234
+ }[];
235
+ readonly helpText: "Selects the theme used whenever the application is in dark mode.";
208
236
  }, {
209
237
  readonly moduleName: "solid-core";
210
238
  readonly key: "copyright";
@@ -1496,14 +1524,42 @@ export declare class SolidCoreDefaultSettingsProvider implements ISettingsProvid
1496
1524
  readonly helpText: "Privacy policy URL shown when legal links are enabled.";
1497
1525
  }, {
1498
1526
  readonly moduleName: "solid-core";
1499
- readonly key: "enableDarkMode";
1527
+ readonly key: "showThemeToggle";
1500
1528
  readonly value: true;
1501
1529
  readonly level: SettingLevel.SystemAdminEditable;
1502
- readonly label: "Enable Dark Mode";
1530
+ readonly label: "Show Theme Toggle";
1503
1531
  readonly group: "app-settings";
1504
1532
  readonly sortOrder: 120;
1505
1533
  readonly controlType: "boolean";
1506
- readonly helpText: "Enables dark theme support for frontend surfaces that honor the global appearance setting.";
1534
+ readonly helpText: "Shows the theme toggle in the frontend so users can switch between light and dark themes.";
1535
+ }, {
1536
+ readonly moduleName: "solid-core";
1537
+ readonly key: "lightTheme";
1538
+ readonly value: string;
1539
+ readonly level: SettingLevel.SystemAdminEditable;
1540
+ readonly label: "Light Theme";
1541
+ readonly group: "app-settings";
1542
+ readonly sortOrder: 125;
1543
+ readonly controlType: "selectionStatic";
1544
+ readonly options: {
1545
+ label: string;
1546
+ value: string;
1547
+ }[];
1548
+ readonly helpText: "Selects the theme used whenever the application is in light mode.";
1549
+ }, {
1550
+ readonly moduleName: "solid-core";
1551
+ readonly key: "darkTheme";
1552
+ readonly value: string;
1553
+ readonly level: SettingLevel.SystemAdminEditable;
1554
+ readonly label: "Dark Theme";
1555
+ readonly group: "app-settings";
1556
+ readonly sortOrder: 126;
1557
+ readonly controlType: "selectionStatic";
1558
+ readonly options: {
1559
+ label: string;
1560
+ value: string;
1561
+ }[];
1562
+ readonly helpText: "Selects the theme used whenever the application is in dark mode.";
1507
1563
  }, {
1508
1564
  readonly moduleName: "solid-core";
1509
1565
  readonly key: "copyright";
@@ -1 +1 @@
1
- {"version":3,"file":"default-settings-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/settings/default-settings-provider.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"default-settings-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/settings/default-settings-provider.service.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ const common_1 = require("@nestjs/common");
11
11
  const disallow_in_production_decorator_1 = require("../../decorators/disallow-in-production.decorator");
12
12
  const settings_provider_decorator_1 = require("../../decorators/settings-provider.decorator");
13
13
  const interfaces_1 = require("../../interfaces");
14
+ const theme_registry_1 = require("../../theme/theme-registry");
14
15
  exports.DEFAULT_MEDIA_UPLOAD_DIR = "media-uploads";
15
16
  exports.DEFAULT_MEDIA_FILE_STORAGE_DIR = "media-files-storage";
16
17
  const timeoutFromEnv = (value, fallback) => {
@@ -220,14 +221,44 @@ const getSolidCoreSettings = (isProd) => [
220
221
  },
221
222
  {
222
223
  moduleName: "solid-core",
223
- key: "enableDarkMode",
224
+ key: "showThemeToggle",
224
225
  value: true,
225
226
  level: interfaces_1.SettingLevel.SystemAdminEditable,
226
- label: "Enable Dark Mode",
227
+ label: "Show Theme Toggle",
227
228
  group: "app-settings",
228
229
  sortOrder: 120,
229
230
  controlType: "boolean",
230
- helpText: "Enables dark theme support for frontend surfaces that honor the global appearance setting.",
231
+ helpText: "Shows the theme toggle in the frontend so users can switch between light and dark themes.",
232
+ },
233
+ {
234
+ moduleName: "solid-core",
235
+ key: "lightTheme",
236
+ value: (0, theme_registry_1.getDefaultThemeKey)("light"),
237
+ level: interfaces_1.SettingLevel.SystemAdminEditable,
238
+ label: "Light Theme",
239
+ group: "app-settings",
240
+ sortOrder: 125,
241
+ controlType: "selectionStatic",
242
+ options: (0, theme_registry_1.getThemesByMode)("light").map((theme) => ({
243
+ label: theme.label,
244
+ value: theme.key,
245
+ })),
246
+ helpText: "Selects the theme used whenever the application is in light mode.",
247
+ },
248
+ {
249
+ moduleName: "solid-core",
250
+ key: "darkTheme",
251
+ value: (0, theme_registry_1.getDefaultThemeKey)("dark"),
252
+ level: interfaces_1.SettingLevel.SystemAdminEditable,
253
+ label: "Dark Theme",
254
+ group: "app-settings",
255
+ sortOrder: 126,
256
+ controlType: "selectionStatic",
257
+ options: (0, theme_registry_1.getThemesByMode)("dark").map((theme) => ({
258
+ label: theme.label,
259
+ value: theme.key,
260
+ })),
261
+ helpText: "Selects the theme used whenever the application is in dark mode.",
231
262
  },
232
263
  {
233
264
  moduleName: "solid-core",