@solidstarters/solid-core 1.2.200 → 1.2.202
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/refresh-model.command.d.ts.map +1 -1
- package/dist/commands/refresh-model.command.js +4 -0
- package/dist/commands/refresh-model.command.js.map +1 -1
- package/dist/config/cache.options.d.ts +1 -1
- package/dist/config/cache.options.d.ts.map +1 -1
- package/dist/config/cache.options.js +2 -2
- package/dist/config/cache.options.js.map +1 -1
- package/dist/config/iam.config.d.ts +4 -0
- package/dist/config/iam.config.d.ts.map +1 -1
- package/dist/config/iam.config.js +2 -0
- package/dist/config/iam.config.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/model-metadata.controller.d.ts +25 -0
- package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/model-metadata.controller.js +23 -0
- 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/setting.controller.d.ts +2 -2
- package/dist/controllers/setting.controller.d.ts.map +1 -1
- package/dist/controllers/setting.controller.js +36 -42
- package/dist/controllers/setting.controller.js.map +1 -1
- package/dist/decorators/sms-provider.decorator.d.ts +3 -0
- package/dist/decorators/sms-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/sms-provider.decorator.js +11 -0
- package/dist/decorators/sms-provider.decorator.js.map +1 -0
- 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-field-metadata.dto.js +2 -2
- package/dist/dtos/create-field-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 +1 -0
- 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/navigation.dto.d.ts +6 -0
- package/dist/dtos/navigation.dto.d.ts.map +1 -0
- package/dist/dtos/navigation.dto.js +33 -0
- package/dist/dtos/navigation.dto.js.map +1 -0
- package/dist/dtos/resolve-s3-url.dto.d.ts +5 -5
- package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
- package/dist/dtos/resolve-s3-url.dto.js +7 -7
- package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
- package/dist/dtos/sign-in.dto.js +3 -3
- package/dist/dtos/sign-in.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/common.entity.d.ts.map +1 -1
- package/dist/entities/common.entity.js +6 -4
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +2 -1
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common.entity.js +6 -4
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/entities/model-metadata.entity.d.ts.map +1 -1
- package/dist/entities/model-metadata.entity.js +5 -1
- 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/factories/mail.factory.d.ts.map +1 -1
- package/dist/factories/mail.factory.js.map +1 -1
- package/dist/factories/sms.factory.d.ts +14 -0
- package/dist/factories/sms.factory.d.ts.map +1 -0
- package/dist/factories/sms.factory.js +53 -0
- package/dist/factories/sms.factory.js.map +1 -0
- package/dist/helpers/date.helper.d.ts.map +1 -1
- package/dist/helpers/date.helper.js +13 -4
- 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.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +6 -2
- 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 +29 -3
- package/dist/helpers/module.helper.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +14 -0
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +7 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +12 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -8
- package/dist/index.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/{sms-publisher-database.service.d.ts → msg91-sms-publisher-database.service.d.ts} +2 -2
- package/dist/jobs/database/msg91-sms-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/{sms-publisher-database.service.js → msg91-sms-publisher-database.service.js} +8 -8
- package/dist/jobs/database/msg91-sms-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/{sms-queue-database-options.d.ts → msg91-sms-queue-database-options.d.ts} +1 -1
- package/dist/jobs/database/msg91-sms-queue-database-options.d.ts.map +1 -0
- package/dist/jobs/database/{sms-queue-database-options.js → msg91-sms-queue-database-options.js} +1 -1
- package/dist/jobs/database/msg91-sms-queue-database-options.js.map +1 -0
- package/dist/jobs/database/{sms-subscriber-database.service.d.ts → msg91-sms-subscriber-database.service.d.ts} +5 -5
- package/dist/jobs/database/msg91-sms-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/{sms-subscriber-database.service.js → msg91-sms-subscriber-database.service.js} +14 -12
- package/dist/jobs/database/msg91-sms-subscriber-database.service.js.map +1 -0
- package/dist/jobs/database/otp-subscriber-database.service.d.ts +4 -4
- package/dist/jobs/database/otp-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/otp-subscriber-database.service.js +6 -4
- package/dist/jobs/database/otp-subscriber-database.service.js.map +1 -1
- package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts +3 -3
- package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/twilio-sms-subscriber-database.service.js +6 -4
- package/dist/jobs/database/twilio-sms-subscriber-database.service.js.map +1 -1
- package/dist/jobs/{sms-publisher.service.d.ts → msg91-otp-publisher.service.d.ts} +2 -2
- package/dist/jobs/msg91-otp-publisher.service.d.ts.map +1 -0
- package/dist/jobs/{sms-publisher.service.js → msg91-otp-publisher.service.js} +8 -8
- package/dist/jobs/msg91-otp-publisher.service.js.map +1 -0
- package/dist/jobs/{sms-queue-options.d.ts → msg91-otp-queue-options.d.ts} +1 -1
- package/dist/jobs/msg91-otp-queue-options.d.ts.map +1 -0
- package/dist/jobs/{otp-queue-options.js → msg91-otp-queue-options.js} +1 -1
- package/dist/jobs/msg91-otp-queue-options.js.map +1 -0
- package/dist/jobs/{sms-subscriber.service.d.ts → msg91-otp-subscriber.service.d.ts} +6 -6
- package/dist/jobs/msg91-otp-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/{otp-subscriber.service.js → msg91-otp-subscriber.service.js} +14 -12
- package/dist/jobs/msg91-otp-subscriber.service.js.map +1 -0
- package/dist/jobs/{otp-publisher.service.d.ts → msg91-sms-publisher.service.d.ts} +2 -2
- package/dist/jobs/msg91-sms-publisher.service.d.ts.map +1 -0
- package/dist/jobs/{otp-publisher.service.js → msg91-sms-publisher.service.js} +8 -8
- package/dist/jobs/msg91-sms-publisher.service.js.map +1 -0
- package/dist/jobs/{otp-queue-options.d.ts → msg91-sms-queue-options.d.ts} +1 -1
- package/dist/jobs/msg91-sms-queue-options.d.ts.map +1 -0
- package/dist/jobs/{sms-queue-options.js → msg91-sms-queue-options.js} +1 -1
- package/dist/jobs/msg91-sms-queue-options.js.map +1 -0
- package/dist/jobs/{otp-subscriber.service.d.ts → msg91-sms-subscriber.service.d.ts} +7 -7
- package/dist/jobs/msg91-sms-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/{sms-subscriber.service.js → msg91-sms-subscriber.service.js} +14 -12
- package/dist/jobs/msg91-sms-subscriber.service.js.map +1 -0
- package/dist/jobs/twilio-sms-subscriber.service.d.ts +3 -3
- package/dist/jobs/twilio-sms-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/twilio-sms-subscriber.service.js +6 -4
- package/dist/jobs/twilio-sms-subscriber.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 +7 -12
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +87 -27
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +373 -52
- 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 +11 -2
- package/dist/seeders/system-fields-seeder.service.js.map +1 -1
- package/dist/seeders/user-seeder.service.d.ts.map +1 -1
- package/dist/seeders/user-seeder.service.js +5 -4
- package/dist/seeders/user-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 +1 -0
- package/dist/services/ai-interaction.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts +6 -3
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +70 -27
- 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.js +7 -5
- 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 +23 -6
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +257 -45
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +4 -3
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +53 -24
- 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 +11 -0
- package/dist/services/excel.service.d.ts.map +1 -1
- package/dist/services/excel.service.js +104 -0
- package/dist/services/excel.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts +4 -1
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +35 -30
- 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.map +1 -1
- package/dist/services/menu-item-metadata.service.js +4 -0
- package/dist/services/menu-item-metadata.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +28 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +111 -44
- 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/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/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/services/setting.service.d.ts +7 -5
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +28 -48
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/sms/Msg91BaseSMSService.js +6 -6
- package/dist/services/sms/Msg91BaseSMSService.js.map +1 -1
- package/dist/services/sms/Msg91OTPService.d.ts.map +1 -1
- package/dist/services/sms/Msg91OTPService.js +3 -1
- package/dist/services/sms/Msg91OTPService.js.map +1 -1
- package/dist/services/sms/Msg91SMSService.d.ts.map +1 -1
- package/dist/services/sms/Msg91SMSService.js +3 -1
- package/dist/services/sms/Msg91SMSService.js.map +1 -1
- package/dist/services/sms/TwilioSMSService.d.ts.map +1 -1
- package/dist/services/sms/TwilioSMSService.js +2 -0
- package/dist/services/sms/TwilioSMSService.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 +5 -13
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +18 -22
- 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 +1 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +3 -1
- 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-cli.module.js +1 -1
- package/dist/solid-core-cli.module.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +40 -13
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +5 -1
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts +4 -2
- package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +53 -12
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.d.ts.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js +1 -1
- package/dist/subscribers/scheduled-job.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 +48 -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/src/commands/fixtures/fixtures-setup.command.ts +44 -0
- package/src/commands/fixtures/fixtures-tear-down.command.ts +45 -0
- package/src/commands/refresh-model.command.ts +3 -1
- package/src/config/cache.options.ts +6 -3
- package/src/config/iam.config.ts +2 -1
- package/src/constants/error-messages.ts +7 -1
- package/src/controllers/model-metadata.controller.ts +21 -1
- package/src/controllers/model-sequence.controller.ts +93 -0
- package/src/controllers/setting.controller.ts +62 -54
- package/src/decorators/sms-provider.decorator.ts +7 -0
- package/src/dtos/basic-filters.dto.ts +6 -1
- package/src/dtos/basic-group-filters.dto.ts +23 -0
- package/src/dtos/create-field-metadata.dto.ts +1 -1
- package/src/dtos/create-model-sequence.dto.ts +51 -0
- package/src/dtos/create-role-metadata.dto.ts +16 -3
- package/src/dtos/get-mcp-url.dto.ts +13 -0
- package/src/dtos/navigation.dto.ts +14 -0
- package/src/dtos/resolve-s3-url.dto.ts +9 -11
- package/src/dtos/sign-in.dto.ts +3 -3
- package/src/dtos/update-model-sequence.dto.ts +53 -0
- package/src/entities/common.entity.ts +8 -8
- package/src/entities/field-metadata.entity.ts +1 -1
- package/src/entities/legacy-common.entity.ts +8 -6
- package/src/entities/model-metadata.entity.ts +1 -1
- package/src/entities/model-sequence.entity.ts +32 -0
- package/src/factories/mail.factory.ts +0 -1
- package/src/factories/sms.factory.ts +43 -0
- package/src/helpers/date.helper.ts +38 -9
- 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 +6 -4
- package/src/helpers/module-metadata-helper.service.ts +18 -1
- package/src/helpers/module.helper.ts +40 -5
- package/src/helpers/solid-registry.ts +23 -0
- package/src/index.ts +12 -7
- package/src/jobs/computed-field-evaluation-subscriber.service.ts +15 -4
- package/src/jobs/database/{sms-publisher-database.service.ts → msg91-sms-publisher-database.service.ts} +2 -2
- package/src/jobs/database/{sms-subscriber-database.service.ts → msg91-sms-subscriber-database.service.ts} +9 -4
- package/src/jobs/database/otp-subscriber-database.service.ts +8 -2
- package/src/jobs/database/twilio-sms-subscriber-database.service.ts +5 -2
- package/src/jobs/{otp-publisher.service.ts → msg91-otp-publisher.service.ts} +2 -2
- package/src/jobs/{otp-subscriber.service.ts → msg91-otp-subscriber.service.ts} +10 -4
- package/src/jobs/{sms-publisher.service.ts → msg91-sms-publisher.service.ts} +2 -2
- package/src/jobs/{sms-subscriber.service.ts → msg91-sms-subscriber.service.ts} +9 -4
- package/src/jobs/twilio-sms-subscriber.service.ts +6 -2
- 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 +133 -34
- package/src/seeders/seed-data/email-templates/email-on-signup.handlebars.html +155 -0
- package/src/seeders/seed-data/sms-templates/text-on-signup.handlebars.txt +10 -0
- package/src/seeders/seed-data/solid-core-metadata.json +374 -53
- package/src/seeders/system-fields-seeder.service.ts +6 -2
- package/src/seeders/user-seeder.service.ts +5 -4
- package/src/services/action-metadata.service.ts +3 -2
- package/src/services/ai-interaction.service.ts +2 -1
- package/src/services/authentication.service.ts +119 -24
- 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 +9 -9
- package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +86 -0
- package/src/services/crud-helper.service.ts +287 -49
- package/src/services/crud.service.ts +95 -45
- 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 +152 -3
- package/src/services/field-metadata.service.ts +102 -55
- 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 +6 -2
- package/src/services/model-metadata.service.ts +201 -44
- package/src/services/model-sequence.service.ts +33 -0
- package/src/services/module-metadata.service.ts +49 -2
- package/src/services/permission-metadata.service.ts +8 -9
- package/src/services/queues/database-subscriber.service.ts +3 -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/services/setting.service.ts +42 -55
- package/src/services/sms/Msg91BaseSMSService.ts +6 -6
- package/src/services/sms/Msg91OTPService.ts +3 -2
- package/src/services/sms/Msg91SMSService.ts +3 -1
- package/src/services/sms/TwilioSMSService.ts +3 -3
- package/src/services/sms-template.service.ts +11 -13
- package/src/services/solid-introspect.service.ts +28 -19
- 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 +5 -4
- package/src/solid-core-cli-db.module.ts +5 -4
- package/src/solid-core-cli.module.ts +2 -2
- package/src/solid-core.module.ts +42 -13
- package/src/subscribers/audit.subscriber.ts +3 -2
- package/src/subscribers/computed-entity-field.subscriber.ts +60 -17
- package/src/subscribers/scheduled-job.subscriber.ts +9 -2
- package/src/transformers/typeorm/local-date-time-transformer.ts +55 -0
- package/dist/jobs/database/sms-publisher-database.service.d.ts.map +0 -1
- package/dist/jobs/database/sms-publisher-database.service.js.map +0 -1
- package/dist/jobs/database/sms-queue-database-options.d.ts.map +0 -1
- package/dist/jobs/database/sms-queue-database-options.js.map +0 -1
- package/dist/jobs/database/sms-subscriber-database.service.d.ts.map +0 -1
- package/dist/jobs/database/sms-subscriber-database.service.js.map +0 -1
- package/dist/jobs/otp-publisher.service.d.ts.map +0 -1
- package/dist/jobs/otp-publisher.service.js.map +0 -1
- package/dist/jobs/otp-queue-options.d.ts.map +0 -1
- package/dist/jobs/otp-queue-options.js.map +0 -1
- package/dist/jobs/otp-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/otp-subscriber.service.js.map +0 -1
- package/dist/jobs/sms-publisher.service.d.ts.map +0 -1
- package/dist/jobs/sms-publisher.service.js.map +0 -1
- package/dist/jobs/sms-queue-options.d.ts.map +0 -1
- package/dist/jobs/sms-queue-options.js.map +0 -1
- package/dist/jobs/sms-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/sms-subscriber.service.js.map +0 -1
- /package/sql/{mssql → default/mssql}/proc_CleanupModelMetadata.sql +0 -0
- /package/sql/{mssql → default/mssql}/proc_CleanupModuleMetadata.sql +0 -0
- /package/sql/{mssql/scratchpad.sql → default/mssql/scratchpad.sql.txt} +0 -0
- /package/sql/{postgres → default/postgres}/proc_CleanupModelMetadata.sql +0 -0
- /package/sql/{postgres → default/postgres}/proc_CleanupModuleMetadata.sql +0 -0
- /package/sql/{postgres/scratchpad.sql → default/postgres/scratchpad.sql.txt} +0 -0
- /package/src/jobs/database/{sms-queue-database-options.ts → msg91-sms-queue-database-options.ts} +0 -0
- /package/src/jobs/{otp-queue-options.ts → msg91-otp-queue-options.ts} +0 -0
- /package/src/jobs/{sms-queue-options.ts → msg91-sms-queue-options.ts} +0 -0
|
@@ -14,18 +14,18 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.EmailTemplateService = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
|
+
const config_1 = require("@nestjs/config");
|
|
18
|
+
const core_1 = require("@nestjs/core");
|
|
17
19
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
20
|
+
const email_template_repository_1 = require("../repository/email-template.repository");
|
|
18
21
|
const typeorm_2 = require("typeorm");
|
|
22
|
+
const crud_helper_service_1 = require("./crud-helper.service");
|
|
19
23
|
const crud_service_1 = require("./crud.service");
|
|
20
|
-
const model_metadata_service_1 = require("./model-metadata.service");
|
|
21
|
-
const module_metadata_service_1 = require("./module-metadata.service");
|
|
22
|
-
const media_storage_provider_metadata_service_1 = require("./media-storage-provider-metadata.service");
|
|
23
|
-
const config_1 = require("@nestjs/config");
|
|
24
24
|
const file_service_1 = require("./file.service");
|
|
25
|
+
const media_storage_provider_metadata_service_1 = require("./media-storage-provider-metadata.service");
|
|
25
26
|
const media_service_1 = require("./media.service");
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const email_template_repository_1 = require("../repository/email-template.repository");
|
|
27
|
+
const model_metadata_service_1 = require("./model-metadata.service");
|
|
28
|
+
const module_metadata_service_1 = require("./module-metadata.service");
|
|
29
29
|
let EmailTemplateService = class EmailTemplateService extends crud_service_1.CRUDService {
|
|
30
30
|
constructor(modelMetadataService, moduleMetadataService, mediaStorageProviderService, configService, fileService, mediaService, discoveryService, crudHelperService, entityManager, repo, moduleRef) {
|
|
31
31
|
super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'emailTemplate', 'app-builder', moduleRef);
|
|
@@ -60,6 +60,7 @@ let EmailTemplateService = class EmailTemplateService extends crud_service_1.CRU
|
|
|
60
60
|
exports.EmailTemplateService = EmailTemplateService;
|
|
61
61
|
exports.EmailTemplateService = EmailTemplateService = __decorate([
|
|
62
62
|
(0, common_1.Injectable)(),
|
|
63
|
+
__param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
|
|
63
64
|
__param(8, (0, typeorm_1.InjectEntityManager)()),
|
|
64
65
|
__metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
|
|
65
66
|
module_metadata_service_1.ModuleMetadataService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-template.service.js","sourceRoot":"","sources":["../../src/services/email-template.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA+
|
|
1
|
+
{"version":3,"file":"email-template.service.js","sourceRoot":"","sources":["../../src/services/email-template.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAgE;AAEhE,2CAA+C;AAC/C,uCAA2D;AAC3D,6CAAsD;AACtD,uFAAmF;AACnF,qCAAwC;AAExC,+DAA0D;AAC1D,iDAA6C;AAC7C,iDAA6C;AAC7C,uGAAgG;AAChG,mDAA+C;AAC/C,qEAAgE;AAChE,uEAAkE;AAG3D,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,0BAA0B;IAChE,YAES,oBAA0C,EAC1C,qBAA4C,EAC5C,2BAAgE,EAChE,aAA4B,EAC5B,WAAwB,EACxB,YAA0B,EAC1B,gBAAkC,EAClC,iBAAoC,EAEpC,aAA4B,EAG5B,IAA6B,EAC7B,SAAoB;QAEzB,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAf/K,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,gCAA2B,GAA3B,2BAA2B,CAAqC;QAChE,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAAyB;QAC7B,cAAS,GAAT,SAAS,CAAW;IAG7B,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,YAAiB,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,KAAK,EAAE;gBACH,IAAI,EAAE,IAAI;aACb;YACD,SAAS,EAAE,SAAS;SACvB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,YAAY,CAAC,IAAY;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;CACJ,CAAA;AAnCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6CAAoB,CAAC,CAAC,CAAA;IAS9C,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCARS,6CAAoB;QACnB,+CAAqB;QACf,6EAAmC;QACjD,sBAAa;QACf,0BAAW;QACV,4BAAY;QACR,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAGtB,mDAAuB;QAClB,gBAAS;GAhBpB,oBAAoB,CAmChC","sourcesContent":["import { forwardRef, Inject, Injectable } from '@nestjs/common';\n\nimport { ConfigService } from '@nestjs/config';\nimport { DiscoveryService, ModuleRef } from '@nestjs/core';\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EmailTemplateRepository } from 'src/repository/email-template.repository';\nimport { EntityManager } from 'typeorm';\nimport { EmailTemplate } from '../entities/email-template.entity';\nimport { CrudHelperService } from './crud-helper.service';\nimport { CRUDService } from './crud.service';\nimport { FileService } from './file.service';\nimport { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';\nimport { MediaService } from './media.service';\nimport { ModelMetadataService } from './model-metadata.service';\nimport { ModuleMetadataService } from './module-metadata.service';\n\n@Injectable()\nexport class EmailTemplateService extends CRUDService<EmailTemplate>{\n constructor(\n @Inject(forwardRef(() => ModelMetadataService))\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly mediaStorageProviderService: MediaStorageProviderMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly mediaService: MediaService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(EmailTemplate, 'default')\n // readonly repo: Repository<EmailTemplate>,\n readonly repo: EmailTemplateRepository,\n readonly moduleRef: ModuleRef,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'emailTemplate', 'app-builder', moduleRef);\n }\n async findOneByName(name: string, relations: any = {}) {\n const entity = await this.repo.findOne({\n where: {\n name: name,\n },\n relations: relations,\n });\n return entity;\n }\n async removeByName(name: string) {\n const entity = await this.findOneByName(name);\n if (entity) {\n return await this.repo.remove(entity);\n }\n }\n}\n"]}
|
|
@@ -8,9 +8,20 @@ export interface ExcelReadResult {
|
|
|
8
8
|
headers: string[];
|
|
9
9
|
data: Record<string, any>[];
|
|
10
10
|
}
|
|
11
|
+
export interface ExcelReadAllResult {
|
|
12
|
+
headers: string[];
|
|
13
|
+
rows: Record<string, any>[];
|
|
14
|
+
}
|
|
11
15
|
export declare class ExcelService {
|
|
12
16
|
private logger;
|
|
13
17
|
createExcelStream(getDataRecords: (chunkIndex: number, chunkSize: number) => Promise<any[]>, chunkSize?: number, headers?: string[]): Promise<Readable>;
|
|
14
18
|
readExcelInPagesFromStream(stream: Readable, options?: ExcelReadOptions): AsyncGenerator<ExcelReadResult>;
|
|
19
|
+
private cleanString;
|
|
20
|
+
private normalizeCellValue;
|
|
21
|
+
readExcelFromStreamNonStreaming(stream: Readable, options?: ExcelReadOptions & {
|
|
22
|
+
worksheetIndex?: number;
|
|
23
|
+
maxRows?: number;
|
|
24
|
+
}): Promise<ExcelReadAllResult>;
|
|
25
|
+
parseAndValidateDate(value: string): Date | null;
|
|
15
26
|
}
|
|
16
27
|
//# sourceMappingURL=excel.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excel.service.d.ts","sourceRoot":"","sources":["../../src/services/excel.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"excel.service.d.ts","sourceRoot":"","sources":["../../src/services/excel.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAID,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAC7B;AAED,qBACa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAiC;IAElC,iBAAiB,CAC5B,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,EACzE,SAAS,GAAE,MAAY,EACvB,OAAO,GAAE,MAAM,EAAO,GACrB,OAAO,CAAC,QAAQ,CAAC;IAuEN,0BAA0B,CACtC,MAAM,EAAE,QAAQ,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,cAAc,CAAC,eAAe,CAAC;IA4DlC,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,kBAAkB;IA8Cb,+BAA+B,CAC1C,MAAM,EAAE,QAAQ,EAChB,OAAO,CAAC,EAAE,gBAAgB,GAAG;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACzE,OAAO,CAAC,kBAAkB,CAAC;IAmFvB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAIxD"}
|
|
@@ -44,6 +44,7 @@ exports.ExcelService = void 0;
|
|
|
44
44
|
const common_1 = require("@nestjs/common");
|
|
45
45
|
const ExcelJS = __importStar(require("exceljs"));
|
|
46
46
|
const error_messages_1 = require("../constants/error-messages");
|
|
47
|
+
const date_helper_1 = require("../helpers/date.helper");
|
|
47
48
|
const stream_1 = require("stream");
|
|
48
49
|
const DEFAULT_PAGE_SIZE = 100;
|
|
49
50
|
let ExcelService = ExcelService_1 = class ExcelService {
|
|
@@ -151,6 +152,109 @@ let ExcelService = ExcelService_1 = class ExcelService {
|
|
|
151
152
|
yield { headers, data: [] };
|
|
152
153
|
}
|
|
153
154
|
}
|
|
155
|
+
cleanString(value) {
|
|
156
|
+
return (value === null || value === undefined ? '' : String(value))
|
|
157
|
+
.replace(/\uFEFF/g, '')
|
|
158
|
+
.replace(/\u00A0/g, ' ')
|
|
159
|
+
.replace(/\s+/g, ' ')
|
|
160
|
+
.trim();
|
|
161
|
+
}
|
|
162
|
+
normalizeCellValue(value, sharedStrings) {
|
|
163
|
+
if (value === undefined || value === null)
|
|
164
|
+
return null;
|
|
165
|
+
if (typeof value === 'object' && value && 'sharedString' in value) {
|
|
166
|
+
const idx = value.sharedString;
|
|
167
|
+
const resolved = sharedStrings?.[idx];
|
|
168
|
+
if (resolved === undefined || resolved === null)
|
|
169
|
+
return null;
|
|
170
|
+
if (typeof resolved === 'string')
|
|
171
|
+
return resolved;
|
|
172
|
+
if (typeof resolved === 'object') {
|
|
173
|
+
if ('text' in resolved && typeof resolved.text === 'string')
|
|
174
|
+
return resolved.text;
|
|
175
|
+
if ('richText' in resolved && Array.isArray(resolved.richText)) {
|
|
176
|
+
return resolved.richText.map((item) => item?.text ?? '').join('');
|
|
177
|
+
}
|
|
178
|
+
if ('value' in resolved)
|
|
179
|
+
return resolved.value;
|
|
180
|
+
}
|
|
181
|
+
return resolved;
|
|
182
|
+
}
|
|
183
|
+
if (typeof value === 'object' && value) {
|
|
184
|
+
if ('text' in value && typeof value.text === 'string')
|
|
185
|
+
return value.text;
|
|
186
|
+
if ('richText' in value && Array.isArray(value.richText)) {
|
|
187
|
+
return value.richText.map((item) => item?.text ?? '').join('');
|
|
188
|
+
}
|
|
189
|
+
if ('result' in value)
|
|
190
|
+
return value.result;
|
|
191
|
+
if ('formula' in value)
|
|
192
|
+
return value.formula;
|
|
193
|
+
if ('hyperlink' in value && typeof value.hyperlink === 'string') {
|
|
194
|
+
return value.text ?? value.hyperlink;
|
|
195
|
+
}
|
|
196
|
+
if ('value' in value)
|
|
197
|
+
return this.normalizeCellValue(value.value, sharedStrings);
|
|
198
|
+
}
|
|
199
|
+
return value;
|
|
200
|
+
}
|
|
201
|
+
async readExcelFromStreamNonStreaming(stream, options) {
|
|
202
|
+
const { hasHeaderRow = true, providedHeaders = [], worksheetIndex = 0, maxRows, } = options || {};
|
|
203
|
+
const chunks = [];
|
|
204
|
+
for await (const chunk of stream) {
|
|
205
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
206
|
+
}
|
|
207
|
+
const buffer = Buffer.concat(chunks);
|
|
208
|
+
const workbook = new ExcelJS.Workbook();
|
|
209
|
+
await workbook.xlsx.load(buffer);
|
|
210
|
+
const worksheet = workbook.worksheets?.[worksheetIndex];
|
|
211
|
+
if (!worksheet) {
|
|
212
|
+
return { headers: [], rows: [] };
|
|
213
|
+
}
|
|
214
|
+
let headers = [];
|
|
215
|
+
const firstRow = worksheet.getRow(1);
|
|
216
|
+
const firstRowValues = Array.isArray(firstRow.values) ? firstRow.values.slice(1) : [];
|
|
217
|
+
const normalizeNonStreamingCell = (v) => {
|
|
218
|
+
return this.normalizeCellValue(v);
|
|
219
|
+
};
|
|
220
|
+
if (hasHeaderRow) {
|
|
221
|
+
headers = firstRowValues.map((v) => this.cleanString(normalizeNonStreamingCell(v)));
|
|
222
|
+
}
|
|
223
|
+
else if (providedHeaders.length) {
|
|
224
|
+
headers = providedHeaders.map((h) => this.cleanString(h));
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
headers = firstRowValues.map((_, idx) => `${idx}`);
|
|
228
|
+
}
|
|
229
|
+
if (hasHeaderRow && headers.length > 0 && headers.every((h) => !h)) {
|
|
230
|
+
this.logger.warn(`ExcelService.readExcelFromStreamNonStreaming: header row appears blank`);
|
|
231
|
+
}
|
|
232
|
+
const rows = [];
|
|
233
|
+
const startRowNumber = hasHeaderRow ? 2 : 1;
|
|
234
|
+
const lastRowNumber = worksheet.rowCount || 0;
|
|
235
|
+
for (let r = startRowNumber; r <= lastRowNumber; r++) {
|
|
236
|
+
if (maxRows && rows.length >= maxRows)
|
|
237
|
+
break;
|
|
238
|
+
const row = worksheet.getRow(r);
|
|
239
|
+
const rawValues = Array.isArray(row.values) ? row.values.slice(1) : [];
|
|
240
|
+
const values = rawValues.map((v) => normalizeNonStreamingCell(v));
|
|
241
|
+
while (values.length < headers.length)
|
|
242
|
+
values.push(null);
|
|
243
|
+
if (values.length > headers.length)
|
|
244
|
+
values.length = headers.length;
|
|
245
|
+
const record = headers.reduce((acc, key, i) => {
|
|
246
|
+
acc[key] = values[i] ?? null;
|
|
247
|
+
return acc;
|
|
248
|
+
}, {});
|
|
249
|
+
if (Object.values(record).every((v) => v === null || this.cleanString(v) === ''))
|
|
250
|
+
continue;
|
|
251
|
+
rows.push(record);
|
|
252
|
+
}
|
|
253
|
+
return { headers, rows };
|
|
254
|
+
}
|
|
255
|
+
parseAndValidateDate(value) {
|
|
256
|
+
return (0, date_helper_1.parseFlexibleDate)(value);
|
|
257
|
+
}
|
|
154
258
|
};
|
|
155
259
|
exports.ExcelService = ExcelService;
|
|
156
260
|
exports.ExcelService = ExcelService = ExcelService_1 = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excel.service.js","sourceRoot":"","sources":["../../src/services/excel.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport * as ExcelJS from 'exceljs';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { PassThrough, Readable } from 'stream';\n\n\nexport interface ExcelReadOptions {\n pageSize?: number; // Number of records per page\n hasHeaderRow?: boolean; // Whether the first row contains headers\n providedHeaders?: string[]; // Custom headers if hasHeaderRow is false\n}\n\nconst DEFAULT_PAGE_SIZE = 100; // Default page size if not provided\n\nexport interface ExcelReadResult {\n headers: string[]; // Headers of the Excel file\n data: Record<string, any>[]; // Data records in the current page\n}\n\n@Injectable()\nexport class ExcelService {\n private logger = new Logger(ExcelService.name);\n\n public async createExcelStream(\n getDataRecords: (chunkIndex: number, chunkSize: number) => Promise<any[]>,\n chunkSize: number = 100,\n headers: string[] = []\n ): Promise<Readable> {\n // Validations\n // If neither headers nor data records function is provided, throw an error\n if (headers.length === 0 && typeof getDataRecords !== 'function') {\n throw new Error(ERROR_MESSAGES.MISSING_HEADERS_OR_FUNCTION);\n }\n\n // If data records function is provided, chunkSize must be greater than 0\n if (getDataRecords && chunkSize <= 0) {\n throw new Error(ERROR_MESSAGES.INVALID_CHUNK_SIZE);\n }\n\n const passThrough = new PassThrough(); // Create streaming pipe\n try {\n const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ stream: passThrough });\n const worksheet = workbook.addWorksheet('Data');\n\n // If headers are provided, use them;\n let isHeaderWritten = false;\n if (headers.length > 0) {\n worksheet.columns = headers.map((header) => ({\n header: header, // Convert header names to uppercase\n key: header,\n width: 20, // Set column width\n }));\n isHeaderWritten = true; // Mark headers as written\n }\n\n // ✅ If no data loader provided, write only headers and finish\n if (typeof getDataRecords !== 'function') {\n // worksheet.addRow(\n // headers.reduce((acc, header) => ({ ...acc, [header]: '' }), {})\n // ).commit(); // Write a dummy record with headers\n\n workbook.commit();\n return passThrough;\n }\n\n // Write the data records in chunks\n let chunkIndex = 0;\n while (true) {\n const records = await getDataRecords(chunkIndex, chunkSize); // Fetch chunked data\n if (records.length === 0) break; // Stop if no more records\n\n if (!isHeaderWritten) { // Falback because without columns being set, ExcelJS won't write data correctly\n worksheet.columns = Object.keys(records[0]).map((key) => ({\n header: key.toUpperCase(),\n key: key,\n width: 20,\n }));\n isHeaderWritten = true;\n }\n\n records.forEach((item) => {\n worksheet.addRow(item).commit(); // Commit each row immediately\n });\n\n chunkIndex++; // Fetch next chunk\n this.logger.debug(`✅ Chunk ${chunkIndex} written to Excel`);\n }\n\n workbook.commit();\n // passThrough.end(); // ✅ Properly close the stream\n } catch (error) {\n this.logger.error(`❌ Error writing Excel: ${error.message}`);\n passThrough.destroy(error); // Destroy stream\n throw error;\n }\n return passThrough; // Return streaming response\n }\n\n public async *readExcelInPagesFromStream(\n stream: Readable,\n options?: ExcelReadOptions\n ): AsyncGenerator<ExcelReadResult> {\n const { pageSize = DEFAULT_PAGE_SIZE, hasHeaderRow = true, providedHeaders = [] } = options || {};\n const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader(stream, {});\n\n let headers: string[] = [];\n let page: Record<string, any>[] = [];\n let isFirstRow = true;\n let hasYieldedData = false;\n\n for await (const worksheet of workbookReader) {\n for await (const row of worksheet) {\n const values = Array.isArray(row.values) ? row.values.slice(1) : [];\n\n if (isFirstRow) {\n isFirstRow = false;\n\n if (hasHeaderRow) {\n headers = values.map(v => v?.toString().trim() || '');\n continue;\n } else if (providedHeaders.length) {\n headers = providedHeaders;\n } else {\n headers = values.map((_, idx) => `${idx}`);\n }\n }\n\n while (values.length < headers.length) values.push(null);\n if (values.length > headers.length) values.length = headers.length;\n\n const record = headers.reduce((acc, key, i) => {\n acc[key] = values[i] ?? null;\n return acc;\n }, {} as Record<string, any>);\n\n if (Object.values(record).every(v => v === null || v === '')) continue;\n\n page.push(record);\n\n if (page.length === pageSize) {\n yield { headers, data: page };\n hasYieldedData = true;\n page = [];\n }\n }\n\n // Optional: break if only processing first worksheet\n // break;\n }\n\n if (page.length > 0) {\n yield { headers, data: page };\n hasYieldedData = true;\n }\n\n // ✅ Yield headers with empty data if only headers were found\n if (!hasYieldedData && headers.length > 0) {\n yield { headers, data: [] };\n }\n }\n\n}"]}
|
|
1
|
+
{"version":3,"file":"excel.service.js","sourceRoot":"","sources":["../../src/services/excel.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport * as ExcelJS from 'exceljs';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { parseFlexibleDate } from 'src/helpers/date.helper';\nimport { PassThrough, Readable } from 'stream';\n\nexport interface ExcelReadOptions {\n pageSize?: number; // Number of records per page\n hasHeaderRow?: boolean; // Whether the first row contains headers\n providedHeaders?: string[]; // Custom headers if hasHeaderRow is false\n}\n\nconst DEFAULT_PAGE_SIZE = 100; // Default page size if not provided\n\nexport interface ExcelReadResult {\n headers: string[]; // Headers of the Excel file\n data: Record<string, any>[]; // Data records in the current page\n}\n\nexport interface ExcelReadAllResult {\n headers: string[];\n rows: Record<string, any>[];\n}\n\n@Injectable()\nexport class ExcelService {\n private logger = new Logger(ExcelService.name);\n\n public async createExcelStream(\n getDataRecords: (chunkIndex: number, chunkSize: number) => Promise<any[]>,\n chunkSize: number = 100,\n headers: string[] = []\n ): Promise<Readable> {\n // Validations\n // If neither headers nor data records function is provided, throw an error\n if (headers.length === 0 && typeof getDataRecords !== 'function') {\n throw new Error(ERROR_MESSAGES.MISSING_HEADERS_OR_FUNCTION);\n }\n\n // If data records function is provided, chunkSize must be greater than 0\n if (getDataRecords && chunkSize <= 0) {\n throw new Error(ERROR_MESSAGES.INVALID_CHUNK_SIZE);\n }\n\n const passThrough = new PassThrough(); // Create streaming pipe\n try {\n const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ stream: passThrough });\n const worksheet = workbook.addWorksheet('Data');\n\n // If headers are provided, use them;\n let isHeaderWritten = false;\n if (headers.length > 0) {\n worksheet.columns = headers.map((header) => ({\n header: header, // Convert header names to uppercase\n key: header,\n width: 20, // Set column width\n }));\n isHeaderWritten = true; // Mark headers as written\n }\n\n // ✅ If no data loader provided, write only headers and finish\n if (typeof getDataRecords !== 'function') {\n // worksheet.addRow(\n // headers.reduce((acc, header) => ({ ...acc, [header]: '' }), {})\n // ).commit(); // Write a dummy record with headers\n\n workbook.commit();\n return passThrough;\n }\n\n // Write the data records in chunks\n let chunkIndex = 0;\n while (true) {\n const records = await getDataRecords(chunkIndex, chunkSize); // Fetch chunked data\n if (records.length === 0) break; // Stop if no more records\n\n if (!isHeaderWritten) { // Falback because without columns being set, ExcelJS won't write data correctly\n worksheet.columns = Object.keys(records[0]).map((key) => ({\n header: key.toUpperCase(),\n key: key,\n width: 20,\n }));\n isHeaderWritten = true;\n }\n\n records.forEach((item) => {\n worksheet.addRow(item).commit(); // Commit each row immediately\n });\n\n chunkIndex++; // Fetch next chunk\n this.logger.debug(`✅ Chunk ${chunkIndex} written to Excel`);\n }\n\n workbook.commit();\n // passThrough.end(); // ✅ Properly close the stream\n } catch (error) {\n this.logger.error(`❌ Error writing Excel: ${error.message}`);\n passThrough.destroy(error); // Destroy stream\n throw error;\n }\n return passThrough; // Return streaming response\n }\n\n public async *readExcelInPagesFromStream(\n stream: Readable,\n options?: ExcelReadOptions\n ): AsyncGenerator<ExcelReadResult> {\n const { pageSize = DEFAULT_PAGE_SIZE, hasHeaderRow = true, providedHeaders = [] } = options || {};\n const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader(stream, {});\n\n let headers: string[] = [];\n let page: Record<string, any>[] = [];\n let isFirstRow = true;\n let hasYieldedData = false;\n\n for await (const worksheet of workbookReader) {\n for await (const row of worksheet) {\n const values = Array.isArray(row.values) ? row.values.slice(1) : [];\n\n if (isFirstRow) {\n isFirstRow = false;\n\n if (hasHeaderRow) {\n headers = values.map(v => v?.toString().trim() || '');\n continue;\n } else if (providedHeaders.length) {\n headers = providedHeaders;\n } else {\n headers = values.map((_, idx) => `${idx}`);\n }\n }\n\n while (values.length < headers.length) values.push(null);\n if (values.length > headers.length) values.length = headers.length;\n\n const record = headers.reduce((acc, key, i) => {\n acc[key] = values[i] ?? null;\n return acc;\n }, {} as Record<string, any>);\n\n if (Object.values(record).every(v => v === null || v === '')) continue;\n\n page.push(record);\n\n if (page.length === pageSize) {\n yield { headers, data: page };\n hasYieldedData = true;\n page = [];\n }\n }\n\n // Optional: break if only processing first worksheet\n // break;\n }\n\n if (page.length > 0) {\n yield { headers, data: page };\n hasYieldedData = true;\n }\n\n // ✅ Yield headers with empty data if only headers were found\n if (!hasYieldedData && headers.length > 0) {\n yield { headers, data: [] };\n }\n }\n\n private cleanString(value: any): string {\n return (value === null || value === undefined ? '' : String(value))\n .replace(/\\uFEFF/g, '') // BOM\n .replace(/\\u00A0/g, ' ') // NBSP\n .replace(/\\s+/g, ' ')\n .trim();\n }\n\n private normalizeCellValue(value: any, sharedStrings?: any[]): any {\n if (value === undefined || value === null) return null;\n\n // ExcelJS streaming shared string ref: { sharedString: number }\n if (typeof value === 'object' && value && 'sharedString' in value) {\n const idx = (value as any).sharedString;\n const resolved = sharedStrings?.[idx];\n // sharedStrings may store objects or plain strings depending on ExcelJS internals\n if (resolved === undefined || resolved === null) return null;\n if (typeof resolved === 'string') return resolved;\n if (typeof resolved === 'object') {\n if ('text' in resolved && typeof (resolved as any).text === 'string') return (resolved as any).text;\n if ('richText' in resolved && Array.isArray((resolved as any).richText)) {\n return (resolved as any).richText.map((item: any) => item?.text ?? '').join('');\n }\n if ('value' in resolved) return (resolved as any).value;\n }\n return resolved;\n }\n\n // ExcelJS can return rich objects for styled cells; unwrap to plain text/primitive\n if (typeof value === 'object' && value) {\n // Plain rich cell: { text: '...' }\n if ('text' in value && typeof (value as any).text === 'string') return (value as any).text;\n\n // Rich text: { richText: [{text:'a'}, ...] }\n if ('richText' in value && Array.isArray((value as any).richText)) {\n return (value as any).richText.map((item: any) => item?.text ?? '').join('');\n }\n\n // Formula cells: { formula: '...', result: ... }\n if ('result' in value) return (value as any).result;\n if ('formula' in value) return (value as any).formula;\n\n // Hyperlinks: { text: '...', hyperlink: '...' }\n if ('hyperlink' in value && typeof (value as any).hyperlink === 'string') {\n return (value as any).text ?? (value as any).hyperlink;\n }\n\n // Sometimes primitive nested under .value\n if ('value' in value) return this.normalizeCellValue((value as any).value, sharedStrings);\n }\n\n return value;\n }\n\n public async readExcelFromStreamNonStreaming(\n stream: Readable,\n options?: ExcelReadOptions & { worksheetIndex?: number; maxRows?: number }\n ): Promise<ExcelReadAllResult> {\n const {\n hasHeaderRow = true,\n providedHeaders = [],\n worksheetIndex = 0, // 0-based\n maxRows,\n } = options || {};\n\n // 1) Read entire stream into a Buffer\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n const buffer = Buffer.concat(chunks);\n\n // 2) Load workbook (non-streaming)\n const workbook = new ExcelJS.Workbook();\n // @ts-ignore\n await workbook.xlsx.load(buffer);\n\n const worksheet = workbook.worksheets?.[worksheetIndex];\n if (!worksheet) {\n return { headers: [], rows: [] };\n }\n\n // 3) Determine headers\n let headers: string[] = [];\n\n const firstRow = worksheet.getRow(1);\n const firstRowValues = Array.isArray(firstRow.values) ? (firstRow.values as any[]).slice(1) : [];\n\n const normalizeNonStreamingCell = (v: any) => {\n // In non-streaming ExcelJS, cell.value can be:\n // - string/number/boolean/date\n // - {richText}, {text}, {hyperlink}, {formula,result}, etc.\n // We'll reuse your normalizeCellValue but without sharedStrings\n return this.normalizeCellValue(v);\n };\n\n if (hasHeaderRow) {\n headers = firstRowValues.map((v) => this.cleanString(normalizeNonStreamingCell(v)));\n } else if (providedHeaders.length) {\n headers = providedHeaders.map((h) => this.cleanString(h));\n } else {\n headers = firstRowValues.map((_, idx) => `${idx}`);\n }\n\n // If headers are all blank and hasHeaderRow=true, treat as no headers (avoid mapping everything to \"\")\n if (hasHeaderRow && headers.length > 0 && headers.every((h) => !h)) {\n this.logger.warn(`ExcelService.readExcelFromStreamNonStreaming: header row appears blank`);\n }\n\n // 4) Read rows\n const rows: Record<string, any>[] = [];\n\n const startRowNumber = hasHeaderRow ? 2 : 1;\n const lastRowNumber = worksheet.rowCount || 0;\n\n for (let r = startRowNumber; r <= lastRowNumber; r++) {\n if (maxRows && rows.length >= maxRows) break;\n\n const row = worksheet.getRow(r);\n const rawValues = Array.isArray(row.values) ? (row.values as any[]).slice(1) : [];\n const values = rawValues.map((v) => normalizeNonStreamingCell(v));\n\n // Align row width to header width\n while (values.length < headers.length) values.push(null);\n if (values.length > headers.length) values.length = headers.length;\n\n const record = headers.reduce((acc, key, i) => {\n acc[key] = values[i] ?? null;\n return acc;\n }, {} as Record<string, any>);\n\n // Skip fully empty rows\n if (Object.values(record).every((v) => v === null || this.cleanString(v) === '')) continue;\n\n rows.push(record);\n }\n\n return { headers, rows };\n }\n\n public parseAndValidateDate(value: string): Date | null {\n return parseFlexibleDate(value);\n }\n\n}"]}
|
|
@@ -12,17 +12,19 @@ import { ModelMetadata } from '../entities/model-metadata.entity';
|
|
|
12
12
|
import { ISelectionProviderValues } from '../interfaces';
|
|
13
13
|
import { CrudHelperService } from './crud-helper.service';
|
|
14
14
|
import { ResolveS3UrlDto } from 'src/dtos/resolve-s3-url.dto';
|
|
15
|
+
import { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';
|
|
15
16
|
import { ConfigService } from '@nestjs/config';
|
|
16
17
|
import { FileService } from './file.service';
|
|
17
18
|
export declare class FieldMetadataService implements OnApplicationBootstrap {
|
|
18
19
|
private readonly fieldMetadataRepo;
|
|
19
20
|
private readonly configService;
|
|
20
21
|
private readonly fileService;
|
|
22
|
+
private readonly mediaStorageProviderMetadataRepository;
|
|
21
23
|
private readonly dataSource;
|
|
22
24
|
private readonly solidRegistry;
|
|
23
25
|
private readonly crudHelperService;
|
|
24
26
|
private readonly moduleMetadataHelperService;
|
|
25
|
-
constructor(fieldMetadataRepo: FieldMetadataRepository, configService: ConfigService, fileService: FileService, dataSource: DataSource, solidRegistry: SolidRegistry, crudHelperService: CrudHelperService, moduleMetadataHelperService: ModuleMetadataHelperService);
|
|
27
|
+
constructor(fieldMetadataRepo: FieldMetadataRepository, configService: ConfigService, fileService: FileService, mediaStorageProviderMetadataRepository: MediaStorageProviderMetadataRepository, dataSource: DataSource, solidRegistry: SolidRegistry, crudHelperService: CrudHelperService, moduleMetadataHelperService: ModuleMetadataHelperService);
|
|
26
28
|
private logger;
|
|
27
29
|
onApplicationBootstrap(): void;
|
|
28
30
|
loadAndRegisterComputedFieldsDetails(): Promise<void>;
|
|
@@ -417,5 +419,6 @@ export declare class FieldMetadataService implements OnApplicationBootstrap {
|
|
|
417
419
|
resolveS3Url(resolveS3UrlDto: ResolveS3UrlDto): Promise<{
|
|
418
420
|
url: string;
|
|
419
421
|
}>;
|
|
422
|
+
private normalizeS3Key;
|
|
420
423
|
}
|
|
421
424
|
//# sourceMappingURL=field-metadata.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAyB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAuC,sBAAsB,EAA8C,SAAS,EAAE,QAAQ,EAAoD,MAAM,mCAAmC,CAAC;AACnO,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"field-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,13 +63,15 @@ const model_metadata_entity_1 = require("../entities/model-metadata.entity");
|
|
|
63
63
|
const crud_helper_service_1 = require("./crud-helper.service");
|
|
64
64
|
const error_messages_1 = require("../constants/error-messages");
|
|
65
65
|
const qs_1 = __importDefault(require("qs"));
|
|
66
|
+
const media_storage_provider_metadata_repository_1 = require("../repository/media-storage-provider-metadata.repository");
|
|
66
67
|
const config_1 = require("@nestjs/config");
|
|
67
68
|
const file_service_1 = require("./file.service");
|
|
68
69
|
let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
|
|
69
|
-
constructor(fieldMetadataRepo, configService, fileService, dataSource, solidRegistry, crudHelperService, moduleMetadataHelperService) {
|
|
70
|
+
constructor(fieldMetadataRepo, configService, fileService, mediaStorageProviderMetadataRepository, dataSource, solidRegistry, crudHelperService, moduleMetadataHelperService) {
|
|
70
71
|
this.fieldMetadataRepo = fieldMetadataRepo;
|
|
71
72
|
this.configService = configService;
|
|
72
73
|
this.fileService = fileService;
|
|
74
|
+
this.mediaStorageProviderMetadataRepository = mediaStorageProviderMetadataRepository;
|
|
73
75
|
this.dataSource = dataSource;
|
|
74
76
|
this.solidRegistry = solidRegistry;
|
|
75
77
|
this.crudHelperService = crudHelperService;
|
|
@@ -90,6 +92,7 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
|
|
|
90
92
|
computedFieldTriggerConfig: field.computedFieldTriggerConfig ?? [],
|
|
91
93
|
computedFieldValueProviderName: field.computedFieldValueProvider,
|
|
92
94
|
computedFieldValueProviderCtxt: field.computedFieldValueProviderCtxt ? JSON.parse(field.computedFieldValueProviderCtxt) : {},
|
|
95
|
+
eventContext: {}
|
|
93
96
|
};
|
|
94
97
|
});
|
|
95
98
|
this.solidRegistry.registerComputedFieldMetadata(computedFieldMetadata);
|
|
@@ -670,7 +673,8 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
|
|
|
670
673
|
"encrypt",
|
|
671
674
|
"encryptionType",
|
|
672
675
|
"decryptWhen",
|
|
673
|
-
"columnName"
|
|
676
|
+
"columnName",
|
|
677
|
+
"enableAuditTracking"
|
|
674
678
|
];
|
|
675
679
|
case create_field_metadata_dto_1.SolidFieldType.richText:
|
|
676
680
|
return [
|
|
@@ -956,7 +960,8 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
|
|
|
956
960
|
"encryptionType",
|
|
957
961
|
"decryptWhen",
|
|
958
962
|
"columnName",
|
|
959
|
-
"isUserKey"
|
|
963
|
+
"isUserKey",
|
|
964
|
+
"enableAuditTracking"
|
|
960
965
|
];
|
|
961
966
|
case create_field_metadata_dto_1.SolidFieldType.uuid:
|
|
962
967
|
return [
|
|
@@ -1096,48 +1101,48 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
|
|
|
1096
1101
|
return fieldObject;
|
|
1097
1102
|
}
|
|
1098
1103
|
async resolveS3Url(resolveS3UrlDto) {
|
|
1099
|
-
const { modelName, fieldName, fieldValue, s3KeyFieldName } = resolveS3UrlDto;
|
|
1100
|
-
const modelRepo = this.dataSource.getRepository(model_metadata_entity_1.ModelMetadata);
|
|
1101
|
-
const model = await modelRepo.findOne({
|
|
1102
|
-
where: { singularName: modelName },
|
|
1103
|
-
relations: ['fields']
|
|
1104
|
-
});
|
|
1105
|
-
if (!model) {
|
|
1106
|
-
throw new common_1.NotFoundException(`Model ${modelName} not found`);
|
|
1107
|
-
}
|
|
1108
|
-
const filterFieldMeta = model.fields.find(f => f.name === fieldName);
|
|
1109
|
-
if (!filterFieldMeta) {
|
|
1110
|
-
throw new common_1.NotFoundException(`Field ${fieldName} not found in model ${modelName}`);
|
|
1111
|
-
}
|
|
1112
|
-
const entityRepo = this.dataSource.getRepository(model.singularName);
|
|
1113
|
-
const record = await entityRepo.findOne({
|
|
1114
|
-
where: { [fieldName]: fieldValue }
|
|
1115
|
-
});
|
|
1116
|
-
if (!record) {
|
|
1117
|
-
throw new common_1.NotFoundException(`${modelName} record not found for ${fieldName}="${fieldValue}"`);
|
|
1118
|
-
}
|
|
1119
|
-
const s3Key = record[s3KeyFieldName];
|
|
1120
|
-
if (!s3Key) {
|
|
1121
|
-
throw new common_1.NotFoundException(`Field "${s3KeyFieldName}" has no value in ${modelName}.${fieldName}="${fieldValue}"`);
|
|
1122
|
-
}
|
|
1123
1104
|
let url = "";
|
|
1105
|
+
const normalizedKey = this.normalizeS3Key(resolveS3UrlDto.s3Key);
|
|
1106
|
+
let resolvedBucketName = resolveS3UrlDto.bucketName;
|
|
1107
|
+
if (resolveS3UrlDto.mediaStorageProviderUserKey) {
|
|
1108
|
+
const mediaStorageProvider = await this.mediaStorageProviderMetadataRepository.findOne({
|
|
1109
|
+
where: {
|
|
1110
|
+
name: resolveS3UrlDto.mediaStorageProviderUserKey
|
|
1111
|
+
}
|
|
1112
|
+
});
|
|
1113
|
+
if (!mediaStorageProvider) {
|
|
1114
|
+
throw new common_1.NotFoundException(`MediaStorageProviderMetadata with user key ${resolveS3UrlDto.mediaStorageProviderUserKey} not found`);
|
|
1115
|
+
}
|
|
1116
|
+
resolvedBucketName = mediaStorageProvider.bucketName;
|
|
1117
|
+
}
|
|
1118
|
+
this.logger.debug(`INSIDE::resolveS3Url:: resolvedBucketName: ${resolvedBucketName}`);
|
|
1124
1119
|
if (resolveS3UrlDto.isPrivate == "true") {
|
|
1125
1120
|
const expiryInSeconds = 60 * 60;
|
|
1126
|
-
url = await this.fileService.getSignedUrl(
|
|
1121
|
+
url = await this.fileService.getSignedUrl(normalizedKey, expiryInSeconds, resolvedBucketName);
|
|
1127
1122
|
}
|
|
1128
1123
|
else {
|
|
1129
|
-
url = `https://${
|
|
1124
|
+
url = `https://${resolvedBucketName}.s3.${this.configService.get('S3_AWS_REGION_NAME')}.amazonaws.com/${normalizedKey}`;
|
|
1130
1125
|
}
|
|
1131
1126
|
return { url: url };
|
|
1132
1127
|
}
|
|
1128
|
+
normalizeS3Key(input) {
|
|
1129
|
+
try {
|
|
1130
|
+
const url = new URL(input);
|
|
1131
|
+
return decodeURIComponent(url.pathname.replace(/^\/+/, ""));
|
|
1132
|
+
}
|
|
1133
|
+
catch {
|
|
1134
|
+
return input;
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1133
1137
|
};
|
|
1134
1138
|
exports.FieldMetadataService = FieldMetadataService;
|
|
1135
1139
|
exports.FieldMetadataService = FieldMetadataService = FieldMetadataService_1 = __decorate([
|
|
1136
1140
|
(0, common_1.Injectable)(),
|
|
1137
|
-
__param(
|
|
1141
|
+
__param(4, (0, typeorm_1.InjectDataSource)()),
|
|
1138
1142
|
__metadata("design:paramtypes", [field_metadata_repository_1.FieldMetadataRepository,
|
|
1139
1143
|
config_1.ConfigService,
|
|
1140
1144
|
file_service_1.FileService,
|
|
1145
|
+
media_storage_provider_metadata_repository_1.MediaStorageProviderMetadataRepository,
|
|
1141
1146
|
typeorm_2.DataSource,
|
|
1142
1147
|
solid_registry_1.SolidRegistry,
|
|
1143
1148
|
crud_helper_service_1.CrudHelperService,
|