@solidstarters/solid-core 1.2.193 → 1.2.201
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.
- package/dist/commands/fixtures/fixtures-setup.command.d.ts +15 -0
- package/dist/commands/fixtures/fixtures-setup.command.d.ts.map +1 -0
- package/dist/commands/fixtures/fixtures-setup.command.js +58 -0
- package/dist/commands/fixtures/fixtures-setup.command.js.map +1 -0
- package/dist/commands/fixtures/fixtures-tear-down.command.d.ts +16 -0
- package/dist/commands/fixtures/fixtures-tear-down.command.d.ts.map +1 -0
- package/dist/commands/fixtures/fixtures-tear-down.command.js +59 -0
- package/dist/commands/fixtures/fixtures-tear-down.command.js.map +1 -0
- package/dist/commands/mcp.command.d.ts +20 -0
- package/dist/commands/mcp.command.d.ts.map +1 -0
- package/dist/commands/mcp.command.js +208 -0
- package/dist/commands/mcp.command.js.map +1 -0
- package/dist/commands/refresh-model.command.d.ts +8 -5
- package/dist/commands/refresh-model.command.d.ts.map +1 -1
- package/dist/commands/refresh-model.command.js +36 -0
- package/dist/commands/refresh-model.command.js.map +1 -1
- package/dist/commands/remove-fields.command.js +1 -1
- package/dist/commands/remove-fields.command.js.map +1 -1
- package/dist/commands/seed.command.d.ts +2 -0
- package/dist/commands/seed.command.d.ts.map +1 -1
- package/dist/commands/seed.command.js +28 -1
- package/dist/commands/seed.command.js.map +1 -1
- package/dist/constants/error-messages.d.ts +2 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +4 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/controllers/authentication.controller.js +1 -1
- package/dist/controllers/authentication.controller.js.map +1 -1
- package/dist/controllers/email-template.controller.js +1 -1
- package/dist/controllers/email-template.controller.js.map +1 -1
- package/dist/controllers/field-metadata.controller.d.ts +136 -4
- package/dist/controllers/field-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/field-metadata.controller.js +14 -1
- package/dist/controllers/field-metadata.controller.js.map +1 -1
- package/dist/controllers/media-storage-provider-metadata.controller.js +1 -1
- package/dist/controllers/media-storage-provider-metadata.controller.js.map +1 -1
- package/dist/controllers/model-metadata.controller.js +1 -1
- package/dist/controllers/model-metadata.controller.js.map +1 -1
- package/dist/controllers/model-sequence.controller.d.ts +43 -0
- package/dist/controllers/model-sequence.controller.d.ts.map +1 -0
- package/dist/controllers/model-sequence.controller.js +179 -0
- package/dist/controllers/model-sequence.controller.js.map +1 -0
- package/dist/controllers/module-metadata.controller.js +1 -1
- package/dist/controllers/module-metadata.controller.js.map +1 -1
- package/dist/controllers/otp-authentication.controller.js +1 -1
- package/dist/controllers/otp-authentication.controller.js.map +1 -1
- package/dist/controllers/service.controller.js +1 -1
- package/dist/controllers/service.controller.js.map +1 -1
- package/dist/controllers/setting.controller.d.ts +1 -0
- package/dist/controllers/setting.controller.d.ts.map +1 -1
- package/dist/controllers/setting.controller.js +15 -0
- package/dist/controllers/setting.controller.js.map +1 -1
- package/dist/controllers/sms-template.controller.js +1 -1
- package/dist/controllers/sms-template.controller.js.map +1 -1
- package/dist/controllers/test-queue.controller.js +1 -1
- package/dist/controllers/test-queue.controller.js.map +1 -1
- package/dist/controllers/test.controller.js +1 -1
- package/dist/controllers/test.controller.js.map +1 -1
- package/dist/dtos/basic-filters.dto.d.ts +3 -1
- package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
- package/dist/dtos/basic-filters.dto.js +8 -2
- package/dist/dtos/basic-filters.dto.js.map +1 -1
- package/dist/dtos/basic-group-filters.dto.d.ts +6 -0
- package/dist/dtos/basic-group-filters.dto.d.ts.map +1 -0
- package/dist/dtos/basic-group-filters.dto.js +46 -0
- package/dist/dtos/basic-group-filters.dto.js.map +1 -0
- package/dist/dtos/create-ai-interaction.dto.d.ts +2 -0
- package/dist/dtos/create-ai-interaction.dto.d.ts.map +1 -1
- package/dist/dtos/create-ai-interaction.dto.js +14 -1
- package/dist/dtos/create-ai-interaction.dto.js.map +1 -1
- package/dist/dtos/create-field-metadata.dto.d.ts +22 -5
- package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-field-metadata.dto.js +34 -8
- package/dist/dtos/create-field-metadata.dto.js.map +1 -1
- package/dist/dtos/create-import-transaction.dto.d.ts +0 -1
- package/dist/dtos/create-import-transaction.dto.d.ts.map +1 -1
- package/dist/dtos/create-import-transaction.dto.js +1 -7
- package/dist/dtos/create-import-transaction.dto.js.map +1 -1
- package/dist/dtos/create-model-metadata.dto.d.ts +2 -0
- package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-model-metadata.dto.js +13 -1
- package/dist/dtos/create-model-metadata.dto.js.map +1 -1
- package/dist/dtos/create-model-sequence.dto.d.ts +14 -0
- package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -0
- package/dist/dtos/create-model-sequence.dto.js +90 -0
- package/dist/dtos/create-model-sequence.dto.js.map +1 -0
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js +6 -1
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/get-mcp-url.dto.d.ts +5 -0
- package/dist/dtos/get-mcp-url.dto.d.ts.map +1 -0
- package/dist/dtos/get-mcp-url.dto.js +31 -0
- package/dist/dtos/get-mcp-url.dto.js.map +1 -0
- package/dist/dtos/resolve-s3-url.dto.d.ts +10 -0
- package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -0
- package/dist/dtos/resolve-s3-url.dto.js +49 -0
- package/dist/dtos/resolve-s3-url.dto.js.map +1 -0
- package/dist/dtos/update-ai-interaction.dto.d.ts +2 -0
- package/dist/dtos/update-ai-interaction.dto.d.ts.map +1 -1
- package/dist/dtos/update-ai-interaction.dto.js +13 -1
- package/dist/dtos/update-ai-interaction.dto.js.map +1 -1
- package/dist/dtos/update-field-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-field-metadata.dto.js.map +1 -1
- package/dist/dtos/update-import-transaction.dto.d.ts +0 -1
- package/dist/dtos/update-import-transaction.dto.d.ts.map +1 -1
- package/dist/dtos/update-import-transaction.dto.js +1 -7
- package/dist/dtos/update-import-transaction.dto.js.map +1 -1
- package/dist/dtos/update-model-sequence.dto.d.ts +15 -0
- package/dist/dtos/update-model-sequence.dto.d.ts.map +1 -0
- package/dist/dtos/update-model-sequence.dto.js +94 -0
- package/dist/dtos/update-model-sequence.dto.js.map +1 -0
- package/dist/entities/action-metadata.entity.js +4 -4
- package/dist/entities/action-metadata.entity.js.map +1 -1
- package/dist/entities/ai-interaction.entity.d.ts +2 -0
- package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
- package/dist/entities/ai-interaction.entity.js +15 -6
- package/dist/entities/ai-interaction.entity.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +1 -1
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.js +1 -1
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/entities/common.entity.d.ts +2 -3
- package/dist/entities/common.entity.d.ts.map +1 -1
- package/dist/entities/common.entity.js +10 -11
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js +2 -2
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
- package/dist/entities/dashboard-question.entity.js +3 -3
- package/dist/entities/dashboard-question.entity.js.map +1 -1
- package/dist/entities/dashboard-variable.entity.js +3 -3
- package/dist/entities/dashboard-variable.entity.js.map +1 -1
- package/dist/entities/dashboard.entity.js +1 -1
- package/dist/entities/dashboard.entity.js.map +1 -1
- package/dist/entities/email-template.entity.d.ts.map +1 -1
- package/dist/entities/email-template.entity.js +4 -3
- package/dist/entities/email-template.entity.js.map +1 -1
- package/dist/entities/export-template.entity.js +2 -2
- package/dist/entities/export-template.entity.js.map +1 -1
- package/dist/entities/export-transaction.entity.js +2 -2
- package/dist/entities/export-transaction.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts +1 -0
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +8 -4
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/import-transaction-error-log.entity.js +1 -1
- package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
- package/dist/entities/import-transaction.entity.d.ts +0 -1
- package/dist/entities/import-transaction.entity.d.ts.map +1 -1
- package/dist/entities/import-transaction.entity.js +2 -7
- package/dist/entities/import-transaction.entity.js.map +1 -1
- package/dist/entities/legacy-common-with-id.entity.d.ts +5 -0
- package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -0
- package/dist/entities/legacy-common-with-id.entity.js +32 -0
- package/dist/entities/legacy-common-with-id.entity.js.map +1 -0
- package/dist/entities/legacy-common.entity.d.ts +13 -0
- package/dist/entities/legacy-common.entity.d.ts.map +1 -0
- package/dist/entities/legacy-common.entity.js +68 -0
- package/dist/entities/legacy-common.entity.js.map +1 -0
- package/dist/entities/list-of-values.entity.js +2 -2
- package/dist/entities/list-of-values.entity.js.map +1 -1
- package/dist/entities/locale.entity.js +1 -1
- package/dist/entities/locale.entity.js.map +1 -1
- package/dist/entities/media.entity.d.ts.map +1 -1
- package/dist/entities/media.entity.js +3 -3
- package/dist/entities/media.entity.js.map +1 -1
- package/dist/entities/menu-item-metadata.entity.js +4 -4
- package/dist/entities/menu-item-metadata.entity.js.map +1 -1
- package/dist/entities/model-metadata.entity.d.ts +2 -0
- package/dist/entities/model-metadata.entity.d.ts.map +1 -1
- package/dist/entities/model-metadata.entity.js +11 -3
- package/dist/entities/model-metadata.entity.js.map +1 -1
- package/dist/entities/model-sequence.entity.d.ts +15 -0
- package/dist/entities/model-sequence.entity.d.ts.map +1 -0
- package/dist/entities/model-sequence.entity.js +67 -0
- package/dist/entities/model-sequence.entity.js.map +1 -0
- package/dist/entities/mq-message-queue.entity.js +1 -1
- package/dist/entities/mq-message-queue.entity.js.map +1 -1
- package/dist/entities/mq-message.entity.d.ts +3 -3
- package/dist/entities/mq-message.entity.d.ts.map +1 -1
- package/dist/entities/mq-message.entity.js +10 -10
- package/dist/entities/mq-message.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.js +4 -4
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/scheduled-job.entity.js +4 -4
- package/dist/entities/scheduled-job.entity.js.map +1 -1
- package/dist/entities/security-rule.entity.js +2 -2
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/entities/setting.entity.js +2 -2
- package/dist/entities/setting.entity.js.map +1 -1
- package/dist/entities/sms-template.entity.js +2 -2
- package/dist/entities/sms-template.entity.js.map +1 -1
- package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
- package/dist/entities/user-activity-history.entity.js +1 -1
- package/dist/entities/user-activity-history.entity.js.map +1 -1
- package/dist/entities/user-view-metadata.entity.js +2 -2
- package/dist/entities/user-view-metadata.entity.js.map +1 -1
- package/dist/entities/user.entity.js +13 -15
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/view-metadata.entity.js +3 -3
- package/dist/entities/view-metadata.entity.js.map +1 -1
- package/dist/helpers/date.helper.d.ts +1 -1
- package/dist/helpers/date.helper.d.ts.map +1 -1
- package/dist/helpers/date.helper.js +24 -2
- package/dist/helpers/date.helper.js.map +1 -1
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js +13 -2
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +0 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +4 -9
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts +0 -1
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +7 -8
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +0 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +4 -9
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/model-metadata-helper.service.d.ts +4 -1
- package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +52 -30
- package/dist/helpers/model-metadata-helper.service.js.map +1 -1
- package/dist/helpers/module-metadata-helper.service.d.ts +1 -0
- package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/module-metadata-helper.service.js +9 -0
- package/dist/helpers/module-metadata-helper.service.js.map +1 -1
- package/dist/helpers/module.helper.d.ts +1 -0
- package/dist/helpers/module.helper.d.ts.map +1 -1
- package/dist/helpers/module.helper.js +26 -2
- package/dist/helpers/module.helper.js.map +1 -1
- package/dist/helpers/schematic.service.d.ts +9 -3
- package/dist/helpers/schematic.service.d.ts.map +1 -1
- package/dist/helpers/schematic.service.js +49 -32
- package/dist/helpers/schematic.service.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +14 -2
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +10 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/helpers/typeorm-db-helper.d.ts +3 -0
- package/dist/helpers/typeorm-db-helper.d.ts.map +1 -0
- package/dist/helpers/typeorm-db-helper.js +24 -0
- package/dist/helpers/typeorm-db-helper.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +3 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts +1 -0
- package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/computed-field-evaluation-subscriber.service.js +16 -4
- package/dist/jobs/computed-field-evaluation-subscriber.service.js.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +6 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
- package/dist/repository/media.repository.d.ts.map +1 -1
- package/dist/repository/media.repository.js +4 -0
- package/dist/repository/media.repository.js.map +1 -1
- package/dist/repository/model-sequence.repository.d.ts +14 -0
- package/dist/repository/model-sequence.repository.d.ts.map +1 -0
- package/dist/repository/model-sequence.repository.js +103 -0
- package/dist/repository/model-sequence.repository.js.map +1 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts +8 -13
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +103 -43
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +553 -652
- package/dist/seeders/system-fields-seeder.service.d.ts +1 -0
- package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
- package/dist/seeders/system-fields-seeder.service.js +12 -3
- package/dist/seeders/system-fields-seeder.service.js.map +1 -1
- package/dist/services/action-metadata.service.d.ts.map +1 -1
- package/dist/services/action-metadata.service.js +1 -0
- package/dist/services/action-metadata.service.js.map +1 -1
- package/dist/services/ai-interaction.service.d.ts.map +1 -1
- package/dist/services/ai-interaction.service.js +2 -1
- package/dist/services/ai-interaction.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +22 -14
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message-details.service.d.ts.map +1 -1
- package/dist/services/chatter-message-details.service.js +1 -0
- package/dist/services/chatter-message-details.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +7 -3
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +10 -6
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +15 -0
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -0
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +72 -0
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -0
- package/dist/services/crud-helper.service.d.ts +31 -6
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +285 -50
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +7 -2
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +135 -26
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/database/database-bootstrap.service.d.ts +12 -0
- package/dist/services/database/database-bootstrap.service.d.ts.map +1 -0
- package/dist/services/database/database-bootstrap.service.js +115 -0
- package/dist/services/database/database-bootstrap.service.js.map +1 -0
- package/dist/services/email-template.service.d.ts +7 -7
- package/dist/services/email-template.service.d.ts.map +1 -1
- package/dist/services/email-template.service.js +8 -7
- package/dist/services/email-template.service.js.map +1 -1
- package/dist/services/excel.service.d.ts +10 -0
- package/dist/services/excel.service.d.ts.map +1 -1
- package/dist/services/excel.service.js +100 -0
- package/dist/services/excel.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts +146 -6
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +218 -58
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/file.service.d.ts +1 -0
- package/dist/services/file.service.d.ts.map +1 -1
- package/dist/services/file.service.js +9 -0
- package/dist/services/file.service.js.map +1 -1
- package/dist/services/fixtures.service.d.ts +13 -0
- package/dist/services/fixtures.service.d.ts.map +1 -0
- package/dist/services/fixtures.service.js +95 -0
- package/dist/services/fixtures.service.js.map +1 -0
- package/dist/services/genai/ingest-metadata.service.d.ts.map +1 -1
- package/dist/services/genai/ingest-metadata.service.js +1 -1
- package/dist/services/genai/ingest-metadata.service.js.map +1 -1
- package/dist/services/import-transaction-error-log.service.d.ts.map +1 -1
- package/dist/services/import-transaction-error-log.service.js +1 -0
- package/dist/services/import-transaction-error-log.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +7 -1
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/list-of-values.service.d.ts +2 -2
- package/dist/services/list-of-values.service.d.ts.map +1 -1
- package/dist/services/list-of-values.service.js +2 -1
- package/dist/services/list-of-values.service.js.map +1 -1
- package/dist/services/locale.service.d.ts.map +1 -1
- package/dist/services/locale.service.js +1 -0
- package/dist/services/locale.service.js.map +1 -1
- package/dist/services/mail/smtp-email.service.js +0 -1
- package/dist/services/mail/smtp-email.service.js.map +1 -1
- package/dist/services/media.service.d.ts +3 -3
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +6 -4
- package/dist/services/media.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +17 -6
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js +0 -13
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/menu-item-metadata.service.d.ts +3 -1
- package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
- package/dist/services/menu-item-metadata.service.js +35 -11
- package/dist/services/menu-item-metadata.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +16 -45
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/model-sequence.service.d.ts +23 -0
- package/dist/services/model-sequence.service.d.ts.map +1 -0
- package/dist/services/model-sequence.service.js +55 -0
- package/dist/services/model-sequence.service.js.map +1 -0
- package/dist/services/module-metadata.service.d.ts +1 -0
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +35 -1
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/mq-message.service.d.ts.map +1 -1
- package/dist/services/mq-message.service.js +3 -4
- package/dist/services/mq-message.service.js.map +1 -1
- package/dist/services/permission-metadata.service.d.ts +5 -5
- package/dist/services/permission-metadata.service.d.ts.map +1 -1
- package/dist/services/permission-metadata.service.js +6 -5
- package/dist/services/permission-metadata.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +2 -1
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
- package/dist/services/queues/publisher-factory.service.js +4 -0
- package/dist/services/queues/publisher-factory.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +2 -2
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/role-metadata.service.d.ts.map +1 -1
- package/dist/services/role-metadata.service.js +1 -0
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/scheduled-job.service.d.ts +6 -6
- package/dist/services/scheduled-job.service.d.ts.map +1 -1
- package/dist/services/scheduled-job.service.js +8 -8
- package/dist/services/scheduled-job.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +4 -0
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/security-rule.service.d.ts.map +1 -1
- package/dist/services/security-rule.service.js +1 -0
- package/dist/services/security-rule.service.js.map +1 -1
- package/dist/services/selection-providers/list-of-models-selection-provider.service.d.ts.map +1 -1
- package/dist/services/selection-providers/list-of-models-selection-provider.service.js +4 -0
- package/dist/services/selection-providers/list-of-models-selection-provider.service.js.map +1 -1
- package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.d.ts +2 -2
- package/dist/services/selection-providers/list-of-values-selection-providers.service.d.ts.map +1 -0
- package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.js +3 -3
- package/dist/services/selection-providers/list-of-values-selection-providers.service.js.map +1 -0
- package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts +20 -0
- package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts.map +1 -0
- package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js +87 -0
- package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js.map +1 -0
- package/dist/services/setting.service.d.ts +7 -5
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +28 -5
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/sms-template.service.d.ts +7 -7
- package/dist/services/sms-template.service.d.ts.map +1 -1
- package/dist/services/sms-template.service.js +8 -7
- package/dist/services/sms-template.service.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +10 -3
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +66 -12
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/solid-ts-morph.service.js +2 -2
- package/dist/services/solid-ts-morph.service.js.map +1 -1
- package/dist/services/user-activity-history.service.d.ts.map +1 -1
- package/dist/services/user-activity-history.service.js +1 -0
- package/dist/services/user-activity-history.service.js.map +1 -1
- package/dist/services/user-view-metadata.service.d.ts.map +1 -1
- package/dist/services/user-view-metadata.service.js +3 -2
- package/dist/services/user-view-metadata.service.js.map +1 -1
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +1 -0
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts +3 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +33 -5
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/solid-core-cli-db.module.d.ts.map +1 -1
- package/dist/solid-core-cli-db.module.js +5 -2
- package/dist/solid-core-cli-db.module.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +23 -1
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +3 -2
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +8 -10
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts +7 -4
- package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +60 -21
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts +4 -2
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.js +10 -8
- package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
- package/dist/subscribers/field-metadata.subscriber.d.ts.map +1 -1
- package/dist/subscribers/field-metadata.subscriber.js +0 -1
- package/dist/subscribers/field-metadata.subscriber.js.map +1 -1
- package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
- package/dist/subscribers/model-metadata.subscriber.js +3 -2
- package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
- package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts +3 -2
- package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts.map +1 -1
- package/dist/subscribers/soft-delete-aware-event.subscriber.js +6 -11
- package/dist/subscribers/soft-delete-aware-event.subscriber.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts +5 -0
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -0
- package/dist/transformers/typeorm/local-date-time-transformer.js +26 -0
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/grouping-enhancements.md +89 -0
- package/package.json +1 -1
- package/sql/default/mssql/proc_CleanupModelMetadata.sql +175 -0
- package/sql/default/mssql/proc_CleanupModuleMetadata.sql +78 -0
- package/sql/default/mssql/scratchpad.sql.txt +10 -0
- package/sql/default/postgres/proc_CleanupModelMetadata.sql +148 -0
- package/sql/default/postgres/proc_CleanupModuleMetadata.sql +50 -0
- package/sql/default/postgres/scratchpad.sql.txt +12 -0
- package/sql-server-changes.txt +88 -0
- package/src/commands/fixtures/fixtures-setup.command.ts +44 -0
- package/src/commands/fixtures/fixtures-tear-down.command.ts +45 -0
- package/src/commands/mcp.command.ts +215 -0
- package/src/commands/refresh-model.command.ts +39 -5
- package/src/commands/remove-fields.command.ts +1 -1
- package/src/commands/seed.command.ts +34 -15
- package/src/constants/error-messages.ts +7 -1
- package/src/controllers/authentication.controller.ts +1 -1
- package/src/controllers/email-template.controller.ts +1 -1
- package/src/controllers/field-metadata.controller.ts +7 -1
- package/src/controllers/media-storage-provider-metadata.controller.ts +1 -1
- package/src/controllers/model-metadata.controller.ts +1 -1
- package/src/controllers/model-sequence.controller.ts +93 -0
- package/src/controllers/module-metadata.controller.ts +1 -1
- package/src/controllers/otp-authentication.controller.ts +1 -1
- package/src/controllers/service.controller.ts +1 -1
- package/src/controllers/setting.controller.ts +33 -21
- package/src/controllers/sms-template.controller.ts +1 -1
- package/src/controllers/test-queue.controller.ts +1 -1
- package/src/controllers/test.controller.ts +1 -1
- package/src/dtos/basic-filters.dto.ts +6 -1
- package/src/dtos/basic-group-filters.dto.ts +23 -0
- package/src/dtos/create-ai-interaction.dto.ts +16 -9
- package/src/dtos/create-field-metadata.dto.ts +43 -13
- package/src/dtos/create-import-transaction.dto.ts +0 -4
- package/src/dtos/create-model-metadata.dto.ts +10 -0
- package/src/dtos/create-model-sequence.dto.ts +51 -0
- package/src/dtos/create-role-metadata.dto.ts +23 -4
- package/src/dtos/get-mcp-url.dto.ts +13 -0
- package/src/dtos/resolve-s3-url.dto.ts +31 -0
- package/src/dtos/update-ai-interaction.dto.ts +16 -9
- package/src/dtos/update-field-metadata.dto.ts +1 -2
- package/src/dtos/update-import-transaction.dto.ts +0 -4
- package/src/dtos/update-model-sequence.dto.ts +53 -0
- package/src/entities/action-metadata.entity.ts +4 -4
- package/src/entities/ai-interaction.entity.ts +16 -12
- package/src/entities/chatter-message-details.entity.ts +18 -18
- package/src/entities/chatter-message.entity.ts +2 -2
- package/src/entities/common.entity.ts +20 -11
- package/src/entities/dashboard-question-sql-dataset-config.entity.ts +2 -2
- package/src/entities/dashboard-question.entity.ts +3 -3
- package/src/entities/dashboard-variable.entity.ts +3 -3
- package/src/entities/dashboard.entity.ts +1 -1
- package/src/entities/email-template.entity.ts +4 -3
- package/src/entities/export-template.entity.ts +2 -2
- package/src/entities/export-transaction.entity.ts +2 -2
- package/src/entities/field-metadata.entity.ts +6 -3
- package/src/entities/import-transaction-error-log.entity.ts +2 -2
- package/src/entities/import-transaction.entity.ts +2 -5
- package/src/entities/legacy-common-with-id.entity.ts +11 -0
- package/src/entities/legacy-common.entity.ts +58 -0
- package/src/entities/list-of-values.entity.ts +2 -2
- package/src/entities/locale.entity.ts +1 -1
- package/src/entities/media.entity.ts +25 -25
- package/src/entities/menu-item-metadata.entity.ts +4 -4
- package/src/entities/model-metadata.entity.ts +9 -2
- package/src/entities/model-sequence.entity.ts +32 -0
- package/src/entities/mq-message-queue.entity.ts +1 -1
- package/src/entities/mq-message.entity.ts +34 -34
- package/src/entities/saved-filters.entity.ts +5 -5
- package/src/entities/scheduled-job.entity.ts +4 -4
- package/src/entities/security-rule.entity.ts +2 -2
- package/src/entities/setting.entity.ts +2 -2
- package/src/entities/sms-template.entity.ts +2 -2
- package/src/entities/user-activity-history.entity.ts +14 -14
- package/src/entities/user-view-metadata.entity.ts +2 -2
- package/src/entities/user.entity.ts +15 -15
- package/src/entities/view-metadata.entity.ts +3 -3
- package/src/helpers/date.helper.ts +31 -10
- package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +18 -5
- package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +9 -9
- package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +16 -8
- package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +9 -9
- package/src/helpers/model-metadata-helper.service.ts +67 -34
- package/src/helpers/module-metadata-helper.service.ts +18 -1
- package/src/helpers/module.helper.ts +37 -1
- package/src/helpers/schematic.service.ts +72 -46
- package/src/helpers/solid-registry.ts +28 -2
- package/src/helpers/typeorm-db-helper.ts +26 -0
- package/src/index.ts +7 -2
- package/src/interfaces.ts +3 -0
- package/src/jobs/computed-field-evaluation-subscriber.service.ts +15 -4
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +17 -21
- package/src/repository/media.repository.ts +3 -2
- package/src/repository/model-sequence.repository.ts +97 -0
- package/src/seeders/module-metadata-seeder.service.ts +176 -58
- package/src/seeders/seed-data/solid-core-metadata.json +555 -654
- package/src/seeders/system-fields-seeder.service.ts +39 -36
- package/src/services/action-metadata.service.ts +3 -2
- package/src/services/ai-interaction.service.ts +3 -2
- package/src/services/authentication.service.ts +46 -14
- package/src/services/chatter-message-details.service.ts +2 -1
- package/src/services/chatter-message.service.ts +10 -4
- package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +17 -12
- package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +86 -0
- package/src/services/crud-helper.service.ts +319 -53
- package/src/services/crud.service.ts +233 -34
- package/src/services/database/database-bootstrap.service.ts +91 -0
- package/src/services/email-template.service.ts +11 -13
- package/src/services/excel.service.ts +146 -3
- package/src/services/field-metadata.service.ts +322 -70
- package/src/services/file.service.ts +9 -0
- package/src/services/fixtures.service.ts +108 -0
- package/src/services/genai/ingest-metadata.service.ts +4 -3
- package/src/services/import-transaction-error-log.service.ts +2 -1
- package/src/services/import-transaction.service.ts +8 -4
- package/src/services/list-of-values.service.ts +4 -4
- package/src/services/locale.service.ts +2 -1
- package/src/services/mail/smtp-email.service.ts +1 -1
- package/src/services/media.service.ts +10 -11
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +22 -7
- package/src/services/mediaStorageProviders/file-storage-provider.ts +18 -13
- package/src/services/menu-item-metadata.service.ts +87 -52
- package/src/services/model-metadata.service.ts +68 -47
- package/src/services/model-sequence.service.ts +33 -0
- package/src/services/module-metadata.service.ts +49 -2
- package/src/services/mq-message.service.ts +16 -15
- package/src/services/permission-metadata.service.ts +8 -9
- package/src/services/queues/database-subscriber.service.ts +3 -1
- package/src/services/queues/publisher-factory.service.ts +2 -1
- package/src/services/queues/rabbitmq-subscriber.service.ts +4 -2
- package/src/services/role-metadata.service.ts +1 -0
- package/src/services/scheduled-job.service.ts +9 -9
- package/src/services/scheduled-jobs/scheduler.service.ts +5 -0
- package/src/services/security-rule.service.ts +1 -0
- package/src/services/selection-providers/list-of-models-selection-provider.service.ts +5 -2
- package/src/{providers → services/selection-providers}/list-of-values-selection-providers.service.ts +2 -2
- package/src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts +94 -0
- package/src/services/setting.service.ts +46 -16
- package/src/services/sms-template.service.ts +11 -13
- package/src/services/solid-introspect.service.ts +97 -10
- package/src/services/solid-ts-morph.service.ts +2 -2
- package/src/services/user-activity-history.service.ts +3 -2
- package/src/services/user-view-metadata.service.ts +4 -3
- package/src/services/user.service.ts +2 -1
- package/src/services/view-metadata.service.ts +52 -21
- package/src/solid-core-cli-db.module.ts +5 -4
- package/src/solid-core.module.ts +23 -1
- package/src/subscribers/audit.subscriber.ts +14 -9
- package/src/subscribers/computed-entity-field.subscriber.ts +71 -22
- package/src/subscribers/created-by-updated-by.subscriber.ts +14 -8
- package/src/subscribers/field-metadata.subscriber.ts +1 -1
- package/src/subscribers/model-metadata.subscriber.ts +4 -2
- package/src/subscribers/soft-delete-aware-event.subscriber.ts +12 -6
- package/src/transformers/typeorm/local-date-time-transformer.ts +30 -0
- package/dist/providers/list-of-values-selection-providers.service.d.ts.map +0 -1
- package/dist/providers/list-of-values-selection-providers.service.js.map +0 -1
- package/src/commands/ingest-rag-chunking-strategy-for.md +0 -224
- package/src/entities/user.entity.ts.bkp +0 -144
- package/src/services/docker exec -it mssql //" +0 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.service.js","sourceRoot":"","sources":["../../src/services/fixtures.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from \"@nestjs/common\";\nimport { SolidIntrospectService } from \"./solid-introspect.service\";\nimport { ModuleMetadataHelperService } from \"src/helpers/module-metadata-helper.service\";\nimport { classify } from \"@angular-devkit/core/src/utils/strings\";\n\ninterface ScenarioFixture {\n name: string;\n models: {\n singularName: string;\n data: any;\n }[];\n}\n\n// This service can contain common logic for fixtures setup and tear down\n@Injectable()\nexport class FixturesService {\n private readonly logger = new Logger(this.constructor.name);\n\n constructor(\n private readonly introspectService: SolidIntrospectService,\n private readonly moduleMetadataHelper: ModuleMetadataHelperService,\n ) { }\n\n async setupFixtures(moduleName: string, scenarioName: string) {\n const scenarioFixture = await this.loadScenario(moduleName, scenarioName);\n if (!scenarioFixture?.models || scenarioFixture.models.length === 0) {\n this.logger.warn(`No models found to setup for scenario: ${scenarioName} in module: ${moduleName}`);\n return;\n }\n\n // For each model in the fixtures, use introspectService to get model service\n for (const modelFixture of scenarioFixture.models) {\n const modelServiceInstance = await this.loadModelService(modelFixture.singularName);\n try {\n // Create the model instance in the database\n const createdInstance = await modelServiceInstance.create(modelFixture.data);\n this.logger.log(`Successfully created fixture for model: ${modelFixture.singularName} with ID: ${createdInstance.id}`);\n } catch (error) {\n this.logger.error(`Error creating fixture for model: ${modelFixture.singularName} - ${error.message}`);\n }\n }\n }\n\n async tearDownFixtures(moduleName: string, scenarioName: string) {\n // Call delete on the modelService to remove the created fixtures, in reverse order\n const scenarioFixture = await this.loadScenario(moduleName, scenarioName);\n if (!scenarioFixture?.models || scenarioFixture.models.length === 0) {\n this.logger.warn(`No models found to tear down for scenario: ${scenarioName} in module: ${moduleName}`);\n return;\n }\n\n // For each model in reverse order\n for (const modelFixture of scenarioFixture.models.reverse()) {\n const modelServiceInstance = await this.loadModelService(modelFixture.singularName);\n\n // Get the user key field for the model to identify the created instances\n try {\n // Assuming we have some way to identify the created instances, e.g., by a unique field in data\n const deleteCriteria = modelFixture.data; // This should be adjusted based on actual criteria\n await modelServiceInstance.delete(deleteCriteria);\n this.logger.log(`Successfully deleted fixture for model: ${modelFixture.singularName}`);\n } catch (error) {\n this.logger.error(`Error deleting fixture for model: ${modelFixture.singularName} - ${error.message}`);\n }\n }\n\n }\n\n private async loadScenario(moduleName: string, scenarioName: string): Promise<ScenarioFixture | undefined> {\n // Read the module metadata file based on module name\n const moduleMetadataConfiguration = await this.moduleMetadataHelper.getModuleMetadataConfiguration(\n await this.moduleMetadataHelper.getModuleMetadataFilePath(moduleName)\n );\n if (!moduleMetadataConfiguration) {\n this.logger.error(`No module metadata configuration found for module: ${moduleName}`);\n return;\n }\n this.logger.debug(`Module Metadata Configuration loaded for module: ${moduleName}`);\n\n // Read the fixtures json from above file\n const allFixtures = moduleMetadataConfiguration?.fixtures;\n this.logger.debug(`All Fixtures: ${JSON.stringify(allFixtures)}`);\n // Check if scenarios exists\n if (!allFixtures?.scenarios.length || allFixtures?.scenarios.length === 0) {\n this.logger.error(`No scenarios defined in the module metadata configuration for module: ${moduleName}`);\n return;\n }\n\n // Find the fixtures for the given scenario\n const scenarioFixture = allFixtures.scenarios.find((scenario: ScenarioFixture) => scenario.name === scenarioName);\n if (!scenarioFixture) {\n this.logger.error(`Scenario: ${scenarioName} not found in module metadata configuration for module: ${moduleName}`);\n return;\n }\n this.logger.log(`Scenario: ${scenarioName} found with fixtures to setup.`);\n return scenarioFixture;\n }\n\n private async loadModelService(singularName: string): Promise<any> {\n const modelServiceProvider = this.introspectService.getProvider(`${classify(singularName)}Service`);\n if (!modelServiceProvider) {\n this.logger.error(`Model service provider not found for model: ${singularName}`);\n return null;\n }\n this.logger.debug(`Model service provider found for model: ${singularName}`);\n return modelServiceProvider.instance;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-metadata.service.d.ts","sourceRoot":"","sources":["../../../src/services/genai/ingest-metadata.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAKxD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAChC,CAAC;AAEF,qBACa,qBAAqB;IAK1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,SAAS,CAAY;gBAGR,UAAU,EAAE,gBAAgB;IAajD,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAMZ,MAAM;
|
|
1
|
+
{"version":3,"file":"ingest-metadata.service.d.ts","sourceRoot":"","sources":["../../../src/services/genai/ingest-metadata.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAKxD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAChC,CAAC;AAEF,qBACa,qBAAqB;IAK1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,SAAS,CAAY;gBAGR,UAAU,EAAE,gBAAgB;IAajD,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAMZ,MAAM;YAwFE,6BAA6B;YAmD7B,gDAAgD;YAqDhD,6BAA6B;YAuG7B,4BAA4B;IAqI1C,OAAO,CAAC,0BAA0B;YA+NpB,4BAA4B;CA4D7C"}
|
|
@@ -71,7 +71,7 @@ let IngestMetadataService = IngestMetadataService_1 = class IngestMetadataServic
|
|
|
71
71
|
async ingest() {
|
|
72
72
|
this.ragClient = await this.r2rService.getClient();
|
|
73
73
|
this.logger.debug(`getting dynamics modules`);
|
|
74
|
-
const enabledModules = (0, module_helper_1.
|
|
74
|
+
const enabledModules = (0, module_helper_1.getDynamicModuleNamesBasedOnMetadata)();
|
|
75
75
|
this.logger.log(`ingesting metadata`);
|
|
76
76
|
for (let i = 0; i < enabledModules.length; i++) {
|
|
77
77
|
const enabledModule = enabledModules[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-metadata.service.js","sourceRoot":"","sources":["../../../src/services/genai/ingest-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport * as crypto from 'crypto';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport { getDynamicModuleNames } from 'src/helpers/module.helper';\nimport { CreateModuleMetadataDto } from 'src/dtos/create-module-metadata.dto';\nimport { R2RHelperService } from './r2r-helper.service';\nimport { CollectionResponse, r2rClient } from 'r2r-js';\nimport { CreateModelMetadataDto } from 'src/dtos/create-model-metadata.dto';\nimport { CreateFieldMetadataDto } from 'src/dtos/create-field-metadata.dto';\n\nexport type FieldIngestionInfo = {\n fieldName: string;\n fieldChunkId?: string;\n fieldHash?: string;\n};\n\nexport type ModelIngestionInfo = {\n modelName: string;\n modelChunkId?: string;\n modelHash?: string;\n fields: FieldIngestionInfo[];\n};\n\nexport type ModuleRAGIngestionInfo = {\n moduleName?: string;\n collectionId?: string;\n\n // Full json document is also uploaded so we track references...\n documentId?: string;\n documentHash?: string;\n\n // module references\n moduleChunkId?: string;\n // track a hash of module metadata to skip unchanged\n moduleHash?: string;\n\n // model references...\n models: ModelIngestionInfo[];\n};\n\n@Injectable()\nexport class IngestMetadataService {\n private readonly logger = new Logger(IngestMetadataService.name);\n private ragClient: r2rClient;\n\n constructor(\n private readonly r2rService: R2RHelperService,\n ) { }\n\n // Stable stringify so hashes/ids don't flap\n // private stableStringify(obj: any): string {\n // return JSON.stringify(obj, Object.keys(obj).sort(), 2);\n // }\n // private sha256(input: string): string {\n // return crypto.createHash('sha256').update(input).digest('hex');\n // }\n // private hashSchema(obj: any): string {\n // return this.sha256(this.stableStringify(obj));\n // }\n private _sha256OfJson(obj: any): string {\n const s = JSON.stringify(obj);\n return crypto.createHash('sha256').update(s).digest('hex');\n }\n // // Small natural-language one-liners for relations\n // private relationSig(model: any): string[] {\n // const rels: string[] = [];\n // for (const f of model.fields ?? []) {\n // if (f.relation?.targetModel) {\n // rels.push(`${model.singularName}.${f.name} -> ${f.relation.targetModel}(${f.relation.targetField ?? 'id'})`);\n // }\n // }\n // return rels;\n // }\n\n private _oneLineBool(b?: boolean): 'yes' | 'no' {\n return b ? 'yes' : 'no';\n }\n\n private _shortList(arr?: string[] | null, max = 10): string {\n if (!Array.isArray(arr) || arr.length === 0) return 'none';\n const a = arr.slice(0, max);\n return `${a.join(', ')}${arr.length > max ? ', …' : ''}`;\n }\n\n async ingest() {\n // Create a new ragClient...\n this.ragClient = await this.r2rService.getClient();\n\n // const allModuleMetadataJson = [];\n this.logger.debug(`getting dynamics modules`);\n const enabledModules = getDynamicModuleNames();\n this.logger.log(`ingesting metadata`);\n\n for (let i = 0; i < enabledModules.length; i++) {\n const enabledModule = enabledModules[i];\n const fileName = `${enabledModule}-metadata.json`;\n const enabledModuleSeedFile = `module-metadata/${enabledModule}/${fileName}`;\n const fullPath = path.join(process.cwd(), enabledModuleSeedFile);\n const overallMetadata: any = JSON.parse(fs.readFileSync(fullPath, 'utf-8').toString());\n\n const moduleMetadata: CreateModuleMetadataDto = overallMetadata.moduleMetadata;\n\n // Manage all the ingestion info file paths...\n const enabledModulIngestionInfoFile = `module-metadata/${enabledModule}/genai/${enabledModule}-ingested-info.json`;\n const enabledModulIngestionInfoFullPath = path.join(process.cwd(), enabledModulIngestionInfoFile);\n const ingestionInfo: ModuleRAGIngestionInfo = fs.existsSync(enabledModulIngestionInfoFullPath) ? JSON.parse(fs.readFileSync(enabledModulIngestionInfoFullPath, 'utf-8').toString()) : {};\n const enabledModulIngestionInfoDir = path.dirname(enabledModulIngestionInfoFullPath);\n if (!fs.existsSync(enabledModulIngestionInfoDir)) {\n fs.mkdirSync(enabledModulIngestionInfoDir, { recursive: true });\n }\n\n ingestionInfo.moduleName = enabledModule\n\n // Process module metadata first. \n this.logger.log(`[Start] Processing module metadata for ${moduleMetadata.name}`)\n\n // Create or use an existing collection...\n const collectionId = await this.resolveRagCollectionForModule(ingestionInfo, enabledModule)\n ingestionInfo.collectionId = collectionId;\n\n // Delete and re-insert a document representing the full json...\n // await this.deleteInsertRagDocumentForModuleMetadataJsonFile(ingestionInfo, fullPath, fileName)\n\n // Delete all metadata chunks. \n // const collectionName = `${enabledModule}-rag-collection`;\n // const deleteResult = await this.ragClient.documents.deleteByFilter({\n // filters: {\n // // AND semantics across fields:\n // \"$and\": [\n // { 'metadata.kind': { $eq: 'solidx-metadata' } },\n // { 'metadata.collectionName': { $eq: collectionName } },\n // { 'title': { $like: '%Ingested Chunks%' } },\n // ]\n // },\n // });\n // this.logger.log(`Deleted existing documents for collectionName: ${collectionName}. Got response:`, deleteResult);\n\n // Delete and re-insert a chunk representing the module.\n await this.deleteInsertRagChunkForModule(ingestionInfo, moduleMetadata);\n\n // Delete and re-insert chunks representing each model.\n for (const model of moduleMetadata.models) {\n await this.deleteInsertRagChunkForModel(ingestionInfo, enabledModule, model);\n\n // Disabling this for now...\n // for (const field of model.fields) {\n // await this.deleteInsertRagChunkForField(ingestionInfo, enabledModule, model.singularName, field);\n // }\n }\n\n // TODO: Delete and re-insert chunks representing roles\n\n // TODO: Delete and re-insert chunks representing menus \n\n // TODO: Delete and re-insert chunks representing actions\n\n // TODO: Delete and re-insert chunks representing list views \n\n // TODO: Delete and re-insert chunks representing kanban views \n\n // TODO: Delete and re-insert chunks representing form views\n\n // TODO: Delete and re-insert chunks representing security rules\n\n // TODO: Delete and re-insert chunks representing scheduled jobs\n\n // Save ingestion info to disk...\n fs.writeFileSync(enabledModulIngestionInfoFullPath, JSON.stringify({ ...ingestionInfo }, null, 2), 'utf8');\n }\n }\n\n private async resolveRagCollectionForModule(ingestionInfo: ModuleRAGIngestionInfo, moduleName: string): Promise<string> {\n this.logger.debug(`Resolving RAG collection for module: ${moduleName}`);\n\n const collectionName = `${moduleName}-rag-collection`;\n\n // delete and recreate \n // if (alwaysRecreate === true) {\n const existingCollection = await this.ragClient.collections.retrieveByName({\n name: collectionName\n });\n\n if (existingCollection) {\n try {\n await this.ragClient.collections.delete({ id: existingCollection.results.id });\n } catch (e) {\n this.logger.warn(`[Warn] Failed deleteByFilter for collection': ${String(e)}`);\n }\n }\n // }\n\n // let existingCollection: CollectionResponse = null;\n // if (ingestionInfo.collectionId) {\n // // See if collection already exists... \n // const r = await this.ragClient.collections.list({\n // ids: [\n // ingestionInfo.collectionId\n // ]\n // });\n\n // if (r) {\n // if (r.results.length === 1) {\n // existingCollection = r.results[0];\n // }\n // if (r.results.length > 1) {\n // // TODO: do something that will print a meaningful error on the console...\n // }\n // }\n // }\n\n // if (!existingCollection) {\n const r = await this.ragClient.collections.create({\n name: collectionName,\n description: `Collection created to group all documents, chunks related to module: ${moduleName}`\n });\n\n // TODO: for some reason if we are unable to create a collection then fail with a visible error message in the console...\n return r.results.id;\n // }\n // return existingCollection.id;\n }\n\n private async deleteInsertRagDocumentForModuleMetadataJsonFile(ingestionInfo: ModuleRAGIngestionInfo, fullPath: string, fileName: string): Promise<void> {\n this.logger.debug(`Ingesting file: ${fullPath}`);\n\n // 1) Compute hash of the entire JSON string (as-is)\n const jsonStr = fs.readFileSync(fullPath, 'utf-8');\n const contentHash = this._sha256OfJson(JSON.parse(jsonStr));\n\n // 2) Short-circuit if unchanged and we still have a documentId\n if (ingestionInfo.documentHash === contentHash && ingestionInfo.documentId) {\n this.logger.log(`[Skip] Unchanged: ${fileName} (hash=${contentHash.slice(0, 8)}…)`);\n return;\n // return ingestionInfo.documentId;\n }\n\n // 3) Delete the previous doc if present\n if (ingestionInfo.documentId) {\n try {\n await this.ragClient.documents.delete({ id: ingestionInfo.documentId });\n } catch (e) {\n this.logger.warn(\n `[Warn] Failed deleting prior document ${ingestionInfo.documentId}: ${String(e)}`\n );\n }\n }\n\n // 4) Create a fresh document; attach the hash into metadata for traceability\n const ingestResult = await this.ragClient.documents.create({\n file: {\n path: fullPath,\n name: fileName\n },\n collectionIds: [ingestionInfo.collectionId],\n metadata: {\n contentHash,\n fileName\n },\n });\n // console.log(\"file ingest result:\", JSON.stringify(ingestResult, null, 2));\n\n const newId = ingestResult?.results?.documentId;\n if (!newId) {\n throw new Error(`R2R did not return a documentId for ${fileName}`);\n }\n\n // 5) Persist identifiers + hash on our side\n ingestionInfo.documentId = newId;\n ingestionInfo.documentHash = contentHash;\n\n this.logger.log(`[OK] Ingested ${fileName} → id=${newId}, hash=${contentHash.slice(0, 8)}…`);\n // return newId;\n\n }\n\n private async deleteInsertRagChunkForModule(ingestionInfo: ModuleRAGIngestionInfo, moduleMetadata: CreateModuleMetadataDto): Promise<void> {\n const moduleName: string = moduleMetadata?.name;\n\n // Hash the meaningful parts of the module to detect changes and skip re-ingest.\n const schemaHash = this._sha256OfJson({\n name: moduleMetadata?.name ?? null,\n description: moduleMetadata?.description ?? null,\n\n // Keep model names + brief shape so module-level hash changes when models change.\n models: (moduleMetadata?.models ?? []).map((m: any) => ({\n singularName: m?.singularName ?? null,\n description: m?.description ?? null,\n\n // Include field names to detect field-level changes at module granularity - maybe remove this later?\n // fields: Array.isArray(m?.fields) ? m.fields.map((f: any) => f?.name ?? null) : [],\n })),\n });\n\n // Skip unchanged module\n if (ingestionInfo.moduleHash === schemaHash && ingestionInfo.moduleChunkId) {\n this.logger.log(`[Skip] Module unchanged: ${moduleName}`);\n return;\n // return ingestionInfo.moduleChunkId;\n }\n\n const models: any[] = moduleMetadata?.models ?? [];\n const modelLines = models.map((m) => {\n const name = m?.singularName;\n const desc = m?.description ? `: ${m.description}` : '';\n return `- ${name}${desc}`;\n });\n\n const text = `SolidX Module: ${moduleName}\nPurpose: ${moduleMetadata?.description ?? 'N/A'}\n\nModels (${models.length}):\n${modelLines.join('\\n')}\n\nUsage: Use this chunk to choose the correct model/field chunks for code generation or metadata edits.`;\n\n // metadata has to be concise and queryable\n const metadata = {\n collectionName: `${moduleName}-rag-collection`,\n kind: 'solidx-metadata',\n type: 'module',\n moduleName,\n modelCount: models.length,\n schemaHash,\n models: models.map((m) => m?.singularName).filter(Boolean),\n };\n\n // Delete previous chunk if we have one\n // if (ingestionInfo.moduleChunkId) {\n // try {\n // await this.ragClient.documents.delete({ id: ingestionInfo.moduleChunkId });\n // } catch (e) {\n // this.logger.warn(`[Warn] Failed deleting old module chunk (${ingestionInfo.moduleChunkId}): ${String(e)}`);\n // }\n // }\n\n // We changed the approach to delete and re-create using metadata.\n // delete any existing module records by metadata (idempotent)\n try {\n const deleteResult = await this.ragClient.documents.deleteByFilter({\n filters: {\n // AND semantics across fields:\n \"$and\": [\n { 'metadata.kind': { $eq: 'solidx-metadata' } },\n { 'metadata.type': { $eq: 'module' } },\n { 'metadata.moduleName': { $eq: moduleName } },\n // (optional but nice to constrain tightly if you always set it)\n { 'metadata.collectionName': { $eq: `${moduleName}-rag-collection` } },\n ]\n },\n });\n\n this.logger.log(`Deleted existing module document for moduleName: ${moduleName}. Got response:`, deleteResult);\n\n } catch (e) {\n this.logger.warn(`[Warn] Failed deleteByFilter for module '${moduleName}': ${String(e)}`);\n // Non-fatal: we can still proceed to create; caller’s auth will limit scope anyway\n }\n\n const r = await this.ragClient.documents.create({\n chunks: [text],\n // raw_text: text,\n metadata: metadata,\n collectionIds: [ingestionInfo.collectionId],\n });\n\n const newId = r?.results?.documentId;\n if (!newId) {\n throw new Error(`R2R did not return a documentId while creating module chunk for module name ${moduleName}`);\n }\n\n // Update ingestion info for persistence by the caller\n ingestionInfo.moduleChunkId = r.results?.documentId;\n ingestionInfo.moduleHash = schemaHash;\n\n this.logger.log(`[OK] Ingested module ${moduleName} → id=${newId}, hash=${schemaHash.slice(0, 8)}…`);\n\n }\n\n private async deleteInsertRagChunkForModel(ingestionInfo: ModuleRAGIngestionInfo, moduleName: string, model: CreateModelMetadataDto): Promise<void> {\n const modelName: string = model?.singularName;\n\n // 1) Hash full JSON (as-is) to detect changes and skip re-ingest\n const schemaHash = this._sha256OfJson(model);\n\n // Ensure ingestionInfo.models[] has an entry for this model\n const modelsArr = ingestionInfo.models ?? (ingestionInfo.models = []);\n let modelEntry = modelsArr.find(m => m.modelName === modelName);\n if (!modelEntry) {\n modelEntry = { modelName, fields: [] };\n modelsArr.push(modelEntry);\n }\n\n // 2) Short-circuit if unchanged\n if (modelEntry.modelHash === schemaHash && modelEntry.modelChunkId) {\n this.logger.log(`[Skip] Model unchanged: ${moduleName}.${modelName}`);\n return;\n // return modelEntry.modelChunkId;\n }\n\n // 3) Build retrieval-friendly text (concise)\n const fields: CreateFieldMetadataDto[] = Array.isArray(model?.fields) ? model.fields : [];\n const userkey = fields.find((f: CreateFieldMetadataDto) => f?.isUserKey)?.name ?? 'id';\n const uniques = fields.filter((f: CreateFieldMetadataDto) => f?.unique).map((f: any) => f.name);\n const required = fields.filter((f: CreateFieldMetadataDto) => f?.required).map((f: any) => f.name);\n const rels = fields\n .filter((f: CreateFieldMetadataDto) => f.type === 'relation')\n .map((f: CreateFieldMetadataDto) => `${modelName}.${f.name} -> ${f.relationCoModelSingularName}.${f.relationCoModelColumnName ?? 'id'}`);\n\n const fieldSummaryLines = fields.slice(0, 30).map((f: CreateFieldMetadataDto) => {\n const bits = [\n `${f.name}:${f.type}`,\n f.required ? 'req' : '',\n f.unique ? 'unique' : '',\n f.isUserKey ? 'userkey' : '',\n f.relationCoModelSingularName ? `rel->${f.relationCoModelSingularName}` : '',\n ].filter(Boolean).join('|');\n return `- ${bits}`;\n });\n\n const text =\n `SolidX Model: ${modelName}\nModule: ${moduleName}\nPurpose: ${model?.description ?? 'N/A'}\n\nSignature:\n- Primary: ${userkey}\n- Unique: ${uniques.length ? uniques.join(', ') : 'none'}\n- Required (${required.length}): ${required.slice(0, 12).join(', ')}${required.length > 12 ? '…' : ''}\n\nRelations (${rels.length}):\n${rels.length ? `- ${rels.join('\\n- ')}` : 'None'}\n\nFields (${fields.length}) [name:type|flags]:\n${fieldSummaryLines.join('\\n')}\n\nUsage: Use this chunk to generate DTOs, subscribers, custom service methods, and CRUD handlers for ${modelName}.\n\nFull model metadata json: \n${JSON.stringify(model)}\n\n`;\n\n // 4) Metadata (concise & queryable)\n const metadata = {\n collectionName: `${moduleName}-rag-collection`,\n kind: 'solidx-metadata',\n type: 'model',\n moduleName,\n modelName,\n fieldCount: fields.length,\n requiredCount: required.length,\n relationCount: rels.length,\n userkey: userkey,\n uniqueFields: uniques,\n hasTimestamps: !!fields.find((f: CreateFieldMetadataDto) => ['time', 'date', 'datetime'].includes(f.type)),\n schemaHash,\n };\n\n // 5) Delete previous chunk if present\n // if (modelEntry.modelChunkId) {\n // try {\n // await this.ragClient.documents.delete({ id: modelEntry.modelChunkId });\n // } catch (e) {\n // this.logger.warn(`[Warn] Failed deleting old model chunk (${modelEntry.modelChunkId}): ${String(e)}`);\n // }\n // }\n\n // We changed the approach to delete and re-create using metadata.\n // delete any existing module records by metadata (idempotent)\n try {\n const deleteResult = await this.ragClient.documents.deleteByFilter({\n filters: {\n // AND semantics across fields:\n \"$and\": [\n { 'metadata.kind': { $eq: 'solidx-metadata' } },\n { 'metadata.type': { $eq: 'model' } },\n { 'metadata.moduleName': { $eq: moduleName } },\n { 'metadata.modelName': { $eq: modelName } },\n // (optional but nice to constrain tightly if you always set it)\n { 'metadata.collectionName': { $eq: `${moduleName}-rag-collection` } },\n ]\n },\n });\n\n this.logger.log(`Deleted existing model document for modelName: ${modelName}. Got response:`, deleteResult);\n\n } catch (e) {\n this.logger.warn(`[Warn] Failed deleteByFilter for module '${moduleName}': ${String(e)}`);\n // Non-fatal: we can still proceed to create; caller’s auth will limit scope anyway\n }\n\n // 6) Create new document (R2R auto-generates the ID)\n const r = await this.ragClient.documents.create({\n chunks: [text],\n metadata,\n collectionIds: [ingestionInfo.collectionId],\n });\n\n const newId = r?.results?.documentId;\n if (!newId) {\n throw new Error(`R2R did not return a documentId while creating model chunk for ${moduleName}.${modelName}`);\n }\n\n // 7) Update ingestionInfo for persistence\n modelEntry.modelChunkId = newId;\n modelEntry.modelHash = schemaHash;\n\n this.logger.log(`[OK] Ingested model ${moduleName}.${modelName} → id=${newId}, hash=${schemaHash.slice(0, 8)}…`);\n // return newId;\n }\n\n private _buildFieldTextAndMetadata(moduleName: string, modelName: string, f: CreateFieldMetadataDto) {\n // Identity\n const name = f?.name;\n const displayName = f?.displayName ?? name;\n const description = f?.description ?? 'N/A';\n\n // Types\n const type = f?.type;\n const ormType = f?.ormType ?? null;\n\n // Constraints / validation\n const required = !!f?.required;\n const unique = !!f?.unique;\n const index = !!f?.index;\n const length = f?.length ?? null;\n const min = f?.min ?? null;\n const max = f?.max ?? null;\n const defaultValue = f?.defaultValue ?? null;\n const regex = f?.regexPattern ?? null;\n const regexErr = f?.regexPatternNotMatchingErrorMsg ?? null;\n\n // Relation\n const relationType = f?.relationType ?? null; // e.g., many-to-one, many-to-many, one-to-many\n const relModule = f?.relationModelModuleName ?? null;\n const relModel = f?.relationCoModelSingularName ?? null;\n const relField = f?.relationCoModelFieldName ?? 'id';\n // const relOwner = f?.isRelationManyToManyOwner ?? null;\n // const relJoinTable = f?.relationJoinTableName ?? null;\n // const relCreateInverse = !!f?.relationCreateInverse;\n const relCascade = f?.relationCascade ?? null;\n const relFixedFilter = f?.relationFieldFixedFilter ?? null;\n\n // Selection (dropdowns)\n const selectionDynProvider = f?.selectionDynamicProvider ?? null;\n const selectionDynCtxt = f?.selectionDynamicProviderCtxt ?? null;\n const selectionStatic = Array.isArray(f?.selectionStaticValues) ? f.selectionStaticValues : null;\n const selectionValueType = f?.selectionValueType ?? null;\n const isMultiSelect = !!f?.isMultiSelect;\n\n // Media (uploads)\n const mediaTypes = Array.isArray(f?.mediaTypes) ? f.mediaTypes : null;\n const mediaMaxSizeKb = f?.mediaMaxSizeKb ?? null;\n const mediaStorageProvider = f?.mediaStorageProviderUserKey ?? null; // likely object/id in your JSON\n\n // Computed fields\n const computedProvider = f?.computedFieldValueProvider ?? null;\n const computedProviderCtxt = f?.computedFieldValueProviderCtxt ?? null;\n const computedValueType = f?.computedFieldValueType ?? null;\n const computedTriggerCfg = f?.computedFieldTriggerConfig ?? null;\n\n // Security / privacy / audit\n // const encrypt = !!f?.encrypt;\n // const encryptionType = f?.encryptionType ?? null;\n // const decryptWhen = f?.decryptWhen ?? null;\n const isPrivate = !!f?.private;\n const enableAuditTracking = !!f?.enableAuditTracking;\n\n // Keys / system flags / mapping\n const isUserKey = !!f?.isUserKey;\n const isSystem = !!f?.isSystem;\n const isMarkedForRemoval = !!f?.isMarkedForRemoval;\n const columnName = f?.columnName ?? null;\n const relCoModelColumn = f?.relationCoModelColumnName ?? null;\n const uuid = f?.uuid ?? null;\n\n const relationSummary = (() => {\n if (!relationType || !relModel) return 'none';\n const parts = [\n `type=${relationType}`,\n relModule ? `module=${relModule}` : null,\n `model=${relModel}`,\n relField ? `field=${relField}` : null,\n // relOwner !== null ? `m2mOwner=${relOwner}` : null,\n // relCreateInverse ? 'createInverse=yes' : null,\n relCascade ? `cascade=${relCascade}` : null,\n // relJoinTable ? `joinTable=${relJoinTable}` : null,\n relFixedFilter ? `fixedFilter=${relFixedFilter}` : null,\n ].filter(Boolean);\n return parts.join(', ');\n })();\n\n const selectionSummary = (() => {\n const parts: string[] = [];\n if (selectionDynProvider) parts.push(`dynamicProvider=${selectionDynProvider}`);\n if (selectionDynCtxt) parts.push(`dynamicCtxt=${selectionDynCtxt}`);\n if (selectionStatic?.length) parts.push(`static=[${this._shortList(selectionStatic, 12)}]`);\n if (selectionValueType) parts.push(`valueType=${selectionValueType}`);\n parts.push(`multiSelect=${this._oneLineBool(isMultiSelect)}`);\n return parts.length ? parts.join(', ') : 'none';\n })();\n\n const mediaSummary = (() => {\n const parts: string[] = [];\n if (mediaTypes?.length) parts.push(`types=[${this._shortList(mediaTypes, 12)}]`);\n if (mediaMaxSizeKb) parts.push(`maxSizeKb=${mediaMaxSizeKb}`);\n if (mediaStorageProvider) parts.push(`storageProvider=${typeof mediaStorageProvider === 'string' ? mediaStorageProvider : 'set'}`);\n return parts.length ? parts.join(', ') : 'none';\n })();\n\n const computedSummary = (() => {\n const parts: string[] = [];\n if (computedProvider) parts.push(`provider=${computedProvider}`);\n if (computedProviderCtxt) parts.push(`providerCtxt=${computedProviderCtxt}`);\n if (computedValueType) parts.push(`valueType=${computedValueType}`);\n if (computedTriggerCfg?.length) parts.push(`triggers=${computedTriggerCfg.length}`);\n return parts.length ? parts.join(', ') : 'none';\n })();\n\n const securitySummary = [\n // `encrypt=${this.oneLineBool(encrypt)}`,\n // encryptionType ? `encType=${encryptionType}` : null,\n // decryptWhen ? `decryptWhen=${decryptWhen}` : null,\n `private=${this._oneLineBool(isPrivate)}`,\n `auditTracking=${this._oneLineBool(enableAuditTracking)}`\n ].filter(Boolean).join(', ');\n\n const constraintSummary = [\n `required=${this._oneLineBool(required)}`,\n `unique=${this._oneLineBool(unique)}`,\n `index=${this._oneLineBool(index)}`,\n length !== null ? `length=${length}` : null,\n min !== null ? `min=${min}` : null,\n max !== null ? `max=${max}` : null,\n defaultValue !== null ? `default=${defaultValue}` : null,\n regex ? `regex=${regex}${regexErr ? ` (${regexErr})` : ''}` : null\n ].filter(Boolean).join(', ');\n\n const mappingSummary = [\n columnName ? `column=${columnName}` : null,\n relCoModelColumn ? `relColumn=${relCoModelColumn}` : null,\n uuid ? `uuid=${uuid}` : null,\n `userKey=${this._oneLineBool(isUserKey)}`,\n `system=${this._oneLineBool(isSystem)}`,\n `markedForRemoval=${this._oneLineBool(isMarkedForRemoval)}`\n ].filter(Boolean).join(', ');\n\n const text = [\n `SolidX Field: ${name} (${displayName})`,\n `Model: ${modelName}`,\n `Module: ${moduleName}`,\n ``,\n `Type: ${type}${ormType ? ` (orm=${ormType})` : ''}`,\n `Description: ${description}`,\n ``,\n `Constraints: ${constraintSummary || 'none'}`,\n `Relation: ${relationSummary}`,\n `Selection: ${selectionSummary}`,\n `Media: ${mediaSummary}`,\n `Computed: ${computedSummary}`,\n `Security/Privacy/Audit: ${securitySummary}`,\n `Mapping/Flags: ${mappingSummary || 'none'}`,\n ``,\n `Usage: Use this chunk to generate exact field contracts (DTO, form control, DB column), `,\n `validation rules, relation wiring, and UI widgets (selection/media/computed).`,\n ].join('\\n');\n\n const metadata = {\n kind: 'solidx-metadata',\n type: 'field',\n moduleName,\n modelName,\n fieldName: name,\n displayName,\n description,\n dataType: type,\n ormType,\n required,\n unique,\n index,\n defaultValue,\n length,\n min,\n max,\n regexPattern: regex,\n regexPatternNotMatchingErrorMsg: regexErr,\n\n // relation\n relationType,\n relationModelModuleName: relModule,\n relationCoModelSingularName: relModel,\n relationCoModelFieldName: relField,\n // isRelationManyToManyOwner: relOwner,\n // relationJoinTableName: relJoinTable,\n // relationCreateInverse: relCreateInverse,\n relationCascade: relCascade,\n relationFieldFixedFilter: relFixedFilter,\n\n // selection\n selectionDynProvider,\n selectionDynCtxt,\n selectionStaticValues: selectionStatic,\n selectionValueType,\n isMultiSelect,\n\n // media\n mediaTypes,\n mediaMaxSizeKb,\n mediaStorageProvider: mediaStorageProvider ? (typeof mediaStorageProvider === 'string' ? mediaStorageProvider : 'set') : null,\n\n // computed\n computedFieldValueProvider: computedProvider,\n computedFieldValueProviderCtxt: computedProviderCtxt,\n computedFieldValueType: computedValueType,\n computedFieldTriggerConfigCount: Array.isArray(computedTriggerCfg) ? computedTriggerCfg.length : 0,\n\n // security/privacy/audit\n // encrypt,\n // encryptionType,\n // decryptWhen,\n private: isPrivate,\n enableAuditTracking,\n\n // mapping/flags\n columnName,\n relationCoModelColumnName: relCoModelColumn,\n isUserKey,\n isSystem,\n isMarkedForRemoval,\n };\n\n return { text, metadata };\n }\n\n private async deleteInsertRagChunkForField(ingestionInfo: ModuleRAGIngestionInfo, moduleName: string, modelName: string, field: CreateFieldMetadataDto,): Promise<string> {\n const fieldName: string = field?.name ?? 'unknown_field';\n\n // 1) Full JSON hash (as-is)\n const schemaHash = this._sha256OfJson(field);\n\n // 2) Ensure ingestionInfo entry for the model & field\n const modelsArr = ingestionInfo.models ?? (ingestionInfo.models = []);\n let modelEntry = modelsArr.find(m => m.modelName === modelName);\n if (!modelEntry) {\n modelEntry = { modelName, fields: [] };\n modelsArr.push(modelEntry);\n }\n const fieldsArr = modelEntry.fields ?? (modelEntry.fields = []);\n let fieldEntry = fieldsArr.find(f => f.fieldName === fieldName);\n if (!fieldEntry) {\n fieldEntry = { fieldName };\n fieldsArr.push(fieldEntry);\n }\n\n // 3) Skip if unchanged\n if (fieldEntry.fieldHash === schemaHash && fieldEntry.fieldChunkId) {\n this.logger.log(`[Skip] Field unchanged: ${moduleName}.${modelName}.${fieldName}`);\n return fieldEntry.fieldChunkId;\n }\n\n // 4) Build text + metadata tailored to FieldMetadata\n const { text, metadata } = this._buildFieldTextAndMetadata(moduleName, modelName, field);\n\n // also keep the hash in metadata for audit/debug\n (metadata as any).schemaHash = schemaHash;\n\n // 5) Delete previous chunk if present\n if (fieldEntry.fieldChunkId) {\n try {\n await this.ragClient.documents.delete({ id: fieldEntry.fieldChunkId });\n } catch (e) {\n this.logger.warn(`[Warn] Failed deleting old field chunk (${fieldEntry.fieldChunkId}): ${String(e)}`);\n }\n }\n\n // 6) Create new document (R2R auto-generates the ID)\n const r = await this.ragClient.documents.create({\n raw_text: text,\n metadata,\n collectionIds: [ingestionInfo.collectionId],\n });\n\n const newId = r?.results?.documentId;\n if (!newId) {\n throw new Error(`R2R did not return a documentId while creating field chunk for ${moduleName}.${modelName}.${fieldName}`);\n }\n\n // 7) Update ingestion info\n fieldEntry.fieldChunkId = newId;\n fieldEntry.fieldHash = schemaHash;\n\n this.logger.log(`[OK] Ingested field ${moduleName}.${modelName}.${fieldName} → id=${newId}, hash=${schemaHash.slice(0, 8)}…`);\n return newId;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"ingest-metadata.service.js","sourceRoot":"","sources":["../../../src/services/genai/ingest-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport * as crypto from 'crypto';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport { getDynamicModuleNames, getDynamicModuleNamesBasedOnMetadata } from 'src/helpers/module.helper';\nimport { CreateModuleMetadataDto } from 'src/dtos/create-module-metadata.dto';\nimport { R2RHelperService } from './r2r-helper.service';\nimport { r2rClient } from 'r2r-js';\nimport { CreateModelMetadataDto } from 'src/dtos/create-model-metadata.dto';\nimport { CreateFieldMetadataDto } from 'src/dtos/create-field-metadata.dto';\n\nexport type FieldIngestionInfo = {\n fieldName: string;\n fieldChunkId?: string;\n fieldHash?: string;\n};\n\nexport type ModelIngestionInfo = {\n modelName: string;\n modelChunkId?: string;\n modelHash?: string;\n fields: FieldIngestionInfo[];\n};\n\nexport type ModuleRAGIngestionInfo = {\n moduleName?: string;\n collectionId?: string;\n\n // Full json document is also uploaded so we track references...\n documentId?: string;\n documentHash?: string;\n\n // module references\n moduleChunkId?: string;\n // track a hash of module metadata to skip unchanged\n moduleHash?: string;\n\n // model references...\n models: ModelIngestionInfo[];\n};\n\n@Injectable()\nexport class IngestMetadataService {\n private readonly logger = new Logger(IngestMetadataService.name);\n private ragClient: r2rClient;\n\n constructor(\n private readonly r2rService: R2RHelperService,\n ) { }\n\n // Stable stringify so hashes/ids don't flap\n // private stableStringify(obj: any): string {\n // return JSON.stringify(obj, Object.keys(obj).sort(), 2);\n // }\n // private sha256(input: string): string {\n // return crypto.createHash('sha256').update(input).digest('hex');\n // }\n // private hashSchema(obj: any): string {\n // return this.sha256(this.stableStringify(obj));\n // }\n private _sha256OfJson(obj: any): string {\n const s = JSON.stringify(obj);\n return crypto.createHash('sha256').update(s).digest('hex');\n }\n // // Small natural-language one-liners for relations\n // private relationSig(model: any): string[] {\n // const rels: string[] = [];\n // for (const f of model.fields ?? []) {\n // if (f.relation?.targetModel) {\n // rels.push(`${model.singularName}.${f.name} -> ${f.relation.targetModel}(${f.relation.targetField ?? 'id'})`);\n // }\n // }\n // return rels;\n // }\n\n private _oneLineBool(b?: boolean): 'yes' | 'no' {\n return b ? 'yes' : 'no';\n }\n\n private _shortList(arr?: string[] | null, max = 10): string {\n if (!Array.isArray(arr) || arr.length === 0) return 'none';\n const a = arr.slice(0, max);\n return `${a.join(', ')}${arr.length > max ? ', …' : ''}`;\n }\n\n async ingest() {\n // Create a new ragClient...\n this.ragClient = await this.r2rService.getClient();\n\n // const allModuleMetadataJson = [];\n this.logger.debug(`getting dynamics modules`);\n // const enabledModules = getDynamicModuleNames();\n const enabledModules = getDynamicModuleNamesBasedOnMetadata();\n this.logger.log(`ingesting metadata`);\n\n for (let i = 0; i < enabledModules.length; i++) {\n const enabledModule = enabledModules[i];\n const fileName = `${enabledModule}-metadata.json`;\n const enabledModuleSeedFile = `module-metadata/${enabledModule}/${fileName}`;\n const fullPath = path.join(process.cwd(), enabledModuleSeedFile);\n const overallMetadata: any = JSON.parse(fs.readFileSync(fullPath, 'utf-8').toString());\n\n const moduleMetadata: CreateModuleMetadataDto = overallMetadata.moduleMetadata;\n\n // Manage all the ingestion info file paths...\n const enabledModulIngestionInfoFile = `module-metadata/${enabledModule}/genai/${enabledModule}-ingested-info.json`;\n const enabledModulIngestionInfoFullPath = path.join(process.cwd(), enabledModulIngestionInfoFile);\n const ingestionInfo: ModuleRAGIngestionInfo = fs.existsSync(enabledModulIngestionInfoFullPath) ? JSON.parse(fs.readFileSync(enabledModulIngestionInfoFullPath, 'utf-8').toString()) : {};\n const enabledModulIngestionInfoDir = path.dirname(enabledModulIngestionInfoFullPath);\n if (!fs.existsSync(enabledModulIngestionInfoDir)) {\n fs.mkdirSync(enabledModulIngestionInfoDir, { recursive: true });\n }\n\n ingestionInfo.moduleName = enabledModule\n\n // Process module metadata first. \n this.logger.log(`[Start] Processing module metadata for ${moduleMetadata.name}`)\n\n // Create or use an existing collection...\n const collectionId = await this.resolveRagCollectionForModule(ingestionInfo, enabledModule)\n ingestionInfo.collectionId = collectionId;\n\n // Delete and re-insert a document representing the full json...\n // await this.deleteInsertRagDocumentForModuleMetadataJsonFile(ingestionInfo, fullPath, fileName)\n\n // Delete all metadata chunks. \n // const collectionName = `${enabledModule}-rag-collection`;\n // const deleteResult = await this.ragClient.documents.deleteByFilter({\n // filters: {\n // // AND semantics across fields:\n // \"$and\": [\n // { 'metadata.kind': { $eq: 'solidx-metadata' } },\n // { 'metadata.collectionName': { $eq: collectionName } },\n // { 'title': { $like: '%Ingested Chunks%' } },\n // ]\n // },\n // });\n // this.logger.log(`Deleted existing documents for collectionName: ${collectionName}. Got response:`, deleteResult);\n\n // Delete and re-insert a chunk representing the module.\n await this.deleteInsertRagChunkForModule(ingestionInfo, moduleMetadata);\n\n // Delete and re-insert chunks representing each model.\n for (const model of moduleMetadata.models) {\n await this.deleteInsertRagChunkForModel(ingestionInfo, enabledModule, model);\n\n // Disabling this for now...\n // for (const field of model.fields) {\n // await this.deleteInsertRagChunkForField(ingestionInfo, enabledModule, model.singularName, field);\n // }\n }\n\n // TODO: Delete and re-insert chunks representing roles\n\n // TODO: Delete and re-insert chunks representing menus \n\n // TODO: Delete and re-insert chunks representing actions\n\n // TODO: Delete and re-insert chunks representing list views \n\n // TODO: Delete and re-insert chunks representing kanban views \n\n // TODO: Delete and re-insert chunks representing form views\n\n // TODO: Delete and re-insert chunks representing security rules\n\n // TODO: Delete and re-insert chunks representing scheduled jobs\n\n // Save ingestion info to disk...\n fs.writeFileSync(enabledModulIngestionInfoFullPath, JSON.stringify({ ...ingestionInfo }, null, 2), 'utf8');\n }\n }\n\n private async resolveRagCollectionForModule(ingestionInfo: ModuleRAGIngestionInfo, moduleName: string): Promise<string> {\n this.logger.debug(`Resolving RAG collection for module: ${moduleName}`);\n\n const collectionName = `${moduleName}-rag-collection`;\n\n // delete and recreate \n // if (alwaysRecreate === true) {\n const existingCollection = await this.ragClient.collections.retrieveByName({\n name: collectionName\n });\n\n if (existingCollection) {\n try {\n await this.ragClient.collections.delete({ id: existingCollection.results.id });\n } catch (e) {\n this.logger.warn(`[Warn] Failed deleteByFilter for collection': ${String(e)}`);\n }\n }\n // }\n\n // let existingCollection: CollectionResponse = null;\n // if (ingestionInfo.collectionId) {\n // // See if collection already exists... \n // const r = await this.ragClient.collections.list({\n // ids: [\n // ingestionInfo.collectionId\n // ]\n // });\n\n // if (r) {\n // if (r.results.length === 1) {\n // existingCollection = r.results[0];\n // }\n // if (r.results.length > 1) {\n // // TODO: do something that will print a meaningful error on the console...\n // }\n // }\n // }\n\n // if (!existingCollection) {\n const r = await this.ragClient.collections.create({\n name: collectionName,\n description: `Collection created to group all documents, chunks related to module: ${moduleName}`\n });\n\n // TODO: for some reason if we are unable to create a collection then fail with a visible error message in the console...\n return r.results.id;\n // }\n // return existingCollection.id;\n }\n\n private async deleteInsertRagDocumentForModuleMetadataJsonFile(ingestionInfo: ModuleRAGIngestionInfo, fullPath: string, fileName: string): Promise<void> {\n this.logger.debug(`Ingesting file: ${fullPath}`);\n\n // 1) Compute hash of the entire JSON string (as-is)\n const jsonStr = fs.readFileSync(fullPath, 'utf-8');\n const contentHash = this._sha256OfJson(JSON.parse(jsonStr));\n\n // 2) Short-circuit if unchanged and we still have a documentId\n if (ingestionInfo.documentHash === contentHash && ingestionInfo.documentId) {\n this.logger.log(`[Skip] Unchanged: ${fileName} (hash=${contentHash.slice(0, 8)}…)`);\n return;\n // return ingestionInfo.documentId;\n }\n\n // 3) Delete the previous doc if present\n if (ingestionInfo.documentId) {\n try {\n await this.ragClient.documents.delete({ id: ingestionInfo.documentId });\n } catch (e) {\n this.logger.warn(\n `[Warn] Failed deleting prior document ${ingestionInfo.documentId}: ${String(e)}`\n );\n }\n }\n\n // 4) Create a fresh document; attach the hash into metadata for traceability\n const ingestResult = await this.ragClient.documents.create({\n file: {\n path: fullPath,\n name: fileName\n },\n collectionIds: [ingestionInfo.collectionId],\n metadata: {\n contentHash,\n fileName\n },\n });\n // console.log(\"file ingest result:\", JSON.stringify(ingestResult, null, 2));\n\n const newId = ingestResult?.results?.documentId;\n if (!newId) {\n throw new Error(`R2R did not return a documentId for ${fileName}`);\n }\n\n // 5) Persist identifiers + hash on our side\n ingestionInfo.documentId = newId;\n ingestionInfo.documentHash = contentHash;\n\n this.logger.log(`[OK] Ingested ${fileName} → id=${newId}, hash=${contentHash.slice(0, 8)}…`);\n // return newId;\n\n }\n\n private async deleteInsertRagChunkForModule(ingestionInfo: ModuleRAGIngestionInfo, moduleMetadata: CreateModuleMetadataDto): Promise<void> {\n const moduleName: string = moduleMetadata?.name;\n\n // Hash the meaningful parts of the module to detect changes and skip re-ingest.\n const schemaHash = this._sha256OfJson({\n name: moduleMetadata?.name ?? null,\n description: moduleMetadata?.description ?? null,\n\n // Keep model names + brief shape so module-level hash changes when models change.\n models: (moduleMetadata?.models ?? []).map((m: any) => ({\n singularName: m?.singularName ?? null,\n description: m?.description ?? null,\n\n // Include field names to detect field-level changes at module granularity - maybe remove this later?\n // fields: Array.isArray(m?.fields) ? m.fields.map((f: any) => f?.name ?? null) : [],\n })),\n });\n\n // Skip unchanged module\n if (ingestionInfo.moduleHash === schemaHash && ingestionInfo.moduleChunkId) {\n this.logger.log(`[Skip] Module unchanged: ${moduleName}`);\n return;\n // return ingestionInfo.moduleChunkId;\n }\n\n const models: any[] = moduleMetadata?.models ?? [];\n const modelLines = models.map((m) => {\n const name = m?.singularName;\n const desc = m?.description ? `: ${m.description}` : '';\n return `- ${name}${desc}`;\n });\n\n const text = `SolidX Module: ${moduleName}\nPurpose: ${moduleMetadata?.description ?? 'N/A'}\n\nModels (${models.length}):\n${modelLines.join('\\n')}\n\nUsage: Use this chunk to choose the correct model/field chunks for code generation or metadata edits.`;\n\n // metadata has to be concise and queryable\n const metadata = {\n collectionName: `${moduleName}-rag-collection`,\n kind: 'solidx-metadata',\n type: 'module',\n moduleName,\n modelCount: models.length,\n schemaHash,\n models: models.map((m) => m?.singularName).filter(Boolean),\n };\n\n // Delete previous chunk if we have one\n // if (ingestionInfo.moduleChunkId) {\n // try {\n // await this.ragClient.documents.delete({ id: ingestionInfo.moduleChunkId });\n // } catch (e) {\n // this.logger.warn(`[Warn] Failed deleting old module chunk (${ingestionInfo.moduleChunkId}): ${String(e)}`);\n // }\n // }\n\n // We changed the approach to delete and re-create using metadata.\n // delete any existing module records by metadata (idempotent)\n try {\n const deleteResult = await this.ragClient.documents.deleteByFilter({\n filters: {\n // AND semantics across fields:\n \"$and\": [\n { 'metadata.kind': { $eq: 'solidx-metadata' } },\n { 'metadata.type': { $eq: 'module' } },\n { 'metadata.moduleName': { $eq: moduleName } },\n // (optional but nice to constrain tightly if you always set it)\n { 'metadata.collectionName': { $eq: `${moduleName}-rag-collection` } },\n ]\n },\n });\n\n this.logger.log(`Deleted existing module document for moduleName: ${moduleName}. Got response:`, deleteResult);\n\n } catch (e) {\n this.logger.warn(`[Warn] Failed deleteByFilter for module '${moduleName}': ${String(e)}`);\n // Non-fatal: we can still proceed to create; caller’s auth will limit scope anyway\n }\n\n const r = await this.ragClient.documents.create({\n chunks: [text],\n // raw_text: text,\n metadata: metadata,\n collectionIds: [ingestionInfo.collectionId],\n });\n\n const newId = r?.results?.documentId;\n if (!newId) {\n throw new Error(`R2R did not return a documentId while creating module chunk for module name ${moduleName}`);\n }\n\n // Update ingestion info for persistence by the caller\n ingestionInfo.moduleChunkId = r.results?.documentId;\n ingestionInfo.moduleHash = schemaHash;\n\n this.logger.log(`[OK] Ingested module ${moduleName} → id=${newId}, hash=${schemaHash.slice(0, 8)}…`);\n\n }\n\n private async deleteInsertRagChunkForModel(ingestionInfo: ModuleRAGIngestionInfo, moduleName: string, model: CreateModelMetadataDto): Promise<void> {\n const modelName: string = model?.singularName;\n\n // 1) Hash full JSON (as-is) to detect changes and skip re-ingest\n const schemaHash = this._sha256OfJson(model);\n\n // Ensure ingestionInfo.models[] has an entry for this model\n const modelsArr = ingestionInfo.models ?? (ingestionInfo.models = []);\n let modelEntry = modelsArr.find(m => m.modelName === modelName);\n if (!modelEntry) {\n modelEntry = { modelName, fields: [] };\n modelsArr.push(modelEntry);\n }\n\n // 2) Short-circuit if unchanged\n if (modelEntry.modelHash === schemaHash && modelEntry.modelChunkId) {\n this.logger.log(`[Skip] Model unchanged: ${moduleName}.${modelName}`);\n return;\n // return modelEntry.modelChunkId;\n }\n\n // 3) Build retrieval-friendly text (concise)\n const fields: CreateFieldMetadataDto[] = Array.isArray(model?.fields) ? model.fields : [];\n const userkey = fields.find((f: CreateFieldMetadataDto) => f?.isUserKey)?.name ?? 'id';\n const uniques = fields.filter((f: CreateFieldMetadataDto) => f?.unique).map((f: any) => f.name);\n const required = fields.filter((f: CreateFieldMetadataDto) => f?.required).map((f: any) => f.name);\n const rels = fields\n .filter((f: CreateFieldMetadataDto) => f.type === 'relation')\n .map((f: CreateFieldMetadataDto) => `${modelName}.${f.name} -> ${f.relationCoModelSingularName}.${f.relationCoModelColumnName ?? 'id'}`);\n\n const fieldSummaryLines = fields.slice(0, 30).map((f: CreateFieldMetadataDto) => {\n const bits = [\n `${f.name}:${f.type}`,\n f.required ? 'req' : '',\n f.unique ? 'unique' : '',\n f.isUserKey ? 'userkey' : '',\n f.relationCoModelSingularName ? `rel->${f.relationCoModelSingularName}` : '',\n ].filter(Boolean).join('|');\n return `- ${bits}`;\n });\n\n const text =\n `SolidX Model: ${modelName}\nModule: ${moduleName}\nPurpose: ${model?.description ?? 'N/A'}\n\nSignature:\n- Primary: ${userkey}\n- Unique: ${uniques.length ? uniques.join(', ') : 'none'}\n- Required (${required.length}): ${required.slice(0, 12).join(', ')}${required.length > 12 ? '…' : ''}\n\nRelations (${rels.length}):\n${rels.length ? `- ${rels.join('\\n- ')}` : 'None'}\n\nFields (${fields.length}) [name:type|flags]:\n${fieldSummaryLines.join('\\n')}\n\nUsage: Use this chunk to generate DTOs, subscribers, custom service methods, and CRUD handlers for ${modelName}.\n\nFull model metadata json: \n${JSON.stringify(model)}\n\n`;\n\n // 4) Metadata (concise & queryable)\n const metadata = {\n collectionName: `${moduleName}-rag-collection`,\n kind: 'solidx-metadata',\n type: 'model',\n moduleName,\n modelName,\n fieldCount: fields.length,\n requiredCount: required.length,\n relationCount: rels.length,\n userkey: userkey,\n uniqueFields: uniques,\n hasTimestamps: !!fields.find((f: CreateFieldMetadataDto) => ['time', 'date', 'datetime'].includes(f.type)),\n schemaHash,\n };\n\n // 5) Delete previous chunk if present\n // if (modelEntry.modelChunkId) {\n // try {\n // await this.ragClient.documents.delete({ id: modelEntry.modelChunkId });\n // } catch (e) {\n // this.logger.warn(`[Warn] Failed deleting old model chunk (${modelEntry.modelChunkId}): ${String(e)}`);\n // }\n // }\n\n // We changed the approach to delete and re-create using metadata.\n // delete any existing module records by metadata (idempotent)\n try {\n const deleteResult = await this.ragClient.documents.deleteByFilter({\n filters: {\n // AND semantics across fields:\n \"$and\": [\n { 'metadata.kind': { $eq: 'solidx-metadata' } },\n { 'metadata.type': { $eq: 'model' } },\n { 'metadata.moduleName': { $eq: moduleName } },\n { 'metadata.modelName': { $eq: modelName } },\n // (optional but nice to constrain tightly if you always set it)\n { 'metadata.collectionName': { $eq: `${moduleName}-rag-collection` } },\n ]\n },\n });\n\n this.logger.log(`Deleted existing model document for modelName: ${modelName}. Got response:`, deleteResult);\n\n } catch (e) {\n this.logger.warn(`[Warn] Failed deleteByFilter for module '${moduleName}': ${String(e)}`);\n // Non-fatal: we can still proceed to create; caller’s auth will limit scope anyway\n }\n\n // 6) Create new document (R2R auto-generates the ID)\n const r = await this.ragClient.documents.create({\n chunks: [text],\n metadata,\n collectionIds: [ingestionInfo.collectionId],\n });\n\n const newId = r?.results?.documentId;\n if (!newId) {\n throw new Error(`R2R did not return a documentId while creating model chunk for ${moduleName}.${modelName}`);\n }\n\n // 7) Update ingestionInfo for persistence\n modelEntry.modelChunkId = newId;\n modelEntry.modelHash = schemaHash;\n\n this.logger.log(`[OK] Ingested model ${moduleName}.${modelName} → id=${newId}, hash=${schemaHash.slice(0, 8)}…`);\n // return newId;\n }\n\n private _buildFieldTextAndMetadata(moduleName: string, modelName: string, f: CreateFieldMetadataDto) {\n // Identity\n const name = f?.name;\n const displayName = f?.displayName ?? name;\n const description = f?.description ?? 'N/A';\n\n // Types\n const type = f?.type;\n const ormType = f?.ormType ?? null;\n\n // Constraints / validation\n const required = !!f?.required;\n const unique = !!f?.unique;\n const index = !!f?.index;\n const length = f?.length ?? null;\n const min = f?.min ?? null;\n const max = f?.max ?? null;\n const defaultValue = f?.defaultValue ?? null;\n const regex = f?.regexPattern ?? null;\n const regexErr = f?.regexPatternNotMatchingErrorMsg ?? null;\n\n // Relation\n const relationType = f?.relationType ?? null; // e.g., many-to-one, many-to-many, one-to-many\n const relModule = f?.relationModelModuleName ?? null;\n const relModel = f?.relationCoModelSingularName ?? null;\n const relField = f?.relationCoModelFieldName ?? 'id';\n // const relOwner = f?.isRelationManyToManyOwner ?? null;\n // const relJoinTable = f?.relationJoinTableName ?? null;\n // const relCreateInverse = !!f?.relationCreateInverse;\n const relCascade = f?.relationCascade ?? null;\n const relFixedFilter = f?.relationFieldFixedFilter ?? null;\n\n // Selection (dropdowns)\n const selectionDynProvider = f?.selectionDynamicProvider ?? null;\n const selectionDynCtxt = f?.selectionDynamicProviderCtxt ?? null;\n const selectionStatic = Array.isArray(f?.selectionStaticValues) ? f.selectionStaticValues : null;\n const selectionValueType = f?.selectionValueType ?? null;\n const isMultiSelect = !!f?.isMultiSelect;\n\n // Media (uploads)\n const mediaTypes = Array.isArray(f?.mediaTypes) ? f.mediaTypes : null;\n const mediaMaxSizeKb = f?.mediaMaxSizeKb ?? null;\n const mediaStorageProvider = f?.mediaStorageProviderUserKey ?? null; // likely object/id in your JSON\n\n // Computed fields\n const computedProvider = f?.computedFieldValueProvider ?? null;\n const computedProviderCtxt = f?.computedFieldValueProviderCtxt ?? null;\n const computedValueType = f?.computedFieldValueType ?? null;\n const computedTriggerCfg = f?.computedFieldTriggerConfig ?? null;\n\n // Security / privacy / audit\n // const encrypt = !!f?.encrypt;\n // const encryptionType = f?.encryptionType ?? null;\n // const decryptWhen = f?.decryptWhen ?? null;\n const isPrivate = !!f?.private;\n const enableAuditTracking = !!f?.enableAuditTracking;\n\n // Keys / system flags / mapping\n const isUserKey = !!f?.isUserKey;\n const isSystem = !!f?.isSystem;\n const isMarkedForRemoval = !!f?.isMarkedForRemoval;\n const columnName = f?.columnName ?? null;\n const relCoModelColumn = f?.relationCoModelColumnName ?? null;\n const uuid = f?.uuid ?? null;\n\n const relationSummary = (() => {\n if (!relationType || !relModel) return 'none';\n const parts = [\n `type=${relationType}`,\n relModule ? `module=${relModule}` : null,\n `model=${relModel}`,\n relField ? `field=${relField}` : null,\n // relOwner !== null ? `m2mOwner=${relOwner}` : null,\n // relCreateInverse ? 'createInverse=yes' : null,\n relCascade ? `cascade=${relCascade}` : null,\n // relJoinTable ? `joinTable=${relJoinTable}` : null,\n relFixedFilter ? `fixedFilter=${relFixedFilter}` : null,\n ].filter(Boolean);\n return parts.join(', ');\n })();\n\n const selectionSummary = (() => {\n const parts: string[] = [];\n if (selectionDynProvider) parts.push(`dynamicProvider=${selectionDynProvider}`);\n if (selectionDynCtxt) parts.push(`dynamicCtxt=${selectionDynCtxt}`);\n if (selectionStatic?.length) parts.push(`static=[${this._shortList(selectionStatic, 12)}]`);\n if (selectionValueType) parts.push(`valueType=${selectionValueType}`);\n parts.push(`multiSelect=${this._oneLineBool(isMultiSelect)}`);\n return parts.length ? parts.join(', ') : 'none';\n })();\n\n const mediaSummary = (() => {\n const parts: string[] = [];\n if (mediaTypes?.length) parts.push(`types=[${this._shortList(mediaTypes, 12)}]`);\n if (mediaMaxSizeKb) parts.push(`maxSizeKb=${mediaMaxSizeKb}`);\n if (mediaStorageProvider) parts.push(`storageProvider=${typeof mediaStorageProvider === 'string' ? mediaStorageProvider : 'set'}`);\n return parts.length ? parts.join(', ') : 'none';\n })();\n\n const computedSummary = (() => {\n const parts: string[] = [];\n if (computedProvider) parts.push(`provider=${computedProvider}`);\n if (computedProviderCtxt) parts.push(`providerCtxt=${computedProviderCtxt}`);\n if (computedValueType) parts.push(`valueType=${computedValueType}`);\n if (computedTriggerCfg?.length) parts.push(`triggers=${computedTriggerCfg.length}`);\n return parts.length ? parts.join(', ') : 'none';\n })();\n\n const securitySummary = [\n // `encrypt=${this.oneLineBool(encrypt)}`,\n // encryptionType ? `encType=${encryptionType}` : null,\n // decryptWhen ? `decryptWhen=${decryptWhen}` : null,\n `private=${this._oneLineBool(isPrivate)}`,\n `auditTracking=${this._oneLineBool(enableAuditTracking)}`\n ].filter(Boolean).join(', ');\n\n const constraintSummary = [\n `required=${this._oneLineBool(required)}`,\n `unique=${this._oneLineBool(unique)}`,\n `index=${this._oneLineBool(index)}`,\n length !== null ? `length=${length}` : null,\n min !== null ? `min=${min}` : null,\n max !== null ? `max=${max}` : null,\n defaultValue !== null ? `default=${defaultValue}` : null,\n regex ? `regex=${regex}${regexErr ? ` (${regexErr})` : ''}` : null\n ].filter(Boolean).join(', ');\n\n const mappingSummary = [\n columnName ? `column=${columnName}` : null,\n relCoModelColumn ? `relColumn=${relCoModelColumn}` : null,\n uuid ? `uuid=${uuid}` : null,\n `userKey=${this._oneLineBool(isUserKey)}`,\n `system=${this._oneLineBool(isSystem)}`,\n `markedForRemoval=${this._oneLineBool(isMarkedForRemoval)}`\n ].filter(Boolean).join(', ');\n\n const text = [\n `SolidX Field: ${name} (${displayName})`,\n `Model: ${modelName}`,\n `Module: ${moduleName}`,\n ``,\n `Type: ${type}${ormType ? ` (orm=${ormType})` : ''}`,\n `Description: ${description}`,\n ``,\n `Constraints: ${constraintSummary || 'none'}`,\n `Relation: ${relationSummary}`,\n `Selection: ${selectionSummary}`,\n `Media: ${mediaSummary}`,\n `Computed: ${computedSummary}`,\n `Security/Privacy/Audit: ${securitySummary}`,\n `Mapping/Flags: ${mappingSummary || 'none'}`,\n ``,\n `Usage: Use this chunk to generate exact field contracts (DTO, form control, DB column), `,\n `validation rules, relation wiring, and UI widgets (selection/media/computed).`,\n ].join('\\n');\n\n const metadata = {\n kind: 'solidx-metadata',\n type: 'field',\n moduleName,\n modelName,\n fieldName: name,\n displayName,\n description,\n dataType: type,\n ormType,\n required,\n unique,\n index,\n defaultValue,\n length,\n min,\n max,\n regexPattern: regex,\n regexPatternNotMatchingErrorMsg: regexErr,\n\n // relation\n relationType,\n relationModelModuleName: relModule,\n relationCoModelSingularName: relModel,\n relationCoModelFieldName: relField,\n // isRelationManyToManyOwner: relOwner,\n // relationJoinTableName: relJoinTable,\n // relationCreateInverse: relCreateInverse,\n relationCascade: relCascade,\n relationFieldFixedFilter: relFixedFilter,\n\n // selection\n selectionDynProvider,\n selectionDynCtxt,\n selectionStaticValues: selectionStatic,\n selectionValueType,\n isMultiSelect,\n\n // media\n mediaTypes,\n mediaMaxSizeKb,\n mediaStorageProvider: mediaStorageProvider ? (typeof mediaStorageProvider === 'string' ? mediaStorageProvider : 'set') : null,\n\n // computed\n computedFieldValueProvider: computedProvider,\n computedFieldValueProviderCtxt: computedProviderCtxt,\n computedFieldValueType: computedValueType,\n computedFieldTriggerConfigCount: Array.isArray(computedTriggerCfg) ? computedTriggerCfg.length : 0,\n\n // security/privacy/audit\n // encrypt,\n // encryptionType,\n // decryptWhen,\n private: isPrivate,\n enableAuditTracking,\n\n // mapping/flags\n columnName,\n relationCoModelColumnName: relCoModelColumn,\n isUserKey,\n isSystem,\n isMarkedForRemoval,\n };\n\n return { text, metadata };\n }\n\n private async deleteInsertRagChunkForField(ingestionInfo: ModuleRAGIngestionInfo, moduleName: string, modelName: string, field: CreateFieldMetadataDto,): Promise<string> {\n const fieldName: string = field?.name ?? 'unknown_field';\n\n // 1) Full JSON hash (as-is)\n const schemaHash = this._sha256OfJson(field);\n\n // 2) Ensure ingestionInfo entry for the model & field\n const modelsArr = ingestionInfo.models ?? (ingestionInfo.models = []);\n let modelEntry = modelsArr.find(m => m.modelName === modelName);\n if (!modelEntry) {\n modelEntry = { modelName, fields: [] };\n modelsArr.push(modelEntry);\n }\n const fieldsArr = modelEntry.fields ?? (modelEntry.fields = []);\n let fieldEntry = fieldsArr.find(f => f.fieldName === fieldName);\n if (!fieldEntry) {\n fieldEntry = { fieldName };\n fieldsArr.push(fieldEntry);\n }\n\n // 3) Skip if unchanged\n if (fieldEntry.fieldHash === schemaHash && fieldEntry.fieldChunkId) {\n this.logger.log(`[Skip] Field unchanged: ${moduleName}.${modelName}.${fieldName}`);\n return fieldEntry.fieldChunkId;\n }\n\n // 4) Build text + metadata tailored to FieldMetadata\n const { text, metadata } = this._buildFieldTextAndMetadata(moduleName, modelName, field);\n\n // also keep the hash in metadata for audit/debug\n (metadata as any).schemaHash = schemaHash;\n\n // 5) Delete previous chunk if present\n if (fieldEntry.fieldChunkId) {\n try {\n await this.ragClient.documents.delete({ id: fieldEntry.fieldChunkId });\n } catch (e) {\n this.logger.warn(`[Warn] Failed deleting old field chunk (${fieldEntry.fieldChunkId}): ${String(e)}`);\n }\n }\n\n // 6) Create new document (R2R auto-generates the ID)\n const r = await this.ragClient.documents.create({\n raw_text: text,\n metadata,\n collectionIds: [ingestionInfo.collectionId],\n });\n\n const newId = r?.results?.documentId;\n if (!newId) {\n throw new Error(`R2R did not return a documentId while creating field chunk for ${moduleName}.${modelName}.${fieldName}`);\n }\n\n // 7) Update ingestion info\n fieldEntry.fieldChunkId = newId;\n fieldEntry.fieldHash = schemaHash;\n\n this.logger.log(`[OK] Ingested field ${moduleName}.${modelName}.${fieldName} → id=${newId}, hash=${schemaHash.slice(0, 8)}…`);\n return newId;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-transaction-error-log.service.d.ts","sourceRoot":"","sources":["../../src/services/import-transaction-error-log.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAG,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAc,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,mCAAmC,EAAE,MAAM,wDAAwD,CAAC;AAE7G,qBACa,gCAAiC,SAAQ,WAAW,CAAC,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"import-transaction-error-log.service.d.ts","sourceRoot":"","sources":["../../src/services/import-transaction-error-log.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAG,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAc,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,mCAAmC,EAAE,MAAM,wDAAwD,CAAC;AAE7G,qBACa,gCAAiC,SAAQ,WAAW,CAAC,yBAAyB,CAAC;IAGxF,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,mCAAmC;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS;gBAXpB,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,mCAAmC,EACzC,SAAS,EAAE,SAAS;CAKhC"}
|
|
@@ -41,6 +41,7 @@ let ImportTransactionErrorLogService = class ImportTransactionErrorLogService ex
|
|
|
41
41
|
exports.ImportTransactionErrorLogService = ImportTransactionErrorLogService;
|
|
42
42
|
exports.ImportTransactionErrorLogService = ImportTransactionErrorLogService = __decorate([
|
|
43
43
|
(0, common_1.Injectable)(),
|
|
44
|
+
__param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
|
|
44
45
|
__param(6, (0, typeorm_1.InjectEntityManager)()),
|
|
45
46
|
__metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
|
|
46
47
|
module_metadata_service_1.ModuleMetadataService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-transaction-error-log.service.js","sourceRoot":"","sources":["../../src/services/import-transaction-error-log.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"import-transaction-error-log.service.js","sourceRoot":"","sources":["../../src/services/import-transaction-error-log.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAgE;AAChE,6CAAwE;AACxE,uCAA4D;AAC5D,qCAAoD;AAEpD,iDAAwD;AACxD,qEAA2E;AAC3E,uEAA6E;AAC7E,2CAA+C;AAC/C,iDAAwD;AACxD,+DAAqE;AAIrE,mHAA6G;AAGtG,IAAM,gCAAgC,GAAtC,MAAM,gCAAiC,SAAQ,0BAAsC;IAC1F,YAEW,oBAA0C,EAC1C,qBAA4C,EAC5C,aAA4B,EAC5B,WAAwB,EACxB,gBAAkC,EAClC,iBAAoC,EAEpC,aAA4B,EAG5B,IAAyC,EACzC,SAAoB;QAG9B,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAG,aAAa,EAAE,WAAW,EAAG,gBAAgB,EAAE,iBAAiB,EAAC,aAAa,EAAE,IAAI,EAAE,2BAA2B,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAdtL,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAAqC;QACzC,cAAS,GAAT,SAAS,CAAW;IAIhC,CAAC;CACD,CAAA;AAnBY,4EAAgC;2CAAhC,gCAAgC;IAD5C,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6CAAoB,CAAC,CAAC,CAAA;IAO9C,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCANS,6CAAoB;QACnB,+CAAqB;QAC7B,sBAAa;QACf,0BAAW;QACN,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAGtB,6EAAmC;QAC9B,gBAAS;GAdpB,gCAAgC,CAmB5C","sourcesContent":["import { forwardRef, Inject, Injectable } from '@nestjs/common';\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport { ConfigService } from '@nestjs/config';\nimport { FileService } from 'src/services/file.service';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\n\n\nimport { ImportTransactionErrorLog } from '../entities/import-transaction-error-log.entity';\nimport { ImportTransactionErrorLogRepository } from 'src/repository/import-transaction-error-log.repository';\n\n@Injectable()\nexport class ImportTransactionErrorLogService extends CRUDService<ImportTransactionErrorLog>{\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ImportTransactionErrorLog, 'default')\n // readonly repo: Repository<ImportTransactionErrorLog>,\n readonly repo: ImportTransactionErrorLogRepository,\n readonly moduleRef: ModuleRef\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService,entityManager, repo, 'importTransactionErrorLog', 'solid-core', moduleRef);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-transaction.service.d.ts","sourceRoot":"","sources":["../../src/services/import-transaction.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAI7E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,6BAA6B,EAAyC,MAAM,kCAAkC,CAAC;AAExH,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAI7F,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAG3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAG3E,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,YAAY;IACtB,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED,oBAAY,eAAe;IACzB,GAAG,aAAa;IAChB,KAAK,sEAAsE;CAC5E;AACD,MAAM,WAAW,iBAAiB;IAChC,wBAAwB,EAAE,wBAAwB,EAAE,CAAC;IACrD,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;CACzC;AACD,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AACD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAC7B;AAOD,oBAAY,uBAAuB;IACjC,KAAK,UAAU;IACf,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,aAAa,kBAAkB;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,qBACa,wBAAyB,SAAQ,WAAW,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"import-transaction.service.d.ts","sourceRoot":"","sources":["../../src/services/import-transaction.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -203,7 +203,12 @@ let ImportTransactionService = ImportTransactionService_1 = class ImportTransact
|
|
|
203
203
|
? userPermissions.includes(permissionKey)
|
|
204
204
|
: userPermissions[permissionKey] === true;
|
|
205
205
|
if (!hasPermission) {
|
|
206
|
-
|
|
206
|
+
const action = permissionKey.split('.').pop();
|
|
207
|
+
const message = error_messages_1.ERROR_MESSAGES.PERMISSION_MESSAGES[action]?.(modelName) ?? 'You are not allowed to perform this action.';
|
|
208
|
+
throw new common_1.ForbiddenException({
|
|
209
|
+
message,
|
|
210
|
+
errorCode: 'permission-denied',
|
|
211
|
+
});
|
|
207
212
|
}
|
|
208
213
|
const importFileMediaObject = this.getImportFileObject(importTransaction);
|
|
209
214
|
const importFileStream = await this.getImportFileStream(importFileMediaObject);
|
|
@@ -570,6 +575,7 @@ let ImportTransactionService = ImportTransactionService_1 = class ImportTransact
|
|
|
570
575
|
exports.ImportTransactionService = ImportTransactionService;
|
|
571
576
|
exports.ImportTransactionService = ImportTransactionService = ImportTransactionService_1 = __decorate([
|
|
572
577
|
(0, common_1.Injectable)(),
|
|
578
|
+
__param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
|
|
573
579
|
__param(6, (0, typeorm_1.InjectEntityManager)()),
|
|
574
580
|
__metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
|
|
575
581
|
module_metadata_service_1.ModuleMetadataService,
|