@solidxai/core 0.1.2 → 0.1.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +8 -0
- package/dist/commands/run-tests.command.d.ts +37 -0
- package/dist/commands/run-tests.command.d.ts.map +1 -0
- package/dist/commands/run-tests.command.js +345 -0
- package/dist/commands/run-tests.command.js.map +1 -0
- package/dist/commands/test-data.command.d.ts +6 -6
- package/dist/commands/test-data.command.d.ts.map +1 -1
- package/dist/commands/test-data.command.js +25 -25
- package/dist/commands/test-data.command.js.map +1 -1
- package/dist/commands/test.command.d.ts +5 -0
- package/dist/commands/test.command.d.ts.map +1 -0
- package/dist/commands/test.command.js +26 -0
- package/dist/commands/test.command.js.map +1 -0
- package/dist/constants/error-messages.d.ts +1 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +1 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/constants.d.ts +3 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -12
- package/dist/constants.js.map +1 -1
- package/dist/controllers/otp-authentication.controller.d.ts +1 -4
- package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
- package/dist/controllers/otp-authentication.controller.js +1 -1
- package/dist/controllers/role-metadata.controller.d.ts +1 -0
- package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/role-metadata.controller.js +15 -0
- package/dist/controllers/role-metadata.controller.js.map +1 -1
- package/dist/controllers/service.controller.d.ts +0 -9
- package/dist/controllers/service.controller.d.ts.map +1 -1
- package/dist/controllers/service.controller.js +0 -45
- package/dist/controllers/service.controller.js.map +1 -1
- package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
- package/dist/dtos/basic-filters.dto.js.map +1 -1
- package/dist/dtos/create-email-template.dto.d.ts.map +1 -1
- package/dist/dtos/create-email-template.dto.js.map +1 -1
- package/dist/dtos/create-list-of-values.dto.d.ts.map +1 -1
- package/dist/dtos/create-list-of-values.dto.js.map +1 -1
- package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
- package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
- package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
- package/dist/dtos/create-security-rule.dto.js.map +1 -1
- package/dist/dtos/create-sms-template.dto.d.ts.map +1 -1
- package/dist/dtos/create-sms-template.dto.js.map +1 -1
- package/dist/dtos/create-user.dto.d.ts +1 -0
- package/dist/dtos/create-user.dto.d.ts.map +1 -1
- package/dist/dtos/create-user.dto.js +2 -1
- package/dist/dtos/create-user.dto.js.map +1 -1
- package/dist/dtos/create-view-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-view-metadata.dto.js.map +1 -1
- package/dist/dtos/otp-sign-in.dto.d.ts +1 -1
- package/dist/dtos/otp-sign-in.dto.d.ts.map +1 -1
- package/dist/dtos/otp-sign-in.dto.js +2 -2
- package/dist/dtos/otp-sign-in.dto.js.map +1 -1
- package/dist/dtos/otp-sign-up.dto.d.ts +2 -2
- package/dist/dtos/otp-sign-up.dto.d.ts.map +1 -1
- package/dist/dtos/otp-sign-up.dto.js +2 -2
- package/dist/dtos/otp-sign-up.dto.js.map +1 -1
- package/dist/dtos/resolve-s3-url.dto.d.ts +2 -5
- package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
- package/dist/dtos/resolve-s3-url.dto.js +1 -13
- package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
- package/dist/dtos/sign-up.dto.d.ts.map +1 -1
- package/dist/dtos/sign-up.dto.js.map +1 -1
- package/dist/dtos/update-email-template.dto.d.ts.map +1 -1
- package/dist/dtos/update-email-template.dto.js.map +1 -1
- package/dist/dtos/update-list-of-values.dto.d.ts.map +1 -1
- package/dist/dtos/update-list-of-values.dto.js.map +1 -1
- package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
- package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
- package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
- package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
- package/dist/dtos/update-security-rule.dto.js.map +1 -1
- package/dist/dtos/update-sms-template.dto.d.ts.map +1 -1
- package/dist/dtos/update-sms-template.dto.js.map +1 -1
- package/dist/dtos/update-view-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-view-metadata.dto.js.map +1 -1
- package/dist/entities/user.entity.d.ts +1 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +6 -1
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -0
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +33 -23
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +3 -0
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +36 -23
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/security.helper.js +1 -0
- package/dist/helpers/security.helper.js.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/repository/solid-base.repository.d.ts +10 -1
- package/dist/repository/solid-base.repository.d.ts.map +1 -1
- package/dist/repository/solid-base.repository.js +109 -0
- package/dist/repository/solid-base.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts +2 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +142 -91
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/module-test-data.service.d.ts.map +1 -1
- package/dist/seeders/module-test-data.service.js +3 -3
- package/dist/seeders/module-test-data.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +12 -25
- package/dist/services/authentication.service.d.ts +22 -8
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +228 -214
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +2 -0
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +18 -2
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud-helper.service.d.ts +4 -0
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +66 -32
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +7 -4
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/file/disk-file.service.d.ts +0 -2
- package/dist/services/file/disk-file.service.d.ts.map +1 -1
- package/dist/services/file/disk-file.service.js +7 -16
- package/dist/services/file/disk-file.service.js.map +1 -1
- package/dist/services/file/index.d.ts +1 -0
- package/dist/services/file/index.d.ts.map +1 -1
- package/dist/services/file/index.js +1 -0
- package/dist/services/file/index.js.map +1 -1
- package/dist/services/file/storage-path-builder.d.ts +17 -0
- package/dist/services/file/storage-path-builder.d.ts.map +1 -0
- package/dist/{seeders/sms-template-seeder.service.js → services/file/storage-path-builder.js} +45 -35
- package/dist/services/file/storage-path-builder.js.map +1 -0
- package/dist/services/media.service.d.ts +1 -1
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +45 -6
- package/dist/services/media.service.js.map +1 -1
- 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 +46 -7
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts +4 -6
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +16 -14
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/queues/common.d.ts +3 -0
- package/dist/services/queues/common.d.ts.map +1 -0
- package/dist/services/queues/common.js +39 -0
- package/dist/services/queues/common.js.map +1 -0
- package/dist/services/queues/database-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/database-publisher.service.js +3 -1
- package/dist/services/queues/database-publisher.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 +5 -2
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.js +13 -6
- package/dist/services/queues/rabbitmq-publisher.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 +9 -5
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/setting.service.d.ts +3 -2
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +7 -4
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +24 -2
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +8 -6
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/solid-core.module.d.ts +3 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +49 -9
- package/dist/solid-core.module.js.map +1 -1
- package/dist/testing/__examples__/register-example-specs.d.ts +3 -0
- package/dist/testing/__examples__/register-example-specs.d.ts.map +1 -0
- package/dist/testing/__examples__/register-example-specs.js +8 -0
- package/dist/testing/__examples__/register-example-specs.js.map +1 -0
- package/dist/testing/__examples__/specs/custom-health.spec.d.ts +17 -0
- package/dist/testing/__examples__/specs/custom-health.spec.d.ts.map +1 -0
- package/dist/testing/__examples__/specs/custom-health.spec.js +30 -0
- package/dist/testing/__examples__/specs/custom-health.spec.js.map +1 -0
- package/dist/testing/adapters/api/api-adapter.d.ts +9 -0
- package/dist/testing/adapters/api/api-adapter.d.ts.map +1 -0
- package/dist/testing/adapters/api/api-adapter.js +76 -0
- package/dist/testing/adapters/api/api-adapter.js.map +1 -0
- package/dist/testing/adapters/api/api.types.d.ts +14 -0
- package/dist/testing/adapters/api/api.types.d.ts.map +1 -0
- package/dist/testing/adapters/api/api.types.js +3 -0
- package/dist/testing/adapters/api/api.types.js.map +1 -0
- package/dist/testing/adapters/ui/playwright-adapter.d.ts +14 -0
- package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -0
- package/dist/testing/adapters/ui/playwright-adapter.js +80 -0
- package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -0
- package/dist/testing/adapters/ui/ui.types.d.ts +5 -0
- package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -0
- package/dist/testing/adapters/ui/ui.types.js +3 -0
- package/dist/testing/adapters/ui/ui.types.js.map +1 -0
- package/dist/testing/contracts/runtime-context.types.d.ts +35 -0
- package/dist/testing/contracts/runtime-context.types.d.ts.map +1 -0
- package/dist/testing/contracts/runtime-context.types.js +3 -0
- package/dist/testing/contracts/runtime-context.types.js.map +1 -0
- package/dist/testing/contracts/test-spec.types.d.ts +21 -0
- package/dist/testing/contracts/test-spec.types.d.ts.map +1 -0
- package/dist/testing/contracts/test-spec.types.js +3 -0
- package/dist/testing/contracts/test-spec.types.js.map +1 -0
- package/dist/testing/contracts/testing-metadata.types.d.ts +41 -0
- package/dist/testing/contracts/testing-metadata.types.d.ts.map +1 -0
- package/dist/testing/contracts/testing-metadata.types.js +3 -0
- package/dist/testing/contracts/testing-metadata.types.js.map +1 -0
- package/dist/testing/core/interpolation.d.ts +4 -0
- package/dist/testing/core/interpolation.d.ts.map +1 -0
- package/dist/testing/core/interpolation.js +180 -0
- package/dist/testing/core/interpolation.js.map +1 -0
- package/dist/testing/core/normalize-steps.d.ts +7 -0
- package/dist/testing/core/normalize-steps.d.ts.map +1 -0
- package/dist/testing/core/normalize-steps.js +20 -0
- package/dist/testing/core/normalize-steps.js.map +1 -0
- package/dist/testing/core/resource-store.d.ts +8 -0
- package/dist/testing/core/resource-store.d.ts.map +1 -0
- package/dist/testing/core/resource-store.js +41 -0
- package/dist/testing/core/resource-store.js.map +1 -0
- package/dist/testing/core/spec-registry.d.ts +10 -0
- package/dist/testing/core/spec-registry.d.ts.map +1 -0
- package/dist/testing/core/spec-registry.js +32 -0
- package/dist/testing/core/spec-registry.js.map +1 -0
- package/dist/testing/core/step-registry.d.ts +10 -0
- package/dist/testing/core/step-registry.d.ts.map +1 -0
- package/dist/testing/core/step-registry.js +26 -0
- package/dist/testing/core/step-registry.js.map +1 -0
- package/dist/testing/core/testing-engine.d.ts +14 -0
- package/dist/testing/core/testing-engine.d.ts.map +1 -0
- package/dist/testing/core/testing-engine.js +97 -0
- package/dist/testing/core/testing-engine.js.map +1 -0
- package/dist/testing/core/timeout.d.ts +2 -0
- package/dist/testing/core/timeout.d.ts.map +1 -0
- package/dist/testing/core/timeout.js +18 -0
- package/dist/testing/core/timeout.js.map +1 -0
- package/dist/testing/reporter/attachments.d.ts +4 -0
- package/dist/testing/reporter/attachments.d.ts.map +1 -0
- package/dist/testing/reporter/attachments.js +25 -0
- package/dist/testing/reporter/attachments.js.map +1 -0
- package/dist/testing/reporter/console-reporter.d.ts +45 -0
- package/dist/testing/reporter/console-reporter.d.ts.map +1 -0
- package/dist/testing/reporter/console-reporter.js +189 -0
- package/dist/testing/reporter/console-reporter.js.map +1 -0
- package/dist/testing/reporter/reporter.types.d.ts +37 -0
- package/dist/testing/reporter/reporter.types.d.ts.map +1 -0
- package/dist/testing/reporter/reporter.types.js +3 -0
- package/dist/testing/reporter/reporter.types.js.map +1 -0
- package/dist/testing/runner/lifecycle.d.ts +9 -0
- package/dist/testing/runner/lifecycle.d.ts.map +1 -0
- package/dist/testing/runner/lifecycle.js +33 -0
- package/dist/testing/runner/lifecycle.js.map +1 -0
- package/dist/testing/runner/run-from-metadata.d.ts +24 -0
- package/dist/testing/runner/run-from-metadata.d.ts.map +1 -0
- package/dist/testing/runner/run-from-metadata.js +70 -0
- package/dist/testing/runner/run-from-metadata.js.map +1 -0
- package/dist/testing/runner/scenario-filter.d.ts +9 -0
- package/dist/testing/runner/scenario-filter.d.ts.map +1 -0
- package/dist/testing/runner/scenario-filter.js +22 -0
- package/dist/testing/runner/scenario-filter.js.map +1 -0
- package/dist/testing/steps/api/auth.step.d.ts +3 -0
- package/dist/testing/steps/api/auth.step.d.ts.map +1 -0
- package/dist/testing/steps/api/auth.step.js +38 -0
- package/dist/testing/steps/api/auth.step.js.map +1 -0
- package/dist/testing/steps/api/index.d.ts +3 -0
- package/dist/testing/steps/api/index.d.ts.map +1 -0
- package/dist/testing/steps/api/index.js +10 -0
- package/dist/testing/steps/api/index.js.map +1 -0
- package/dist/testing/steps/api/request.step.d.ts +3 -0
- package/dist/testing/steps/api/request.step.d.ts.map +1 -0
- package/dist/testing/steps/api/request.step.js +281 -0
- package/dist/testing/steps/api/request.step.js.map +1 -0
- package/dist/testing/steps/assert/http.step.d.ts +3 -0
- package/dist/testing/steps/assert/http.step.d.ts.map +1 -0
- package/dist/testing/steps/assert/http.step.js +27 -0
- package/dist/testing/steps/assert/http.step.js.map +1 -0
- package/dist/testing/steps/assert/index.d.ts +3 -0
- package/dist/testing/steps/assert/index.d.ts.map +1 -0
- package/dist/testing/steps/assert/index.js +12 -0
- package/dist/testing/steps/assert/index.js.map +1 -0
- package/dist/testing/steps/assert/jsonpath.step.d.ts +3 -0
- package/dist/testing/steps/assert/jsonpath.step.d.ts.map +1 -0
- package/dist/testing/steps/assert/jsonpath.step.js +40 -0
- package/dist/testing/steps/assert/jsonpath.step.js.map +1 -0
- package/dist/testing/steps/assert/primitives.step.d.ts +3 -0
- package/dist/testing/steps/assert/primitives.step.d.ts.map +1 -0
- package/dist/testing/steps/assert/primitives.step.js +43 -0
- package/dist/testing/steps/assert/primitives.step.js.map +1 -0
- package/dist/testing/steps/test/index.d.ts +3 -0
- package/dist/testing/steps/test/index.d.ts.map +1 -0
- package/dist/testing/steps/test/index.js +8 -0
- package/dist/testing/steps/test/index.js.map +1 -0
- package/dist/testing/steps/test/test-spec.step.d.ts +3 -0
- package/dist/testing/steps/test/test-spec.step.d.ts.map +1 -0
- package/dist/testing/steps/test/test-spec.step.js +41 -0
- package/dist/testing/steps/test/test-spec.step.js.map +1 -0
- package/dist/testing/steps/ui/actions.step.d.ts +3 -0
- package/dist/testing/steps/ui/actions.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/actions.step.js +31 -0
- package/dist/testing/steps/ui/actions.step.js.map +1 -0
- package/dist/testing/steps/ui/assertions.step.d.ts +3 -0
- package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/assertions.step.js +41 -0
- package/dist/testing/steps/ui/assertions.step.js.map +1 -0
- package/dist/testing/steps/ui/form.step.d.ts +3 -0
- package/dist/testing/steps/ui/form.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/form.step.js +34 -0
- package/dist/testing/steps/ui/form.step.js.map +1 -0
- package/dist/testing/steps/ui/index.d.ts +3 -0
- package/dist/testing/steps/ui/index.d.ts.map +1 -0
- package/dist/testing/steps/ui/index.js +14 -0
- package/dist/testing/steps/ui/index.js.map +1 -0
- package/dist/testing/steps/ui/navigation.step.d.ts +3 -0
- package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/navigation.step.js +39 -0
- package/dist/testing/steps/ui/navigation.step.js.map +1 -0
- package/dist/testing/steps/util/index.d.ts +3 -0
- package/dist/testing/steps/util/index.d.ts.map +1 -0
- package/dist/testing/steps/util/index.js +12 -0
- package/dist/testing/steps/util/index.js.map +1 -0
- package/dist/testing/steps/util/log.step.d.ts +3 -0
- package/dist/testing/steps/util/log.step.d.ts.map +1 -0
- package/dist/testing/steps/util/log.step.js +18 -0
- package/dist/testing/steps/util/log.step.js.map +1 -0
- package/dist/testing/steps/util/require.step.d.ts +3 -0
- package/dist/testing/steps/util/require.step.d.ts.map +1 -0
- package/dist/testing/steps/util/require.step.js +16 -0
- package/dist/testing/steps/util/require.step.js.map +1 -0
- package/dist/testing/steps/util/sleep.step.d.ts +3 -0
- package/dist/testing/steps/util/sleep.step.d.ts.map +1 -0
- package/dist/testing/steps/util/sleep.step.js +13 -0
- package/dist/testing/steps/util/sleep.step.js.map +1 -0
- package/docs/test-data-workflow.md +51 -11
- package/package.json +10 -2
- package/src/commands/run-tests.command.ts +278 -0
- package/src/commands/test-data.command.ts +26 -26
- package/src/commands/test.command.ts +14 -0
- package/src/constants/error-messages.ts +1 -0
- package/src/constants.ts +3 -3
- package/src/controllers/role-metadata.controller.ts +26 -18
- package/src/controllers/service.controller.ts +58 -59
- package/src/dtos/basic-filters.dto.ts +0 -2
- package/src/dtos/create-email-template.dto.ts +7 -0
- package/src/dtos/create-list-of-values.dto.ts +7 -0
- package/src/dtos/create-menu-item-metadata.dto.ts +12 -1
- package/src/dtos/create-role-metadata.dto.ts +9 -0
- package/src/dtos/create-scheduled-job.dto.ts +14 -0
- package/src/dtos/create-security-rule.dto.ts +6 -0
- package/src/dtos/create-sms-template.dto.ts +6 -0
- package/src/dtos/create-user.dto.ts +1 -0
- package/src/dtos/create-view-metadata.dto.ts +11 -0
- package/src/dtos/otp-sign-in.dto.ts +3 -3
- package/src/dtos/otp-sign-up.dto.ts +3 -3
- package/src/dtos/resolve-s3-url.dto.ts +2 -12
- package/src/dtos/sign-up.dto.ts +0 -2
- package/src/dtos/update-email-template.dto.ts +6 -0
- package/src/dtos/update-list-of-values.dto.ts +8 -0
- package/src/dtos/update-menu-item-metadata.dto.ts +12 -0
- package/src/dtos/update-scheduled-job.dto.ts +15 -0
- package/src/dtos/update-security-rule.dto.ts +7 -0
- package/src/dtos/update-sms-template.dto.ts +32 -32
- package/src/dtos/update-view-metadata.dto.ts +12 -0
- package/src/entities/user.entity.ts +3 -0
- package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +43 -32
- package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +45 -33
- package/src/helpers/security.helper.ts +1 -1
- package/src/index.ts +3 -4
- package/src/repository/solid-base.repository.ts +172 -1
- package/src/seeders/module-metadata-seeder.service.ts +191 -150
- package/src/seeders/module-test-data.service.ts +5 -3
- package/src/seeders/permission-metadata-seeder.service.ts +1 -4
- package/src/seeders/seed-data/solid-core-metadata.json +12 -25
- package/src/services/authentication.service.ts +268 -266
- package/src/services/chatter-message.service.ts +18 -1
- package/src/services/crud-helper.service.ts +79 -36
- package/src/services/crud.service.ts +10 -4
- package/src/services/field-metadata.service.ts +0 -71
- package/src/services/file/disk-file.service.ts +8 -18
- package/src/services/file/index.ts +1 -0
- package/src/services/file/storage-path-builder.ts +56 -0
- package/src/services/media.service.ts +13 -7
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +1 -1
- package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -8
- package/src/services/module-metadata.service.ts +18 -15
- package/src/services/queues/common.ts +75 -0
- package/src/services/queues/database-publisher.service.ts +4 -1
- package/src/services/queues/database-subscriber.service.ts +5 -3
- package/src/services/queues/rabbitmq-publisher.service.ts +17 -7
- package/src/services/queues/rabbitmq-subscriber.service.ts +9 -5
- package/src/services/setting.service.ts +5 -3
- package/src/services/settings/default-settings-provider.service.ts +5 -3
- package/src/solid-core.module.ts +20 -12
- package/src/testing/README.md +364 -0
- package/src/testing/__examples__/register-example-specs.ts +6 -0
- package/src/testing/__examples__/specs/custom-health.spec.ts +29 -0
- package/src/testing/__examples__/testing.sample.json +82 -0
- package/src/testing/adapters/api/api-adapter.ts +85 -0
- package/src/testing/adapters/api/api.types.ts +15 -0
- package/src/testing/adapters/ui/playwright-adapter.ts +54 -0
- package/src/testing/adapters/ui/ui.types.ts +4 -0
- package/src/testing/contracts/runtime-context.types.ts +36 -0
- package/src/testing/contracts/test-spec.types.ts +24 -0
- package/src/testing/contracts/testing-metadata.types.ts +46 -0
- package/src/testing/core/interpolation.ts +189 -0
- package/src/testing/core/normalize-steps.ts +21 -0
- package/src/testing/core/resource-store.ts +38 -0
- package/src/testing/core/spec-registry.ts +33 -0
- package/src/testing/core/step-registry.ts +27 -0
- package/src/testing/core/testing-engine.ts +127 -0
- package/src/testing/core/timeout.ts +19 -0
- package/src/testing/reporter/attachments.ts +25 -0
- package/src/testing/reporter/console-reporter.ts +229 -0
- package/src/testing/reporter/reporter.types.ts +36 -0
- package/src/testing/runner/lifecycle.ts +31 -0
- package/src/testing/runner/run-from-metadata.ts +87 -0
- package/src/testing/runner/scenario-filter.ts +33 -0
- package/src/testing/steps/api/auth.step.ts +66 -0
- package/src/testing/steps/api/index.ts +10 -0
- package/src/testing/steps/api/request.step.ts +358 -0
- package/src/testing/steps/assert/http.step.ts +33 -0
- package/src/testing/steps/assert/index.ts +12 -0
- package/src/testing/steps/assert/jsonpath.step.ts +50 -0
- package/src/testing/steps/assert/primitives.step.ts +69 -0
- package/src/testing/steps/test/index.ts +8 -0
- package/src/testing/steps/test/test-spec.step.ts +52 -0
- package/src/testing/steps/ui/actions.step.ts +36 -0
- package/src/testing/steps/ui/assertions.step.ts +54 -0
- package/src/testing/steps/ui/form.step.ts +39 -0
- package/src/testing/steps/ui/index.ts +12 -0
- package/src/testing/steps/ui/navigation.step.ts +53 -0
- package/src/testing/steps/util/index.ts +10 -0
- package/src/testing/steps/util/log.step.ts +19 -0
- package/src/testing/steps/util/require.step.ts +16 -0
- package/src/testing/steps/util/sleep.step.ts +15 -0
- package/tsconfig.json +35 -25
- package/tsconfig.tests.json +14 -0
- package/dist/passport-strategies/local.strategy.d.ts +0 -15
- package/dist/passport-strategies/local.strategy.d.ts.map +0 -1
- package/dist/passport-strategies/local.strategy.js +0 -44
- package/dist/passport-strategies/local.strategy.js.map +0 -1
- package/dist/seeders/email-template-seeder.service.d.ts +0 -10
- package/dist/seeders/email-template-seeder.service.d.ts.map +0 -1
- package/dist/seeders/email-template-seeder.service.js +0 -84
- package/dist/seeders/email-template-seeder.service.js.map +0 -1
- package/dist/seeders/sms-template-seeder.service.d.ts +0 -10
- package/dist/seeders/sms-template-seeder.service.d.ts.map +0 -1
- package/dist/seeders/sms-template-seeder.service.js.map +0 -1
- package/dist/seeders/user-seeder.service.d.ts +0 -10
- package/dist/seeders/user-seeder.service.d.ts.map +0 -1
- package/dist/seeders/user-seeder.service.js +0 -44
- package/dist/seeders/user-seeder.service.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/passport-strategies/local.strategy.ts +0 -28
- package/src/seeders/email-template-seeder.service.ts +0 -49
- package/src/seeders/sms-template-seeder.service.ts +0 -50
- package/src/seeders/user-seeder.service.ts +0 -33
|
@@ -5,66 +5,81 @@ export class UpdateScheduledJobDto {
|
|
|
5
5
|
@IsOptional()
|
|
6
6
|
@IsInt()
|
|
7
7
|
id: number;
|
|
8
|
+
|
|
8
9
|
@IsNotEmpty()
|
|
9
10
|
@IsOptional()
|
|
10
11
|
@IsString()
|
|
11
12
|
@ApiProperty()
|
|
12
13
|
scheduleName: string;
|
|
14
|
+
|
|
13
15
|
@IsNotEmpty()
|
|
14
16
|
@IsOptional()
|
|
15
17
|
@IsBoolean()
|
|
16
18
|
@ApiProperty()
|
|
17
19
|
isActive: boolean;
|
|
20
|
+
|
|
18
21
|
@IsNotEmpty()
|
|
19
22
|
@IsOptional()
|
|
20
23
|
@IsString()
|
|
21
24
|
@ApiProperty()
|
|
22
25
|
frequency: string;
|
|
26
|
+
|
|
23
27
|
@IsOptional()
|
|
24
28
|
@IsDate()
|
|
25
29
|
@ApiProperty()
|
|
26
30
|
startTime: Date;
|
|
31
|
+
|
|
27
32
|
@IsOptional()
|
|
28
33
|
@IsDate()
|
|
29
34
|
@ApiProperty()
|
|
30
35
|
endTime: Date;
|
|
36
|
+
|
|
31
37
|
@IsOptional()
|
|
32
38
|
@IsDate()
|
|
33
39
|
@ApiProperty()
|
|
34
40
|
startDate: Date;
|
|
41
|
+
|
|
35
42
|
@IsOptional()
|
|
36
43
|
@IsDate()
|
|
37
44
|
@ApiProperty()
|
|
38
45
|
endDate: Date;
|
|
46
|
+
|
|
39
47
|
@IsOptional()
|
|
40
48
|
@IsInt()
|
|
41
49
|
@ApiProperty()
|
|
42
50
|
dayOfMonth: number;
|
|
51
|
+
|
|
43
52
|
@IsOptional()
|
|
44
53
|
@IsDate()
|
|
45
54
|
@ApiProperty()
|
|
46
55
|
lastRunAt: Date;
|
|
56
|
+
|
|
47
57
|
@IsOptional()
|
|
48
58
|
@IsDate()
|
|
49
59
|
@ApiProperty()
|
|
50
60
|
nextRunAt: Date;
|
|
61
|
+
|
|
51
62
|
@IsOptional()
|
|
52
63
|
@IsString()
|
|
53
64
|
@ApiProperty()
|
|
54
65
|
dayOfWeek: string;
|
|
66
|
+
|
|
55
67
|
@IsNotEmpty()
|
|
56
68
|
@IsOptional()
|
|
57
69
|
@IsString()
|
|
58
70
|
@ApiProperty()
|
|
59
71
|
job: string;
|
|
72
|
+
|
|
60
73
|
@IsOptional()
|
|
61
74
|
@IsString()
|
|
62
75
|
@ApiProperty()
|
|
63
76
|
cronExpression: string;
|
|
77
|
+
|
|
64
78
|
@IsOptional()
|
|
65
79
|
@IsInt()
|
|
66
80
|
@ApiProperty()
|
|
67
81
|
moduleId: number;
|
|
82
|
+
|
|
68
83
|
@IsString()
|
|
69
84
|
@IsOptional()
|
|
70
85
|
@ApiProperty()
|
|
@@ -5,32 +5,39 @@ export class UpdateSecurityRuleDto {
|
|
|
5
5
|
@IsOptional()
|
|
6
6
|
@IsInt()
|
|
7
7
|
id: number;
|
|
8
|
+
|
|
8
9
|
@IsNotEmpty()
|
|
9
10
|
@IsOptional()
|
|
10
11
|
@IsString()
|
|
11
12
|
@ApiProperty()
|
|
12
13
|
name: string;
|
|
14
|
+
|
|
13
15
|
@IsNotEmpty()
|
|
14
16
|
@IsOptional()
|
|
15
17
|
@IsString()
|
|
16
18
|
@ApiProperty()
|
|
17
19
|
description: string;
|
|
20
|
+
|
|
18
21
|
@IsOptional()
|
|
19
22
|
@IsInt()
|
|
20
23
|
@ApiProperty()
|
|
21
24
|
roleId: number;
|
|
25
|
+
|
|
22
26
|
@IsString()
|
|
23
27
|
@IsOptional()
|
|
24
28
|
@ApiProperty()
|
|
25
29
|
roleUserKey: string;
|
|
30
|
+
|
|
26
31
|
@IsOptional()
|
|
27
32
|
@IsInt()
|
|
28
33
|
@ApiProperty()
|
|
29
34
|
modelMetadataId: number;
|
|
35
|
+
|
|
30
36
|
@IsString()
|
|
31
37
|
@IsOptional()
|
|
32
38
|
@ApiProperty()
|
|
33
39
|
modelMetadataUserKey: string;
|
|
40
|
+
|
|
34
41
|
@IsNotEmpty()
|
|
35
42
|
@IsOptional()
|
|
36
43
|
@IsJSON()
|
|
@@ -3,42 +3,42 @@ import { CreateSmsTemplateDto } from './create-sms-template.dto';
|
|
|
3
3
|
import { IsString } from 'class-validator';
|
|
4
4
|
import { IsOptional, Matches, IsNotEmpty, IsBoolean } from 'class-validator';
|
|
5
5
|
|
|
6
|
-
export class UpdateSmsTemplateDto extends PartialType(CreateSmsTemplateDto) {
|
|
7
|
-
@IsOptional()
|
|
8
|
-
@IsString()
|
|
9
|
-
@ApiProperty()
|
|
10
|
-
type: string;
|
|
6
|
+
export class UpdateSmsTemplateDto extends PartialType(CreateSmsTemplateDto) {
|
|
7
|
+
@IsOptional()
|
|
8
|
+
@IsString()
|
|
9
|
+
@ApiProperty()
|
|
10
|
+
type: string;
|
|
11
11
|
|
|
12
|
-
@IsNotEmpty()
|
|
13
|
-
@IsOptional()
|
|
14
|
-
@Matches(/[a-z]+(-[a-z]+)*/)
|
|
15
|
-
@IsString()
|
|
16
|
-
@ApiProperty()
|
|
17
|
-
name: string;
|
|
12
|
+
@IsNotEmpty()
|
|
13
|
+
@IsOptional()
|
|
14
|
+
@Matches(/[a-z]+(-[a-z]+)*/)
|
|
15
|
+
@IsString()
|
|
16
|
+
@ApiProperty()
|
|
17
|
+
name: string;
|
|
18
18
|
|
|
19
|
-
@IsOptional()
|
|
20
|
-
@IsString()
|
|
21
|
-
@ApiProperty()
|
|
22
|
-
smsProviderTemplateId: string;
|
|
19
|
+
@IsOptional()
|
|
20
|
+
@IsString()
|
|
21
|
+
@ApiProperty()
|
|
22
|
+
smsProviderTemplateId: string;
|
|
23
23
|
|
|
24
|
-
@IsNotEmpty()
|
|
25
|
-
@IsOptional()
|
|
26
|
-
@IsString()
|
|
27
|
-
@ApiProperty()
|
|
28
|
-
displayName: string;
|
|
24
|
+
@IsNotEmpty()
|
|
25
|
+
@IsOptional()
|
|
26
|
+
@IsString()
|
|
27
|
+
@ApiProperty()
|
|
28
|
+
displayName: string;
|
|
29
29
|
|
|
30
|
-
@IsOptional()
|
|
31
|
-
@IsString()
|
|
32
|
-
@ApiProperty()
|
|
33
|
-
body: string;
|
|
30
|
+
@IsOptional()
|
|
31
|
+
@IsString()
|
|
32
|
+
@ApiProperty()
|
|
33
|
+
body: string;
|
|
34
34
|
|
|
35
|
-
@IsOptional()
|
|
36
|
-
@IsString()
|
|
37
|
-
@ApiProperty()
|
|
38
|
-
description: string;
|
|
35
|
+
@IsOptional()
|
|
36
|
+
@IsString()
|
|
37
|
+
@ApiProperty()
|
|
38
|
+
description: string;
|
|
39
39
|
|
|
40
|
-
@IsOptional()
|
|
41
|
-
@IsBoolean()
|
|
42
|
-
@ApiProperty()
|
|
43
|
-
active: boolean;
|
|
40
|
+
@IsOptional()
|
|
41
|
+
@IsBoolean()
|
|
42
|
+
@ApiProperty()
|
|
43
|
+
active: boolean;
|
|
44
44
|
} { }
|
|
@@ -7,58 +7,70 @@ export class UpdateViewMetadataDto {
|
|
|
7
7
|
@IsOptional()
|
|
8
8
|
@IsInt()
|
|
9
9
|
id: number;
|
|
10
|
+
|
|
10
11
|
@IsNotEmpty()
|
|
11
12
|
@IsOptional()
|
|
12
13
|
@Matches(/[a-z]+(-[a-z]+)*/)
|
|
13
14
|
@IsString()
|
|
14
15
|
@ApiProperty()
|
|
15
16
|
name: string;
|
|
17
|
+
|
|
16
18
|
@IsNotEmpty()
|
|
17
19
|
@IsOptional()
|
|
18
20
|
@IsString()
|
|
19
21
|
@ApiProperty()
|
|
20
22
|
displayName: string;
|
|
23
|
+
|
|
21
24
|
@IsNotEmpty()
|
|
22
25
|
@IsOptional()
|
|
23
26
|
@IsString()
|
|
24
27
|
@ApiProperty()
|
|
25
28
|
type: string;
|
|
29
|
+
|
|
26
30
|
@IsNotEmpty()
|
|
27
31
|
@IsOptional()
|
|
28
32
|
@IsJSON()
|
|
29
33
|
@ApiProperty()
|
|
30
34
|
context: any;
|
|
35
|
+
|
|
31
36
|
@IsNotEmpty()
|
|
32
37
|
@IsOptional()
|
|
33
38
|
@IsJSON()
|
|
34
39
|
@ApiProperty()
|
|
35
40
|
layout: any;
|
|
41
|
+
|
|
36
42
|
@IsOptional()
|
|
37
43
|
@IsInt()
|
|
38
44
|
@ApiProperty()
|
|
39
45
|
moduleId: number;
|
|
46
|
+
|
|
40
47
|
@IsString()
|
|
41
48
|
@IsOptional()
|
|
42
49
|
@ApiProperty()
|
|
43
50
|
moduleUserKey: string;
|
|
51
|
+
|
|
44
52
|
@IsOptional()
|
|
45
53
|
@IsInt()
|
|
46
54
|
@ApiProperty()
|
|
47
55
|
modelId: number;
|
|
56
|
+
|
|
48
57
|
@IsString()
|
|
49
58
|
@IsOptional()
|
|
50
59
|
@ApiProperty()
|
|
51
60
|
modelUserKey: string;
|
|
61
|
+
|
|
52
62
|
@IsOptional()
|
|
53
63
|
@ApiProperty()
|
|
54
64
|
@IsArray()
|
|
55
65
|
@ValidateNested({ each: true })
|
|
56
66
|
@Type(() => UpdateUserViewMetadataDto)
|
|
57
67
|
userViewMetadata: UpdateUserViewMetadataDto[];
|
|
68
|
+
|
|
58
69
|
@IsOptional()
|
|
59
70
|
@IsArray()
|
|
60
71
|
@ApiProperty()
|
|
61
72
|
userViewMetadataIds: number[];
|
|
73
|
+
|
|
62
74
|
@IsString()
|
|
63
75
|
@IsOptional()
|
|
64
76
|
@ApiProperty()
|
|
@@ -111,6 +111,9 @@ export class User extends CommonEntity {
|
|
|
111
111
|
// dont send to client
|
|
112
112
|
@Column({ nullable: true })
|
|
113
113
|
rehashedAt: Date;
|
|
114
|
+
// dont send to client
|
|
115
|
+
@Column({ type: "int", default: 0 })
|
|
116
|
+
failedLoginAttempts: number = 0;
|
|
114
117
|
@Expose()
|
|
115
118
|
_media: any;
|
|
116
119
|
}
|
|
@@ -14,6 +14,8 @@ export interface ManyToManyRelationFieldOptions {
|
|
|
14
14
|
entityManager: EntityManager;
|
|
15
15
|
fieldName: string;
|
|
16
16
|
relationCoModelFieldName?: string;
|
|
17
|
+
isUpdate?: boolean;
|
|
18
|
+
entityId?: number;
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
const linkCommands = [RelationFieldsCommand.link, RelationFieldsCommand.unlink, RelationFieldsCommand.set];
|
|
@@ -74,16 +76,21 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
74
76
|
const relatedEntityName = classify(this.options.relationCoModelSingularName);
|
|
75
77
|
const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName)
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
const result = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
|
|
80
|
+
if (result !== undefined) {
|
|
81
|
+
dto[this.valueFieldName] = result;
|
|
82
|
+
} else {
|
|
83
|
+
delete dto[this.valueFieldName];
|
|
84
|
+
}
|
|
78
85
|
return dto;
|
|
79
86
|
}
|
|
80
87
|
|
|
81
|
-
private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[]> {
|
|
88
|
+
private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[] | undefined> {
|
|
82
89
|
// TODO : Need to add support for the multiple commands
|
|
83
90
|
const command = dto[this.commandFieldName];
|
|
84
91
|
const values = dto[this.valueFieldName];
|
|
85
92
|
const ids = dto[this.idFieldName];
|
|
86
|
-
|
|
93
|
+
|
|
87
94
|
switch (command) {
|
|
88
95
|
case RelationFieldsCommand.create:
|
|
89
96
|
return await this.transformForCommandCreate(values, relatedEntityRepository);
|
|
@@ -94,15 +101,15 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
94
101
|
case RelationFieldsCommand.clear:
|
|
95
102
|
return this.transformForCommandClear();
|
|
96
103
|
case RelationFieldsCommand.set:
|
|
97
|
-
return await this.transformForCommandSet(ids, relatedEntityRepository
|
|
104
|
+
return await this.transformForCommandSet(ids, relatedEntityRepository);
|
|
98
105
|
case RelationFieldsCommand.link:
|
|
99
|
-
return await this.tranformForCommandLink(ids, relatedEntityRepository
|
|
106
|
+
return await this.tranformForCommandLink(ids, relatedEntityRepository);
|
|
100
107
|
case RelationFieldsCommand.unlink:
|
|
101
|
-
return await this.transformForCommandUnLink(ids
|
|
108
|
+
return await this.transformForCommandUnLink(ids);
|
|
102
109
|
default:
|
|
103
110
|
this.logger.log(`Invalid command ${command}`);
|
|
104
111
|
return null;
|
|
105
|
-
|
|
112
|
+
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
115
|
|
|
@@ -110,46 +117,50 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
110
117
|
return []
|
|
111
118
|
}
|
|
112
119
|
|
|
113
|
-
private async transformForCommandSet(ids: any[], relatedEntityRepository: any
|
|
114
|
-
// Load the entities with the ids passed
|
|
120
|
+
private async transformForCommandSet(ids: any[], relatedEntityRepository: any): Promise<any[]> {
|
|
115
121
|
const loadedEntities: any[] = await relatedEntityRepository.find({
|
|
116
|
-
where : {id: In(ids) }
|
|
122
|
+
where : {id: In(ids) }
|
|
117
123
|
})
|
|
118
124
|
if (loadedEntities.length !== ids.length) {
|
|
119
|
-
throw new Error('Invalid entity ids provided for
|
|
125
|
+
throw new Error('Invalid entity ids provided for set');
|
|
120
126
|
}
|
|
121
127
|
|
|
122
128
|
return loadedEntities;
|
|
123
129
|
}
|
|
124
130
|
|
|
125
|
-
private async tranformForCommandLink(ids: any, relatedEntityRepository: any
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
131
|
+
private async tranformForCommandLink(ids: any[], relatedEntityRepository: any): Promise<undefined> {
|
|
132
|
+
if (!this.options.isUpdate) {
|
|
133
|
+
throw new Error('Link command is only supported for update operations');
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const count: number = await relatedEntityRepository.count({
|
|
137
|
+
where: { id: In(ids) }
|
|
138
|
+
});
|
|
139
|
+
if (count !== ids.length) {
|
|
132
140
|
throw new Error('Invalid entity ids provided for linking');
|
|
133
141
|
}
|
|
134
|
-
tranformedRelatedFields.push(...loadedEntities);
|
|
135
142
|
|
|
136
|
-
|
|
143
|
+
await this.options.entityManager
|
|
144
|
+
.createQueryBuilder()
|
|
145
|
+
.relation(classify(this.options.modelSingularName), this.valueFieldName)
|
|
146
|
+
.of(this.options.entityId)
|
|
147
|
+
.add(ids);
|
|
148
|
+
|
|
149
|
+
return undefined;
|
|
137
150
|
}
|
|
138
151
|
|
|
139
|
-
private async transformForCommandUnLink(ids: any
|
|
140
|
-
if (
|
|
141
|
-
throw new Error('
|
|
142
|
-
}
|
|
152
|
+
private async transformForCommandUnLink(ids: any[]): Promise<undefined> {
|
|
153
|
+
if (!this.options.isUpdate) {
|
|
154
|
+
throw new Error('Unlink command is only supported for update operations');
|
|
155
|
+
}
|
|
143
156
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const filteredEntities = entityInstance[this.valueFieldName].filter((entity) => !ids.includes(entity.id));
|
|
150
|
-
tranformedRelatedFields.push(...filteredEntities);
|
|
157
|
+
await this.options.entityManager
|
|
158
|
+
.createQueryBuilder()
|
|
159
|
+
.relation(classify(this.options.modelSingularName), this.valueFieldName)
|
|
160
|
+
.of(this.options.entityId)
|
|
161
|
+
.remove(ids);
|
|
151
162
|
|
|
152
|
-
return
|
|
163
|
+
return undefined;
|
|
153
164
|
}
|
|
154
165
|
|
|
155
166
|
private async transformForCommandCreate(values: any[], relatedEntityRepository: any): Promise<any[]> {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { classify } from "@angular-devkit/core/src/utils/strings";
|
|
2
|
+
import { Logger } from "@nestjs/common";
|
|
2
3
|
import { isEmpty, isEnum, isInt, isNotEmpty } from "class-validator";
|
|
3
4
|
import { RelationFieldsCommand } from "src/dtos/create-field-metadata.dto";
|
|
4
|
-
import { FieldMetadata } from "src/entities/field-metadata.entity";
|
|
5
5
|
import { FieldCrudManager, ValidationError } from "src/interfaces";
|
|
6
6
|
import { EntityManager, In } from "typeorm";
|
|
7
7
|
|
|
@@ -13,12 +13,15 @@ export interface OneToManyRelationFieldOptions {
|
|
|
13
13
|
modelSingularName: string | undefined | null;
|
|
14
14
|
inverseFieldName: string | undefined | null;
|
|
15
15
|
entityManager: EntityManager | undefined | null;
|
|
16
|
+
isUpdate?: boolean;
|
|
17
|
+
entityId?: number;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
const linkCommands = [RelationFieldsCommand.link, RelationFieldsCommand.unlink, RelationFieldsCommand.set];
|
|
19
21
|
|
|
20
22
|
// This implementation is meant to be used for many-to-one relation field
|
|
21
23
|
export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
24
|
+
private readonly logger = new Logger(OneToManyRelationFieldCrudManager.name);
|
|
22
25
|
|
|
23
26
|
private readonly valueFieldName: string;
|
|
24
27
|
private readonly idFieldName: string;
|
|
@@ -74,18 +77,22 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
74
77
|
}
|
|
75
78
|
|
|
76
79
|
async transformForCreate(dto: any): Promise<any> {
|
|
77
|
-
// const relatedFieldData: any[] = dto[this.fieldName()];
|
|
78
80
|
const currentEntityName = classify(this.options.modelSingularName);
|
|
79
81
|
const currentEntityRepository = this.options.entityManager.getRepository(currentEntityName);
|
|
80
82
|
|
|
81
83
|
const relatedEntityName = classify(this.options.relationCoModelSingularName);
|
|
82
84
|
const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName);
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
const result = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
|
|
87
|
+
if (result !== undefined) {
|
|
88
|
+
dto[this.valueFieldName] = result;
|
|
89
|
+
} else {
|
|
90
|
+
delete dto[this.valueFieldName];
|
|
91
|
+
}
|
|
85
92
|
return dto;
|
|
86
93
|
}
|
|
87
94
|
|
|
88
|
-
private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[]> {
|
|
95
|
+
private async transformByCommand(dto: any, relatedEntityRepository: any, currentEntityRepository: any): Promise<any[] | undefined> {
|
|
89
96
|
// TODO : Need to add support for the multiple commands
|
|
90
97
|
const command = dto[this.commandFieldName];
|
|
91
98
|
const values = dto[this.valueFieldName];
|
|
@@ -101,13 +108,14 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
101
108
|
case RelationFieldsCommand.clear:
|
|
102
109
|
return this.transformForCommandClear();
|
|
103
110
|
case RelationFieldsCommand.set:
|
|
104
|
-
return await this.transformForCommandSet(ids, relatedEntityRepository
|
|
111
|
+
return await this.transformForCommandSet(ids, relatedEntityRepository);
|
|
105
112
|
case RelationFieldsCommand.link:
|
|
106
|
-
return await this.tranformForCommandLink(ids, relatedEntityRepository
|
|
113
|
+
return await this.tranformForCommandLink(ids, relatedEntityRepository);
|
|
107
114
|
case RelationFieldsCommand.unlink:
|
|
108
|
-
return await this.transformForCommandUnLink(ids
|
|
115
|
+
return await this.transformForCommandUnLink(ids);
|
|
109
116
|
default:
|
|
110
|
-
|
|
117
|
+
this.logger.log(`Invalid command ${command}`);
|
|
118
|
+
return null;
|
|
111
119
|
}
|
|
112
120
|
}
|
|
113
121
|
|
|
@@ -115,46 +123,50 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
|
|
|
115
123
|
return []
|
|
116
124
|
}
|
|
117
125
|
|
|
118
|
-
private async transformForCommandSet(ids: any[], relatedEntityRepository: any
|
|
119
|
-
// Load the entities with the ids passed
|
|
126
|
+
private async transformForCommandSet(ids: any[], relatedEntityRepository: any): Promise<any[]> {
|
|
120
127
|
const loadedEntities: any[] = await relatedEntityRepository.find({
|
|
121
|
-
where : {id: In(ids) }
|
|
128
|
+
where : {id: In(ids) }
|
|
122
129
|
})
|
|
123
130
|
if (loadedEntities.length !== ids.length) {
|
|
124
|
-
throw new Error('Invalid entity ids provided for
|
|
131
|
+
throw new Error('Invalid entity ids provided for set');
|
|
125
132
|
}
|
|
126
133
|
|
|
127
134
|
return loadedEntities;
|
|
128
135
|
}
|
|
129
136
|
|
|
130
|
-
private async tranformForCommandLink(ids: any, relatedEntityRepository: any
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
private async tranformForCommandLink(ids: any[], relatedEntityRepository: any): Promise<undefined> {
|
|
138
|
+
if (!this.options.isUpdate) {
|
|
139
|
+
throw new Error('Link command is only supported for update operations');
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const count: number = await relatedEntityRepository.count({
|
|
143
|
+
where: { id: In(ids) }
|
|
144
|
+
});
|
|
145
|
+
if (count !== ids.length) {
|
|
137
146
|
throw new Error('Invalid entity ids provided for linking');
|
|
138
147
|
}
|
|
139
|
-
tranformedRelatedFields.push(...loadedEntities);
|
|
140
148
|
|
|
141
|
-
|
|
149
|
+
await this.options.entityManager
|
|
150
|
+
.createQueryBuilder()
|
|
151
|
+
.relation(classify(this.options.modelSingularName), this.valueFieldName)
|
|
152
|
+
.of(this.options.entityId)
|
|
153
|
+
.add(ids);
|
|
154
|
+
|
|
155
|
+
return undefined;
|
|
142
156
|
}
|
|
143
157
|
|
|
144
|
-
private async transformForCommandUnLink(ids: any
|
|
145
|
-
if (
|
|
146
|
-
throw new Error('
|
|
147
|
-
}
|
|
158
|
+
private async transformForCommandUnLink(ids: any[]): Promise<undefined> {
|
|
159
|
+
if (!this.options.isUpdate) {
|
|
160
|
+
throw new Error('Unlink command is only supported for update operations');
|
|
161
|
+
}
|
|
148
162
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const filteredEntities = entityInstance[this.valueFieldName].filter((entity) => !ids.includes(entity.id));
|
|
155
|
-
tranformedRelatedFields.push(...filteredEntities);
|
|
163
|
+
await this.options.entityManager
|
|
164
|
+
.createQueryBuilder()
|
|
165
|
+
.relation(classify(this.options.modelSingularName), this.valueFieldName)
|
|
166
|
+
.of(this.options.entityId)
|
|
167
|
+
.remove(ids);
|
|
156
168
|
|
|
157
|
-
return
|
|
169
|
+
return undefined;
|
|
158
170
|
}
|
|
159
171
|
|
|
160
172
|
private async transformForCommandCreate(values: any[], relatedEntityRepository: any): Promise<any[]> {
|
|
@@ -24,7 +24,7 @@ export function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {
|
|
|
24
24
|
|
|
25
25
|
// clickjacking defense (modern)
|
|
26
26
|
"frame-ancestors": ["'none'"],
|
|
27
|
-
|
|
27
|
+
"style-src": ["'self'"],
|
|
28
28
|
// add/adjust as needed for your app:
|
|
29
29
|
// "script-src": ["'self'"], // add hashes/nonces/CSPRO if needed
|
|
30
30
|
// "style-src": ["'self'", "'unsafe-inline'"],
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,8 @@ export * from './commands/refresh-module.command'
|
|
|
4
4
|
export * from './commands/remove-fields.command'
|
|
5
5
|
export * from './commands/seed.command'
|
|
6
6
|
export * from './commands/test-data.command'
|
|
7
|
+
export * from './commands/run-tests.command'
|
|
8
|
+
export * from './commands/test.command'
|
|
7
9
|
|
|
8
10
|
export * from './config/cache.options'
|
|
9
11
|
|
|
@@ -179,6 +181,7 @@ export * from './helpers/security.helper'
|
|
|
179
181
|
export * from './helpers/model-metadata-helper.service'
|
|
180
182
|
export * from './helpers/image-encoding.helper'
|
|
181
183
|
export * from './helpers/solid-microservice-adapter.service'
|
|
184
|
+
export * from './helpers/typeorm-db-helper';
|
|
182
185
|
|
|
183
186
|
export * from './services/crud.service'
|
|
184
187
|
export * from './interceptors/logging.interceptor'
|
|
@@ -209,16 +212,12 @@ export * from './jobs/msg91-whatsapp-subscriber.service'
|
|
|
209
212
|
export * from './listeners/user-registration.listener'
|
|
210
213
|
|
|
211
214
|
export * from './passport-strategies/google-oauth.strategy'
|
|
212
|
-
export * from './passport-strategies/local.strategy'
|
|
213
215
|
|
|
214
216
|
export * from './services/selection-providers/list-of-values-selection-providers.service'
|
|
215
217
|
|
|
216
218
|
// seed-data
|
|
217
|
-
export * from './seeders/email-template-seeder.service'
|
|
218
219
|
export * from './seeders/permission-metadata-seeder.service'
|
|
219
|
-
export * from './seeders/sms-template-seeder.service'
|
|
220
220
|
export * from './seeders/module-metadata-seeder.service'
|
|
221
|
-
export * from './seeders/user-seeder.service'
|
|
222
221
|
|
|
223
222
|
// export * from './services/access-token-storage.service'
|
|
224
223
|
export * from './services/action-metadata.service'
|