@researchdatabox/redbox-core 5.0.3 → 5.0.4-beta.12498
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/AttachmentStagingIdentity.d.ts +3 -0
- package/dist/AttachmentStagingIdentity.d.ts.map +1 -0
- package/dist/AttachmentStagingIdentity.js +10 -0
- package/dist/CoreController.d.ts +7 -3
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +85 -3
- package/dist/DatastreamService.d.ts +4 -0
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/HarvestRunService.d.ts +4 -3
- package/dist/HarvestRunService.d.ts.map +1 -1
- package/dist/HarvestRunService.js +1 -1
- package/dist/RecordConcurrencyObservability.d.ts +51 -0
- package/dist/RecordConcurrencyObservability.d.ts.map +1 -0
- package/dist/RecordConcurrencyObservability.js +136 -0
- package/dist/RecordEntityTag.d.ts +31 -0
- package/dist/RecordEntityTag.d.ts.map +1 -0
- package/dist/RecordEntityTag.js +101 -0
- package/dist/RecordFormFingerprint.d.ts +7 -0
- package/dist/RecordFormFingerprint.d.ts.map +1 -0
- package/dist/RecordFormFingerprint.js +106 -0
- package/dist/RecordHttpConcurrency.d.ts +60 -0
- package/dist/RecordHttpConcurrency.d.ts.map +1 -0
- package/dist/RecordHttpConcurrency.js +181 -0
- package/dist/RecordSaveResponse.d.ts +219 -0
- package/dist/RecordSaveResponse.d.ts.map +1 -0
- package/dist/RecordSaveResponse.js +639 -0
- package/dist/RecordStorageConcurrency.d.ts +48 -0
- package/dist/RecordStorageConcurrency.d.ts.map +1 -0
- package/dist/RecordStorageConcurrency.js +103 -0
- package/dist/RecordWriteClassification.d.ts +12 -0
- package/dist/RecordWriteClassification.d.ts.map +1 -0
- package/dist/RecordWriteClassification.js +70 -0
- package/dist/RecordsService.d.ts +105 -12
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/RecordsService.js +44 -1
- package/dist/SearchService.d.ts +2 -1
- package/dist/SearchService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +48 -8
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/StorageService.js +19 -1
- package/dist/StorageServiceResponse.d.ts +22 -1
- package/dist/StorageServiceResponse.d.ts.map +1 -1
- package/dist/StorageServiceResponse.js +22 -4
- package/dist/action-execution/audit.d.ts +41 -0
- package/dist/action-execution/audit.d.ts.map +1 -0
- package/dist/action-execution/audit.js +122 -0
- package/dist/action-execution/executor.d.ts +24 -0
- package/dist/action-execution/executor.d.ts.map +1 -0
- package/dist/action-execution/executor.js +435 -0
- package/dist/action-execution/failure.d.ts +49 -0
- package/dist/action-execution/failure.d.ts.map +1 -0
- package/dist/action-execution/failure.js +129 -0
- package/dist/action-execution/index.d.ts +7 -0
- package/dist/action-execution/index.d.ts.map +1 -0
- package/dist/action-execution/index.js +23 -0
- package/dist/action-execution/legacy-result.d.ts +21 -0
- package/dist/action-execution/legacy-result.d.ts.map +1 -0
- package/dist/action-execution/legacy-result.js +70 -0
- package/dist/action-execution/policy.d.ts +12 -0
- package/dist/action-execution/policy.d.ts.map +1 -0
- package/dist/action-execution/policy.js +138 -0
- package/dist/action-execution/types.d.ts +121 -0
- package/dist/action-execution/types.d.ts.map +1 -0
- package/dist/action-execution/types.js +22 -0
- package/dist/api-routes/groups/branding.d.ts +8 -0
- package/dist/api-routes/groups/branding.d.ts.map +1 -1
- package/dist/api-routes/groups/branding.js +86 -11
- package/dist/api-routes/groups/dashboard-config.d.ts +12 -9
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -1
- package/dist/api-routes/groups/dashboard-config.js +136 -73
- package/dist/api-routes/groups/forms.d.ts.map +1 -1
- package/dist/api-routes/groups/forms.js +10 -2
- package/dist/api-routes/groups/record-schemas.d.ts +5 -0
- package/dist/api-routes/groups/record-schemas.d.ts.map +1 -0
- package/dist/api-routes/groups/record-schemas.js +181 -0
- package/dist/api-routes/groups/records.d.ts +1 -0
- package/dist/api-routes/groups/records.d.ts.map +1 -1
- package/dist/api-routes/groups/records.js +141 -26
- package/dist/api-routes/index.d.ts +3 -0
- package/dist/api-routes/index.d.ts.map +1 -1
- package/dist/api-routes/index.js +4 -1
- package/dist/api-routes/openapi.d.ts.map +1 -1
- package/dist/api-routes/openapi.js +7 -5
- package/dist/api-routes/record-schema-openapi.d.ts +26 -0
- package/dist/api-routes/record-schema-openapi.d.ts.map +1 -0
- package/dist/api-routes/record-schema-openapi.js +38 -0
- package/dist/api-routes/record-schema-response.d.ts +40 -0
- package/dist/api-routes/record-schema-response.d.ts.map +1 -0
- package/dist/api-routes/record-schema-response.js +89 -0
- package/dist/api-routes/request-extraction.d.ts.map +1 -1
- package/dist/api-routes/request-extraction.js +10 -8
- package/dist/api-routes/route-factory.d.ts.map +1 -1
- package/dist/api-routes/route-factory.js +2 -1
- package/dist/api-routes/route-registry.d.ts.map +1 -1
- package/dist/api-routes/route-registry.js +3 -1
- package/dist/api-routes/schemas/common.d.ts +36 -0
- package/dist/api-routes/schemas/common.d.ts.map +1 -1
- package/dist/api-routes/schemas/common.js +95 -5
- package/dist/api-routes/schemas/responses.d.ts +1424 -1
- package/dist/api-routes/schemas/responses.d.ts.map +1 -1
- package/dist/api-routes/schemas/responses.js +382 -60
- package/dist/api-routes/types.d.ts +1 -0
- package/dist/api-routes/types.d.ts.map +1 -1
- package/dist/api-routes/validation.d.ts +5 -1
- package/dist/api-routes/validation.d.ts.map +1 -1
- package/dist/api-routes/validation.js +14 -15
- package/dist/bootstrap.d.ts +3 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +58 -41
- package/dist/config/agendaQueue.config.d.ts +3 -0
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +29 -2
- package/dist/config/branding.config.d.ts +13 -0
- package/dist/config/branding.config.d.ts.map +1 -1
- package/dist/config/branding.config.js +34 -2
- package/dist/config/brandingConfigurationDefaults.config.d.ts +4 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +42 -3
- package/dist/config/index.d.ts +12 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +7 -4
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +37 -23
- package/dist/config/raid.config.d.ts +7 -4
- package/dist/config/raid.config.d.ts.map +1 -1
- package/dist/config/raid.config.js +21 -35
- package/dist/config/record.config.d.ts +3 -0
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +37 -35
- package/dist/config/recordSchema.config.d.ts +68 -0
- package/dist/config/recordSchema.config.d.ts.map +1 -0
- package/dist/config/recordSchema.config.js +173 -0
- package/dist/config/recordValidation.config.d.ts +19 -0
- package/dist/config/recordValidation.config.d.ts.map +1 -0
- package/dist/config/recordValidation.config.js +10 -0
- package/dist/config/recordtype.config.d.ts +32 -9
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +4 -7
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +135 -53
- package/dist/config/workflow.config.d.ts +6 -0
- package/dist/config/workflow.config.d.ts.map +1 -1
- package/dist/config/workflow.config.js +1 -1
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +4 -2
- package/dist/configmodels/ConfigModels.d.ts +1 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +26 -9
- package/dist/configmodels/DashboardFieldCatalogue.d.ts +67 -0
- package/dist/configmodels/DashboardFieldCatalogue.d.ts.map +1 -0
- package/dist/configmodels/DashboardFieldCatalogue.js +174 -0
- package/dist/configmodels/DashboardSettings.d.ts +191 -0
- package/dist/configmodels/DashboardSettings.d.ts.map +1 -0
- package/dist/configmodels/DashboardSettings.js +705 -0
- package/dist/configmodels/OniPublishing.d.ts +205 -0
- package/dist/configmodels/OniPublishing.d.ts.map +1 -0
- package/dist/configmodels/OniPublishing.js +335 -0
- package/dist/configmodels/RaidPublishing.d.ts +97 -0
- package/dist/configmodels/RaidPublishing.d.ts.map +1 -0
- package/dist/configmodels/RaidPublishing.js +35 -0
- package/dist/configmodels/WebAnalytics.d.ts +55 -0
- package/dist/configmodels/WebAnalytics.d.ts.map +1 -0
- package/dist/configmodels/WebAnalytics.js +61 -0
- package/dist/controllers/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/AppConfigController.js +4 -1
- package/dist/controllers/BrandingAppController.d.ts +29 -7
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +265 -69
- package/dist/controllers/BrandingController.d.ts +24 -1
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +173 -43
- package/dist/controllers/BrandingControllerSupport.d.ts +20 -0
- package/dist/controllers/BrandingControllerSupport.d.ts.map +1 -0
- package/dist/controllers/BrandingControllerSupport.js +80 -0
- package/dist/controllers/DashboardConfigController.d.ts +6 -2
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -1
- package/dist/controllers/DashboardConfigController.js +18 -4
- package/dist/controllers/DynamicAssetController.d.ts +7 -5
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +21 -12
- package/dist/controllers/RecordController.d.ts +45 -4
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +778 -345
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +4 -1
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +4 -3
- package/dist/controllers/webservice/BrandingController.d.ts +26 -1
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +292 -116
- package/dist/controllers/webservice/DashboardConfigController.d.ts +25 -17
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/DashboardConfigController.js +90 -205
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +37 -3
- package/dist/controllers/webservice/RecordController.d.ts +15 -1
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +647 -267
- package/dist/controllers/webservice/RecordSchemaController.d.ts +32 -0
- package/dist/controllers/webservice/RecordSchemaController.d.ts.map +1 -0
- package/dist/controllers/webservice/RecordSchemaController.js +356 -0
- package/dist/controllers/webservice/RecordTypeController.d.ts +6 -1
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +21 -3
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +7 -3
- package/dist/hooks/defineRedboxHook.d.ts +3 -0
- package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
- package/dist/hooks/defineRedboxHook.js +4 -1
- package/dist/index.d.ts +50 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -2
- package/dist/loader/bootstrapShimRuntime.d.ts +1 -1
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
- package/dist/loader/bootstrapShimRuntime.js +20 -12
- package/dist/loader/index.d.ts +9 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +93 -4
- package/dist/model/BrandingTypeface.d.ts +70 -0
- package/dist/model/BrandingTypeface.d.ts.map +1 -0
- package/dist/model/BrandingTypeface.js +116 -0
- package/dist/model/BuildResponse.d.ts +25 -11
- package/dist/model/BuildResponse.d.ts.map +1 -1
- package/dist/model/BuildResponse.js +4 -3
- package/dist/model/DashboardTypeResponseModel.d.ts +6 -0
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +7 -1
- package/dist/model/DashboardViewResponseModel.d.ts +5 -1
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardViewResponseModel.js +6 -3
- package/dist/model/RBValidationError.d.ts +17 -0
- package/dist/model/RBValidationError.d.ts.map +1 -1
- package/dist/model/RBValidationError.js +37 -1
- package/dist/model/RecordTypeResponseModel.d.ts +12 -4
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +11 -2
- package/dist/model/index.d.ts +5 -1
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +5 -2
- package/dist/model/record-contract.d.ts +42 -0
- package/dist/model/record-contract.d.ts.map +1 -0
- package/dist/model/record-contract.js +3 -0
- package/dist/model/storage/BrandingModel.d.ts +7 -0
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +7 -1
- package/dist/model/storage/DeletedRecordModel.d.ts +35 -0
- package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -1
- package/dist/model/storage/DeletedRecordModel.js +62 -1
- package/dist/model/storage/IntegrationAuditModel.d.ts +16 -2
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
- package/dist/model/storage/IntegrationAuditModel.js +15 -1
- package/dist/model/storage/RecordAuditModel.d.ts +11 -1
- package/dist/model/storage/RecordAuditModel.d.ts.map +1 -1
- package/dist/model/storage/RecordAuditModel.js +8 -2
- package/dist/model/storage/RecordModel.d.ts +6 -0
- package/dist/model/storage/RecordModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.d.ts +6 -0
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +4 -1
- package/dist/model/storage/index.d.ts +12 -10
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +24 -2
- package/dist/model/storage/record-schema.d.ts +115 -0
- package/dist/model/storage/record-schema.d.ts.map +1 -0
- package/dist/model/storage/record-schema.js +3 -0
- package/dist/policies/checkAuth.d.ts +2 -6
- package/dist/policies/checkAuth.d.ts.map +1 -1
- package/dist/policies/checkAuth.js +32 -9
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +85 -2
- package/dist/policies/index.d.ts +3 -2
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +4 -2
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -1
- package/dist/policies/validateApiContractRequest.js +49 -11
- package/dist/record-contract/ajv-error-mapper.d.ts +34 -0
- package/dist/record-contract/ajv-error-mapper.d.ts.map +1 -0
- package/dist/record-contract/ajv-error-mapper.js +153 -0
- package/dist/record-contract/canonical-json.d.ts +20 -0
- package/dist/record-contract/canonical-json.d.ts.map +1 -0
- package/dist/record-contract/canonical-json.js +126 -0
- package/dist/record-contract/codes.d.ts +36 -0
- package/dist/record-contract/codes.d.ts.map +1 -0
- package/dist/record-contract/codes.js +38 -0
- package/dist/record-contract/contributor-registry.d.ts +76 -0
- package/dist/record-contract/contributor-registry.d.ts.map +1 -0
- package/dist/record-contract/contributor-registry.js +126 -0
- package/dist/record-contract/core-contributors.d.ts +44 -0
- package/dist/record-contract/core-contributors.d.ts.map +1 -0
- package/dist/record-contract/core-contributors.js +395 -0
- package/dist/record-contract/deep-freeze.d.ts +3 -0
- package/dist/record-contract/deep-freeze.d.ts.map +1 -0
- package/dist/record-contract/deep-freeze.js +23 -0
- package/dist/record-contract/index.d.ts +13 -0
- package/dist/record-contract/index.d.ts.map +1 -0
- package/dist/record-contract/index.js +29 -0
- package/dist/record-contract/json-pointer.d.ts +20 -0
- package/dist/record-contract/json-pointer.d.ts.map +1 -0
- package/dist/record-contract/json-pointer.js +70 -0
- package/dist/record-contract/json-schema-renderer.d.ts +51 -0
- package/dist/record-contract/json-schema-renderer.d.ts.map +1 -0
- package/dist/record-contract/json-schema-renderer.js +450 -0
- package/dist/record-contract/record-contract-compiler.d.ts +42 -0
- package/dist/record-contract/record-contract-compiler.d.ts.map +1 -0
- package/dist/record-contract/record-contract-compiler.js +775 -0
- package/dist/record-contract/record-contract-context.d.ts +91 -0
- package/dist/record-contract/record-contract-context.d.ts.map +1 -0
- package/dist/record-contract/record-contract-context.js +39 -0
- package/dist/record-contract/record-json-schema-artifact.d.ts +74 -0
- package/dist/record-contract/record-json-schema-artifact.d.ts.map +1 -0
- package/dist/record-contract/record-json-schema-artifact.js +309 -0
- package/dist/record-contract/record-json-schema-etag.d.ts +15 -0
- package/dist/record-contract/record-json-schema-etag.d.ts.map +1 -0
- package/dist/record-contract/record-json-schema-etag.js +41 -0
- package/dist/record-contract/types.d.ts +151 -0
- package/dist/record-contract/types.d.ts.map +1 -0
- package/dist/record-contract/types.js +6 -0
- package/dist/services/AppConfigService.d.ts +6 -0
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +23 -1
- package/dist/services/AttachmentMetadataService.d.ts +58 -0
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -1
- package/dist/services/AttachmentMetadataService.js +643 -8
- package/dist/services/BrandingLogoService.d.ts +6 -1
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +77 -9
- package/dist/services/BrandingService.d.ts +171 -9
- package/dist/services/BrandingService.d.ts.map +1 -1
- package/dist/services/BrandingService.js +572 -68
- package/dist/services/BrandingThemeCssService.d.ts +17 -1
- package/dist/services/BrandingThemeCssService.d.ts.map +1 -1
- package/dist/services/BrandingThemeCssService.js +71 -9
- package/dist/services/BrandingTypefaceService.d.ts +74 -0
- package/dist/services/BrandingTypefaceService.d.ts.map +1 -0
- package/dist/services/BrandingTypefaceService.js +359 -0
- package/dist/services/BrandingWoff2Inspector.d.ts +17 -0
- package/dist/services/BrandingWoff2Inspector.d.ts.map +1 -0
- package/dist/services/BrandingWoff2Inspector.js +402 -0
- package/dist/services/DashboardConfigService.d.ts +214 -54
- package/dist/services/DashboardConfigService.d.ts.map +1 -1
- package/dist/services/DashboardConfigService.js +829 -261
- package/dist/services/DashboardLegacyConversion.d.ts +82 -0
- package/dist/services/DashboardLegacyConversion.d.ts.map +1 -0
- package/dist/services/DashboardLegacyConversion.js +427 -0
- package/dist/services/DashboardTypesService.d.ts +15 -4
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +72 -139
- package/dist/services/DoiService.d.ts +1 -1
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +71 -45
- package/dist/services/FigshareService.d.ts +1 -1
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +73 -32
- package/dist/services/FormRecordConsistencyService.d.ts +8 -23
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
- package/dist/services/FormRecordConsistencyService.js +54 -70
- package/dist/services/FormsService.d.ts +91 -2
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +324 -64
- package/dist/services/HarvestRunService.d.ts +6 -3
- package/dist/services/HarvestRunService.d.ts.map +1 -1
- package/dist/services/HarvestRunService.js +161 -97
- package/dist/services/I18nEntriesService.d.ts +1 -0
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +26 -6
- package/dist/services/OniService.d.ts +19 -62
- package/dist/services/OniService.d.ts.map +1 -1
- package/dist/services/OniService.js +223 -691
- package/dist/services/RDMPService.d.ts +1 -1
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +5 -5
- package/dist/services/RaidService.d.ts +19 -61
- package/dist/services/RaidService.d.ts.map +1 -1
- package/dist/services/RaidService.js +191 -530
- package/dist/services/RecordSchemaService.d.ts +440 -0
- package/dist/services/RecordSchemaService.d.ts.map +1 -0
- package/dist/services/RecordSchemaService.js +3061 -0
- package/dist/services/RecordTypesService.d.ts +29 -0
- package/dist/services/RecordTypesService.d.ts.map +1 -1
- package/dist/services/RecordTypesService.js +106 -11
- package/dist/services/RecordValidationService.d.ts +340 -0
- package/dist/services/RecordValidationService.d.ts.map +1 -0
- package/dist/services/RecordValidationService.js +1898 -0
- package/dist/services/RecordsService.d.ts +313 -22
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +4948 -509
- package/dist/services/SolrSearchService.d.ts +1 -1
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +42 -12
- package/dist/services/StandardDatastreamService.d.ts +4 -0
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +106 -44
- package/dist/services/TriggerService.d.ts.map +1 -1
- package/dist/services/TriggerService.js +54 -30
- package/dist/services/UsersService.d.ts +2 -1
- package/dist/services/UsersService.d.ts.map +1 -1
- package/dist/services/UsersService.js +364 -283
- package/dist/services/VocabularyService.d.ts +2 -0
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +61 -2
- package/dist/services/WorkflowStepsService.d.ts +11 -0
- package/dist/services/WorkflowStepsService.d.ts.map +1 -1
- package/dist/services/WorkflowStepsService.js +32 -3
- package/dist/services/WorkspaceService.d.ts +2 -2
- package/dist/services/WorkspaceService.d.ts.map +1 -1
- package/dist/services/WorkspaceService.js +5 -5
- package/dist/services/doi-v2/bindings.d.ts.map +1 -1
- package/dist/services/doi-v2/bindings.js +3 -20
- package/dist/services/doi-v2/config.d.ts +1 -0
- package/dist/services/doi-v2/config.d.ts.map +1 -1
- package/dist/services/doi-v2/config.js +13 -5
- package/dist/services/doi-v2/runtime.d.ts.map +1 -1
- package/dist/services/doi-v2/runtime.js +14 -54
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
- package/dist/services/figshare-v2/bindings.js +3 -20
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
- package/dist/services/figshare-v2/runtime.js +11 -58
- package/dist/services/form-record-access-user.d.ts +3 -0
- package/dist/services/form-record-access-user.d.ts.map +1 -0
- package/dist/services/form-record-access-user.js +23 -0
- package/dist/services/index.d.ts +9 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +45 -3
- package/dist/services/integration-v2/bindings.d.ts +3 -0
- package/dist/services/integration-v2/bindings.d.ts.map +1 -0
- package/dist/services/integration-v2/bindings.js +91 -0
- package/dist/services/integration-v2/runtime.d.ts +3 -0
- package/dist/services/integration-v2/runtime.d.ts.map +1 -0
- package/dist/services/integration-v2/runtime.js +50 -0
- package/dist/services/internal-record-schema-authorization.d.ts +8 -0
- package/dist/services/internal-record-schema-authorization.d.ts.map +1 -0
- package/dist/services/internal-record-schema-authorization.js +16 -0
- package/dist/services/oni-v2/audit.d.ts +19 -0
- package/dist/services/oni-v2/audit.d.ts.map +1 -0
- package/dist/services/oni-v2/audit.js +50 -0
- package/dist/services/oni-v2/bindings.d.ts +7 -0
- package/dist/services/oni-v2/bindings.d.ts.map +1 -0
- package/dist/services/oni-v2/bindings.js +31 -0
- package/dist/services/oni-v2/config.d.ts +12 -0
- package/dist/services/oni-v2/config.d.ts.map +1 -0
- package/dist/services/oni-v2/config.js +134 -0
- package/dist/services/oni-v2/context.d.ts +3 -0
- package/dist/services/oni-v2/context.d.ts.map +1 -0
- package/dist/services/oni-v2/context.js +17 -0
- package/dist/services/oni-v2/crate.d.ts +17 -0
- package/dist/services/oni-v2/crate.d.ts.map +1 -0
- package/dist/services/oni-v2/crate.js +504 -0
- package/dist/services/oni-v2/flydriveOcflStore.d.ts +69 -0
- package/dist/services/oni-v2/flydriveOcflStore.d.ts.map +1 -0
- package/dist/services/oni-v2/flydriveOcflStore.js +325 -0
- package/dist/services/oni-v2/ingestion.d.ts +37 -0
- package/dist/services/oni-v2/ingestion.d.ts.map +1 -0
- package/dist/services/oni-v2/ingestion.js +91 -0
- package/dist/services/oni-v2/mapping.d.ts +17 -0
- package/dist/services/oni-v2/mapping.d.ts.map +1 -0
- package/dist/services/oni-v2/mapping.js +137 -0
- package/dist/services/oni-v2/repository.d.ts +9 -0
- package/dist/services/oni-v2/repository.d.ts.map +1 -0
- package/dist/services/oni-v2/repository.js +180 -0
- package/dist/services/oni-v2/runtime.d.ts +23 -0
- package/dist/services/oni-v2/runtime.d.ts.map +1 -0
- package/dist/services/oni-v2/runtime.js +121 -0
- package/dist/services/oni-v2/templating.d.ts +11 -0
- package/dist/services/oni-v2/templating.d.ts.map +1 -0
- package/dist/services/oni-v2/templating.js +27 -0
- package/dist/services/oni-v2/types.d.ts +100 -0
- package/dist/services/oni-v2/types.d.ts.map +1 -0
- package/dist/services/oni-v2/types.js +3 -0
- package/dist/services/raid-v2/audit.d.ts +10 -0
- package/dist/services/raid-v2/audit.d.ts.map +1 -0
- package/dist/services/raid-v2/audit.js +29 -0
- package/dist/services/raid-v2/errors.d.ts +85 -0
- package/dist/services/raid-v2/errors.d.ts.map +1 -0
- package/dist/services/raid-v2/errors.js +36 -0
- package/dist/services/raid-v2/http.d.ts +4 -0
- package/dist/services/raid-v2/http.d.ts.map +1 -0
- package/dist/services/raid-v2/http.js +84 -0
- package/dist/services/raid-v2/logger.d.ts +8 -0
- package/dist/services/raid-v2/logger.d.ts.map +1 -0
- package/dist/services/raid-v2/logger.js +30 -0
- package/dist/services/raid-v2/mapping.d.ts +9 -0
- package/dist/services/raid-v2/mapping.d.ts.map +1 -0
- package/dist/services/raid-v2/mapping.js +168 -0
- package/dist/services/raid-v2/runtime.d.ts +5 -0
- package/dist/services/raid-v2/runtime.d.ts.map +1 -0
- package/dist/services/raid-v2/runtime.js +135 -0
- package/dist/services/raid-v2/tags.d.ts +11 -0
- package/dist/services/raid-v2/tags.d.ts.map +1 -0
- package/dist/services/raid-v2/tags.js +12 -0
- package/dist/services/raid-v2/types.d.ts +66 -0
- package/dist/services/raid-v2/types.d.ts.map +1 -0
- package/dist/services/raid-v2/types.js +3 -0
- package/dist/services/record-hooks/coordinator.d.ts +64 -0
- package/dist/services/record-hooks/coordinator.d.ts.map +1 -0
- package/dist/services/record-hooks/coordinator.js +276 -0
- package/dist/visitor/client.visitor.d.ts +6 -0
- package/dist/visitor/client.visitor.d.ts.map +1 -1
- package/dist/visitor/client.visitor.js +59 -14
- package/dist/visitor/construct.visitor.d.ts +27 -1
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +265 -177
- package/dist/visitor/context-variables.visitor.d.ts +3 -1
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
- package/dist/visitor/context-variables.visitor.js +15 -1
- package/dist/visitor/data-value.visitor.d.ts +6 -0
- package/dist/visitor/data-value.visitor.d.ts.map +1 -1
- package/dist/visitor/data-value.visitor.js +10 -1
- package/dist/visitor/json-type-def.visitor.d.ts +6 -0
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
- package/dist/visitor/json-type-def.visitor.js +10 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +11 -0
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +228 -133
- package/dist/visitor/related-object-data-inline.visitor.d.ts +31 -0
- package/dist/visitor/related-object-data-inline.visitor.d.ts.map +1 -0
- package/dist/visitor/related-object-data-inline.visitor.js +96 -0
- package/dist/visitor/template.visitor.d.ts +17 -2
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +60 -22
- package/dist/visitor/validator.visitor.d.ts +49 -7
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +275 -178
- package/dist/waterline-models/AttachmentMetadata.d.ts +22 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -1
- package/dist/waterline-models/AttachmentMetadata.js +147 -3
- package/dist/waterline-models/BrandingConfig.d.ts +7 -0
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +16 -1
- package/dist/waterline-models/BrandingConfigHistory.d.ts +11 -2
- package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfigHistory.js +21 -1
- package/dist/waterline-models/DashboardConfiguration.d.ts +29 -0
- package/dist/waterline-models/DashboardConfiguration.d.ts.map +1 -0
- package/dist/waterline-models/DashboardConfiguration.js +52 -0
- package/dist/waterline-models/RecordType.d.ts +9 -0
- package/dist/waterline-models/RecordType.d.ts.map +1 -1
- package/dist/waterline-models/RecordType.js +16 -1
- package/dist/waterline-models/User.d.ts.map +1 -1
- package/dist/waterline-models/User.js +10 -15
- package/dist/waterline-models/index.d.ts +2 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +4 -1
- package/package.json +60 -47
- package/dist/config/datapubs.config.d.ts +0 -72
- package/dist/config/datapubs.config.d.ts.map +0 -1
- package/dist/config/datapubs.config.js +0 -74
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ValidatorFormConfigVisitor = void 0;
|
|
4
4
|
const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
|
|
5
5
|
const data_value_visitor_1 = require("./data-value.visitor");
|
|
6
|
+
const lodash_1 = require("lodash");
|
|
6
7
|
/**
|
|
7
8
|
* Visit each form config component and run its validators.
|
|
8
9
|
*
|
|
@@ -16,16 +17,26 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
16
17
|
validatorSupport;
|
|
17
18
|
form;
|
|
18
19
|
enabledValidationGroups;
|
|
20
|
+
excludedOnlyValidationGroups;
|
|
19
21
|
validatorDefinitionsMap;
|
|
22
|
+
jsonataEvaluatorFactory;
|
|
23
|
+
checkDeadline;
|
|
24
|
+
transformationOnly;
|
|
20
25
|
validationErrors;
|
|
26
|
+
transformations;
|
|
21
27
|
formPathHelper;
|
|
22
28
|
constructor(logger) {
|
|
23
29
|
super(logger);
|
|
24
30
|
this.validatorSupport = new sails_ng_common_1.ValidatorsSupport();
|
|
25
31
|
this.form = new sails_ng_common_1.FormConfig();
|
|
26
32
|
this.enabledValidationGroups = [];
|
|
33
|
+
this.excludedOnlyValidationGroups = [];
|
|
27
34
|
this.validatorDefinitionsMap = new Map();
|
|
35
|
+
this.jsonataEvaluatorFactory = sails_ng_common_1.jsonataEvaluateFunc;
|
|
36
|
+
this.checkDeadline = () => undefined;
|
|
37
|
+
this.transformationOnly = false;
|
|
28
38
|
this.validationErrors = [];
|
|
39
|
+
this.transformations = [];
|
|
29
40
|
this.formPathHelper = new sails_ng_common_1.FormPathHelper(logger, this);
|
|
30
41
|
}
|
|
31
42
|
/**
|
|
@@ -36,14 +47,39 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
36
47
|
* @param options.validatorDefinitions The validation definitions to make available.
|
|
37
48
|
*/
|
|
38
49
|
async start(options) {
|
|
50
|
+
const result = await this.startWithResult(options);
|
|
51
|
+
return [
|
|
52
|
+
...result.summaries,
|
|
53
|
+
...result.transformations.map(transformation => (0, lodash_1.cloneDeep)(transformation.advisorySummary)),
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Run validation and return schema-owned value transformations separately
|
|
58
|
+
* from validator summaries so save boundaries can apply them immutably.
|
|
59
|
+
*/
|
|
60
|
+
async startWithResult(options) {
|
|
39
61
|
this.formPathHelper.reset();
|
|
40
62
|
this.form = options.form;
|
|
41
63
|
// use the first non-null, non-undefined value - empty array is a valid value
|
|
42
64
|
this.enabledValidationGroups = options.enabledValidationGroups ?? this.form.enabledValidationGroups ?? ['all'];
|
|
43
|
-
this.
|
|
65
|
+
this.excludedOnlyValidationGroups = options.excludedOnlyValidationGroups ?? [];
|
|
66
|
+
this.validatorDefinitionsMap = options.validatorDefinitionsMap
|
|
67
|
+
? new Map(options.validatorDefinitionsMap)
|
|
68
|
+
: this.validatorSupport.createValidatorDefinitionMapping(options.validatorDefinitions || []);
|
|
69
|
+
this.jsonataEvaluatorFactory = options.jsonataEvaluatorFactory ?? sails_ng_common_1.jsonataEvaluateFunc;
|
|
70
|
+
this.checkDeadline = options.checkDeadline ?? (() => undefined);
|
|
71
|
+
this.transformationOnly = options.transformationOnly === true;
|
|
44
72
|
this.validationErrors = [];
|
|
73
|
+
this.transformations = [];
|
|
45
74
|
await this.form.accept(this);
|
|
46
|
-
return
|
|
75
|
+
return {
|
|
76
|
+
summaries: [...this.validationErrors],
|
|
77
|
+
transformations: this.transformations.map(transformation => ({
|
|
78
|
+
...transformation,
|
|
79
|
+
dataModelPath: [...transformation.dataModelPath],
|
|
80
|
+
advisorySummary: (0, lodash_1.cloneDeep)(transformation.advisorySummary),
|
|
81
|
+
})),
|
|
82
|
+
};
|
|
47
83
|
}
|
|
48
84
|
/* Form Config */
|
|
49
85
|
async visitFormConfig(item) {
|
|
@@ -55,55 +91,108 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
55
91
|
// There are various reasons a validator is at form level, e.g. they involve more than one field.
|
|
56
92
|
const dataValueVisitor = new data_value_visitor_1.DataValueFormConfigVisitor(this.logger);
|
|
57
93
|
const value = await dataValueVisitor.start({ form: item });
|
|
58
|
-
const itemName = item?.name ??
|
|
59
|
-
|
|
94
|
+
const itemName = item?.name ?? '';
|
|
95
|
+
if (!this.transformationOnly) {
|
|
96
|
+
this.validationErrors.push(...(await this.validateFormComponent(itemName, value, item?.validators)));
|
|
97
|
+
}
|
|
60
98
|
}
|
|
61
99
|
/* SimpleInput */
|
|
62
|
-
async visitSimpleInputFieldComponentDefinition(_item) {
|
|
63
|
-
}
|
|
64
|
-
async visitSimpleInputFieldModelDefinition(_item) {
|
|
65
|
-
}
|
|
100
|
+
async visitSimpleInputFieldComponentDefinition(_item) { }
|
|
101
|
+
async visitSimpleInputFieldModelDefinition(_item) { }
|
|
66
102
|
async visitSimpleInputFormComponentDefinition(item) {
|
|
67
103
|
await this.acceptFormComponentDefinition(item);
|
|
68
104
|
}
|
|
69
105
|
/* Content */
|
|
70
|
-
async visitContentFieldComponentDefinition(_item) {
|
|
71
|
-
}
|
|
106
|
+
async visitContentFieldComponentDefinition(_item) { }
|
|
72
107
|
async visitContentFormComponentDefinition(item) {
|
|
73
108
|
await this.acceptFormComponentDefinition(item);
|
|
74
109
|
}
|
|
75
|
-
/*
|
|
76
|
-
async
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
async visitRepeatableElementFieldLayoutDefinition(_item) {
|
|
110
|
+
/* Related object data */
|
|
111
|
+
async visitRelatedObjectDataFieldComponentDefinition(_item) { }
|
|
112
|
+
async visitRelatedObjectDataFormComponentDefinition(item) {
|
|
113
|
+
await this.acceptFormComponentDefinition(item);
|
|
81
114
|
}
|
|
115
|
+
/* Repeatable */
|
|
116
|
+
async visitRepeatableFieldComponentDefinition(_item) { }
|
|
117
|
+
async visitRepeatableFieldModelDefinition(_item) { }
|
|
118
|
+
async visitRepeatableElementFieldLayoutDefinition(_item) { }
|
|
82
119
|
async visitRepeatableFormComponentDefinition(item) {
|
|
83
120
|
await this.acceptFormComponentDefinition(item);
|
|
121
|
+
const values = item.model?.config?.value;
|
|
122
|
+
const elementTemplate = item.component?.config?.elementTemplate;
|
|
123
|
+
if (!Array.isArray(values) || !elementTemplate)
|
|
124
|
+
return;
|
|
125
|
+
for (const [index, rowValue] of values.entries()) {
|
|
126
|
+
this.checkDeadline();
|
|
127
|
+
const rowTemplate = (0, lodash_1.cloneDeep)(elementTemplate);
|
|
128
|
+
this.hydrateRepeatableRow(rowTemplate, rowValue);
|
|
129
|
+
const templateLineage = this.formPathHelper.lineagePathsForRepeatableFieldComponentDefinition(rowTemplate);
|
|
130
|
+
await this.formPathHelper.acceptFormPath(rowTemplate, {
|
|
131
|
+
...templateLineage,
|
|
132
|
+
formConfig: ['component', ...(templateLineage.formConfig ?? [])],
|
|
133
|
+
dataModel: [...(templateLineage.dataModel ?? []), index],
|
|
134
|
+
angularComponents: [...(templateLineage.angularComponents ?? []), index],
|
|
135
|
+
layout: [...(templateLineage.layout ?? []), index],
|
|
136
|
+
});
|
|
137
|
+
this.checkDeadline();
|
|
138
|
+
}
|
|
84
139
|
}
|
|
85
|
-
|
|
86
|
-
|
|
140
|
+
/** Populate only schema-owned row controls; submitted objects never become form definitions. */
|
|
141
|
+
hydrateRepeatableRow(definition, parentValue) {
|
|
142
|
+
const definitionRecord = definition;
|
|
143
|
+
const component = definitionRecord.component;
|
|
144
|
+
const model = definitionRecord.model;
|
|
145
|
+
const name = typeof definitionRecord.name === 'string' ? definitionRecord.name : '';
|
|
146
|
+
const consumesNamedValue = Boolean(name) && (model !== undefined || component?.class === 'GroupComponent');
|
|
147
|
+
const value = consumesNamedValue && parentValue !== null && typeof parentValue === 'object' && !Array.isArray(parentValue)
|
|
148
|
+
? parentValue[name]
|
|
149
|
+
: parentValue;
|
|
150
|
+
if (model) {
|
|
151
|
+
const config = model.config && typeof model.config === 'object' && !Array.isArray(model.config)
|
|
152
|
+
? model.config
|
|
153
|
+
: {};
|
|
154
|
+
model.config = config;
|
|
155
|
+
config.value = value;
|
|
156
|
+
}
|
|
157
|
+
const componentConfig = component?.config;
|
|
158
|
+
if (!componentConfig || typeof componentConfig !== 'object' || Array.isArray(componentConfig))
|
|
159
|
+
return;
|
|
160
|
+
const config = componentConfig;
|
|
161
|
+
// A nested repeatable owns its elementTemplate expansion when its visitor
|
|
162
|
+
// sees the nested array value.
|
|
163
|
+
if (component.class === 'RepeatableComponent')
|
|
164
|
+
return;
|
|
165
|
+
for (const key of ['componentDefinitions', 'tabs', 'panels']) {
|
|
166
|
+
const children = config[key];
|
|
167
|
+
if (!Array.isArray(children))
|
|
168
|
+
continue;
|
|
169
|
+
for (const child of children) {
|
|
170
|
+
this.hydrateRepeatableRow(child, value);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
87
173
|
}
|
|
174
|
+
/* Validation Summary */
|
|
175
|
+
async visitValidationSummaryFieldComponentDefinition(_item) { }
|
|
88
176
|
async visitValidationSummaryFormComponentDefinition(item) {
|
|
89
177
|
await this.acceptFormComponentDefinition(item);
|
|
90
178
|
}
|
|
91
|
-
async visitSuggestedValidationSummaryFieldComponentDefinition(_item) {
|
|
92
|
-
}
|
|
179
|
+
async visitSuggestedValidationSummaryFieldComponentDefinition(_item) { }
|
|
93
180
|
async visitSuggestedValidationSummaryFormComponentDefinition(item) {
|
|
94
181
|
await this.acceptFormComponentDefinition(item);
|
|
95
182
|
}
|
|
96
|
-
async visitSaveStatusFieldComponentDefinition(_item) {
|
|
97
|
-
}
|
|
183
|
+
async visitSaveStatusFieldComponentDefinition(_item) { }
|
|
98
184
|
async visitSaveStatusFormComponentDefinition(item) {
|
|
99
185
|
await this.acceptFormComponentDefinition(item);
|
|
100
186
|
}
|
|
101
187
|
/* Integration Status */
|
|
102
|
-
async visitIntegrationStatusFieldComponentDefinition(_item) {
|
|
103
|
-
}
|
|
188
|
+
async visitIntegrationStatusFieldComponentDefinition(_item) { }
|
|
104
189
|
async visitIntegrationStatusFormComponentDefinition(item) {
|
|
105
190
|
await this.acceptFormComponentDefinition(item);
|
|
106
191
|
}
|
|
192
|
+
async visitWorkspaceFieldComponentDefinition(_item) { }
|
|
193
|
+
async visitWorkspaceFormComponentDefinition(item) {
|
|
194
|
+
await this.acceptFormComponentDefinition(item);
|
|
195
|
+
}
|
|
107
196
|
/* Group */
|
|
108
197
|
async visitGroupFieldComponentDefinition(item) {
|
|
109
198
|
for (const [index, componentDefinition] of (item.config?.componentDefinitions ?? []).entries()) {
|
|
@@ -111,8 +200,7 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
111
200
|
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForGroupFieldComponentDefinition(componentDefinition, index));
|
|
112
201
|
}
|
|
113
202
|
}
|
|
114
|
-
async visitGroupFieldModelDefinition(_item) {
|
|
115
|
-
}
|
|
203
|
+
async visitGroupFieldModelDefinition(_item) { }
|
|
116
204
|
async visitGroupFormComponentDefinition(item) {
|
|
117
205
|
await this.acceptFormComponentDefinition(item);
|
|
118
206
|
}
|
|
@@ -123,8 +211,7 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
123
211
|
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForTabFieldComponentDefinition(componentDefinition, index));
|
|
124
212
|
}
|
|
125
213
|
}
|
|
126
|
-
async visitTabFieldLayoutDefinition(_item) {
|
|
127
|
-
}
|
|
214
|
+
async visitTabFieldLayoutDefinition(_item) { }
|
|
128
215
|
async visitTabFormComponentDefinition(item) {
|
|
129
216
|
await this.acceptFormComponentDefinition(item);
|
|
130
217
|
}
|
|
@@ -134,8 +221,7 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
134
221
|
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForAccordionFieldComponentDefinition(componentDefinition, index));
|
|
135
222
|
}
|
|
136
223
|
}
|
|
137
|
-
async visitAccordionFieldLayoutDefinition(_item) {
|
|
138
|
-
}
|
|
224
|
+
async visitAccordionFieldLayoutDefinition(_item) { }
|
|
139
225
|
async visitAccordionFormComponentDefinition(item) {
|
|
140
226
|
await this.acceptFormComponentDefinition(item);
|
|
141
227
|
}
|
|
@@ -144,8 +230,7 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
144
230
|
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForAccordionPanelFieldComponentDefinition(componentDefinition, index));
|
|
145
231
|
}
|
|
146
232
|
}
|
|
147
|
-
async visitAccordionPanelFieldLayoutDefinition(_item) {
|
|
148
|
-
}
|
|
233
|
+
async visitAccordionPanelFieldLayoutDefinition(_item) { }
|
|
149
234
|
async visitAccordionPanelFormComponentDefinition(item) {
|
|
150
235
|
await this.acceptFormComponentDefinition(item);
|
|
151
236
|
}
|
|
@@ -156,50 +241,40 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
156
241
|
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForTabContentFieldComponentDefinition(componentDefinition, index));
|
|
157
242
|
}
|
|
158
243
|
}
|
|
159
|
-
async visitTabContentFieldLayoutDefinition(_item) {
|
|
160
|
-
}
|
|
244
|
+
async visitTabContentFieldLayoutDefinition(_item) { }
|
|
161
245
|
async visitTabContentFormComponentDefinition(item) {
|
|
162
246
|
await this.acceptFormComponentDefinition(item);
|
|
163
247
|
}
|
|
164
248
|
/* Save Button */
|
|
165
|
-
async visitSaveButtonFieldComponentDefinition(_item) {
|
|
166
|
-
}
|
|
249
|
+
async visitSaveButtonFieldComponentDefinition(_item) { }
|
|
167
250
|
async visitSaveButtonFormComponentDefinition(item) {
|
|
168
251
|
await this.acceptFormComponentDefinition(item);
|
|
169
252
|
}
|
|
170
253
|
/* Cancel Button */
|
|
171
|
-
async visitCancelButtonFieldComponentDefinition(_item) {
|
|
172
|
-
}
|
|
254
|
+
async visitCancelButtonFieldComponentDefinition(_item) { }
|
|
173
255
|
async visitCancelButtonFormComponentDefinition(item) {
|
|
174
256
|
await this.acceptFormComponentDefinition(item);
|
|
175
257
|
}
|
|
176
|
-
async visitDeleteButtonFieldComponentDefinition(_item) {
|
|
177
|
-
}
|
|
258
|
+
async visitDeleteButtonFieldComponentDefinition(_item) { }
|
|
178
259
|
async visitDeleteButtonFormComponentDefinition(item) {
|
|
179
260
|
await this.acceptFormComponentDefinition(item);
|
|
180
261
|
}
|
|
181
262
|
/* Tab Nav Button */
|
|
182
|
-
async visitTabNavButtonFieldComponentDefinition(_item) {
|
|
183
|
-
}
|
|
263
|
+
async visitTabNavButtonFieldComponentDefinition(_item) { }
|
|
184
264
|
async visitTabNavButtonFormComponentDefinition(item) {
|
|
185
265
|
await this.acceptFormComponentDefinition(item);
|
|
186
266
|
}
|
|
187
267
|
/* Text Area */
|
|
188
|
-
async visitTextAreaFieldComponentDefinition(_item) {
|
|
189
|
-
}
|
|
190
|
-
async visitTextAreaFieldModelDefinition(_item) {
|
|
191
|
-
}
|
|
268
|
+
async visitTextAreaFieldComponentDefinition(_item) { }
|
|
269
|
+
async visitTextAreaFieldModelDefinition(_item) { }
|
|
192
270
|
async visitTextAreaFormComponentDefinition(item) {
|
|
193
271
|
await this.acceptFormComponentDefinition(item);
|
|
194
272
|
}
|
|
195
273
|
/* Default Layout */
|
|
196
|
-
async visitDefaultFieldLayoutDefinition(_item) {
|
|
197
|
-
}
|
|
274
|
+
async visitDefaultFieldLayoutDefinition(_item) { }
|
|
198
275
|
/* Checkbox Input */
|
|
199
|
-
async visitCheckboxInputFieldComponentDefinition(_item) {
|
|
200
|
-
}
|
|
201
|
-
async visitCheckboxInputFieldModelDefinition(_item) {
|
|
202
|
-
}
|
|
276
|
+
async visitCheckboxInputFieldComponentDefinition(_item) { }
|
|
277
|
+
async visitCheckboxInputFieldModelDefinition(_item) { }
|
|
203
278
|
async visitCheckboxInputFormComponentDefinition(item) {
|
|
204
279
|
await this.acceptFormComponentDefinition(item);
|
|
205
280
|
}
|
|
@@ -209,31 +284,24 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
209
284
|
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForQuestionTreeFieldComponentDefinition(componentDefinition, index));
|
|
210
285
|
}
|
|
211
286
|
}
|
|
212
|
-
async visitQuestionTreeFieldModelDefinition(_item) {
|
|
213
|
-
}
|
|
287
|
+
async visitQuestionTreeFieldModelDefinition(_item) { }
|
|
214
288
|
async visitQuestionTreeFormComponentDefinition(item) {
|
|
215
289
|
await this.acceptFormComponentDefinition(item);
|
|
216
290
|
}
|
|
217
291
|
/* Checkbox Tree */
|
|
218
|
-
async visitCheckboxTreeFieldComponentDefinition(_item) {
|
|
219
|
-
}
|
|
220
|
-
async visitCheckboxTreeFieldModelDefinition(_item) {
|
|
221
|
-
}
|
|
292
|
+
async visitCheckboxTreeFieldComponentDefinition(_item) { }
|
|
293
|
+
async visitCheckboxTreeFieldModelDefinition(_item) { }
|
|
222
294
|
async visitCheckboxTreeFormComponentDefinition(item) {
|
|
223
295
|
await this.acceptFormComponentDefinition(item);
|
|
224
296
|
}
|
|
225
|
-
async visitRecordSelectorFieldComponentDefinition(_item) {
|
|
226
|
-
}
|
|
227
|
-
async visitRecordSelectorFieldModelDefinition(_item) {
|
|
228
|
-
}
|
|
297
|
+
async visitRecordSelectorFieldComponentDefinition(_item) { }
|
|
298
|
+
async visitRecordSelectorFieldModelDefinition(_item) { }
|
|
229
299
|
async visitRecordSelectorFormComponentDefinition(item) {
|
|
230
300
|
await this.acceptFormComponentDefinition(item);
|
|
231
301
|
}
|
|
232
302
|
/* Dropdown Input */
|
|
233
|
-
async visitDropdownInputFieldComponentDefinition(_item) {
|
|
234
|
-
}
|
|
235
|
-
async visitDropdownInputFieldModelDefinition(_item) {
|
|
236
|
-
}
|
|
303
|
+
async visitDropdownInputFieldComponentDefinition(_item) { }
|
|
304
|
+
async visitDropdownInputFieldModelDefinition(_item) { }
|
|
237
305
|
async visitDropdownInputFormComponentDefinition(item) {
|
|
238
306
|
await this.acceptFormComponentDefinition(item);
|
|
239
307
|
}
|
|
@@ -241,76 +309,76 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
241
309
|
async visitTypeaheadInputFieldComponentDefinition(item) {
|
|
242
310
|
const configErrors = [];
|
|
243
311
|
const config = item.config;
|
|
244
|
-
const sourceType = String(config?.sourceType ??
|
|
245
|
-
if (!sourceType || ![
|
|
312
|
+
const sourceType = String(config?.sourceType ?? '');
|
|
313
|
+
if (!sourceType || !['static', 'vocabulary', 'namedQuery', 'external', 'service'].includes(sourceType)) {
|
|
246
314
|
configErrors.push({
|
|
247
|
-
class:
|
|
248
|
-
message:
|
|
249
|
-
params: { sourceType }
|
|
315
|
+
class: 'typeaheadSourceType',
|
|
316
|
+
message: '@validator-error-typeahead-source-type',
|
|
317
|
+
params: { sourceType },
|
|
250
318
|
});
|
|
251
319
|
}
|
|
252
|
-
if (sourceType ===
|
|
320
|
+
if (sourceType === 'static' && (!Array.isArray(config?.staticOptions) || config.staticOptions.length === 0)) {
|
|
253
321
|
configErrors.push({
|
|
254
|
-
class:
|
|
255
|
-
message:
|
|
256
|
-
params: { sourceType }
|
|
322
|
+
class: 'typeaheadStaticOptions',
|
|
323
|
+
message: '@validator-error-typeahead-static-options',
|
|
324
|
+
params: { sourceType },
|
|
257
325
|
});
|
|
258
326
|
}
|
|
259
|
-
if (sourceType ===
|
|
327
|
+
if (sourceType === 'vocabulary' && !String(config?.vocabRef ?? '').trim()) {
|
|
260
328
|
configErrors.push({
|
|
261
|
-
class:
|
|
262
|
-
message:
|
|
263
|
-
params: { sourceType }
|
|
329
|
+
class: 'typeaheadVocabRef',
|
|
330
|
+
message: '@validator-error-typeahead-vocab-ref',
|
|
331
|
+
params: { sourceType },
|
|
264
332
|
});
|
|
265
333
|
}
|
|
266
|
-
if (sourceType ===
|
|
334
|
+
if (sourceType === 'namedQuery' && !String(config?.queryId ?? '').trim()) {
|
|
267
335
|
configErrors.push({
|
|
268
|
-
class:
|
|
269
|
-
message:
|
|
270
|
-
params: { sourceType }
|
|
336
|
+
class: 'typeaheadQueryId',
|
|
337
|
+
message: '@validator-error-typeahead-query-id',
|
|
338
|
+
params: { sourceType },
|
|
271
339
|
});
|
|
272
340
|
}
|
|
273
|
-
const serviceId = String(config?.[
|
|
274
|
-
if (sourceType ===
|
|
341
|
+
const serviceId = String(config?.['serviceId'] ?? '').trim();
|
|
342
|
+
if (sourceType === 'service' && !serviceId) {
|
|
275
343
|
configErrors.push({
|
|
276
|
-
class:
|
|
277
|
-
message:
|
|
278
|
-
params: { sourceType }
|
|
344
|
+
class: 'typeaheadServiceId',
|
|
345
|
+
message: '@validator-error-typeahead-service-id',
|
|
346
|
+
params: { sourceType },
|
|
279
347
|
});
|
|
280
348
|
}
|
|
281
|
-
if (sourceType ===
|
|
349
|
+
if (sourceType === 'external' && !String(config?.provider ?? '').trim()) {
|
|
282
350
|
configErrors.push({
|
|
283
|
-
class:
|
|
284
|
-
message:
|
|
285
|
-
params: { sourceType }
|
|
351
|
+
class: 'typeaheadProvider',
|
|
352
|
+
message: '@validator-error-typeahead-provider',
|
|
353
|
+
params: { sourceType },
|
|
286
354
|
});
|
|
287
355
|
}
|
|
288
356
|
if (config?.multiSelect === true) {
|
|
289
357
|
configErrors.push({
|
|
290
|
-
class:
|
|
291
|
-
message:
|
|
292
|
-
params: { multiSelect: true }
|
|
358
|
+
class: 'typeaheadMultiSelect',
|
|
359
|
+
message: '@validator-error-typeahead-multi-select-unsupported',
|
|
360
|
+
params: { multiSelect: true },
|
|
293
361
|
});
|
|
294
362
|
}
|
|
295
363
|
if (configErrors.length > 0) {
|
|
296
364
|
this.validationErrors.push({
|
|
297
|
-
id: String(this.formPathHelper.formPath.angularComponents?.[this.formPathHelper.formPath.angularComponents.length - 1] ??
|
|
298
|
-
|
|
365
|
+
id: String(this.formPathHelper.formPath.angularComponents?.[this.formPathHelper.formPath.angularComponents.length - 1] ??
|
|
366
|
+
''),
|
|
367
|
+
message: item?.config?.label ?? 'TypeaheadInput configuration',
|
|
299
368
|
errors: configErrors,
|
|
300
|
-
lineagePaths: (0, sails_ng_common_1.buildLineagePaths)(this.formPathHelper.formPath)
|
|
369
|
+
lineagePaths: (0, sails_ng_common_1.buildLineagePaths)(this.formPathHelper.formPath),
|
|
301
370
|
});
|
|
302
371
|
}
|
|
303
372
|
}
|
|
304
|
-
async visitTypeaheadInputFieldModelDefinition(_item) {
|
|
305
|
-
}
|
|
373
|
+
async visitTypeaheadInputFieldModelDefinition(_item) { }
|
|
306
374
|
async visitTypeaheadInputFormComponentDefinition(item) {
|
|
307
375
|
await this.acceptFormComponentDefinition(item);
|
|
308
376
|
}
|
|
309
377
|
/* Rich Text Editor */
|
|
310
|
-
async visitRichTextEditorFieldComponentDefinition(_item) {
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
const value = item?.config?.value;
|
|
378
|
+
async visitRichTextEditorFieldComponentDefinition(_item) { }
|
|
379
|
+
async visitRichTextEditorFieldModelDefinition(_item) { }
|
|
380
|
+
sanitizeRichTextValue(item) {
|
|
381
|
+
const value = item.model?.config?.value;
|
|
314
382
|
if (typeof value !== 'string' || !value) {
|
|
315
383
|
return;
|
|
316
384
|
}
|
|
@@ -323,38 +391,54 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
323
391
|
return;
|
|
324
392
|
}
|
|
325
393
|
const mode = sails?.config?.record?.form?.htmlSanitizationMode ?? 'sanitize';
|
|
326
|
-
const componentName = String(this.formPathHelper.formPath.angularComponents?.[this.formPathHelper.formPath.angularComponents.length - 1] ??
|
|
394
|
+
const componentName = String(this.formPathHelper.formPath.angularComponents?.[this.formPathHelper.formPath.angularComponents.length - 1] ??
|
|
395
|
+
'Rich text content');
|
|
327
396
|
if (mode === 'reject') {
|
|
328
397
|
// Report validation error, do NOT mutate
|
|
329
|
-
this.
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
398
|
+
if (!this.transformationOnly) {
|
|
399
|
+
this.validationErrors.push({
|
|
400
|
+
id: componentName,
|
|
401
|
+
message: componentName,
|
|
402
|
+
errors: [
|
|
403
|
+
{
|
|
404
|
+
class: 'htmlUnsafe',
|
|
405
|
+
message: '@validator-error-html-unsafe',
|
|
406
|
+
params: { actual: value },
|
|
407
|
+
},
|
|
408
|
+
],
|
|
409
|
+
lineagePaths: (0, sails_ng_common_1.buildLineagePaths)(this.formPathHelper.formPath),
|
|
410
|
+
});
|
|
411
|
+
}
|
|
339
412
|
}
|
|
340
413
|
else {
|
|
341
|
-
// Default: sanitize
|
|
342
|
-
|
|
343
|
-
|
|
414
|
+
// Default: sanitize before validators and report through the typed
|
|
415
|
+
// transformation channel, never through an ordinary validator class.
|
|
416
|
+
if (item.model?.config) {
|
|
417
|
+
item.model.config.value = sanitized;
|
|
344
418
|
}
|
|
345
|
-
this.
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
419
|
+
const dataModelPath = this.formPathHelper.formPath.dataModel;
|
|
420
|
+
this.transformations.push({
|
|
421
|
+
kind: 'rich-html-sanitized',
|
|
422
|
+
dataModelPath,
|
|
423
|
+
sourceValue: value,
|
|
424
|
+
value: sanitized,
|
|
425
|
+
advisorySummary: {
|
|
426
|
+
id: componentName,
|
|
427
|
+
message: componentName,
|
|
428
|
+
errors: [
|
|
429
|
+
{
|
|
430
|
+
class: 'htmlSanitized',
|
|
431
|
+
message: '@validator-warning-html-sanitized',
|
|
432
|
+
params: {},
|
|
433
|
+
},
|
|
434
|
+
],
|
|
435
|
+
lineagePaths: (0, sails_ng_common_1.buildLineagePaths)(this.formPathHelper.formPath),
|
|
436
|
+
},
|
|
354
437
|
});
|
|
355
438
|
}
|
|
356
439
|
}
|
|
357
440
|
async visitRichTextEditorFormComponentDefinition(item) {
|
|
441
|
+
this.sanitizeRichTextValue(item);
|
|
358
442
|
await this.acceptFormComponentDefinition(item);
|
|
359
443
|
}
|
|
360
444
|
/* Map */
|
|
@@ -367,78 +451,64 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
367
451
|
configErrors.push({
|
|
368
452
|
class: 'mapEnabledModes',
|
|
369
453
|
message: '@validator-error-map-enabled-modes',
|
|
370
|
-
params: { invalidModes }
|
|
454
|
+
params: { invalidModes },
|
|
371
455
|
});
|
|
372
456
|
}
|
|
373
457
|
if (configErrors.length > 0) {
|
|
374
458
|
this.validationErrors.push({
|
|
375
|
-
id: String(this.formPathHelper.formPath.angularComponents?.[this.formPathHelper.formPath.angularComponents.length - 1] ??
|
|
459
|
+
id: String(this.formPathHelper.formPath.angularComponents?.[this.formPathHelper.formPath.angularComponents.length - 1] ??
|
|
460
|
+
''),
|
|
376
461
|
message: item?.config?.label ?? 'MapComponent configuration',
|
|
377
462
|
errors: configErrors,
|
|
378
|
-
lineagePaths: (0, sails_ng_common_1.buildLineagePaths)(this.formPathHelper.formPath)
|
|
463
|
+
lineagePaths: (0, sails_ng_common_1.buildLineagePaths)(this.formPathHelper.formPath),
|
|
379
464
|
});
|
|
380
465
|
}
|
|
381
466
|
}
|
|
382
|
-
async visitMapFieldModelDefinition(_item) {
|
|
383
|
-
}
|
|
467
|
+
async visitMapFieldModelDefinition(_item) { }
|
|
384
468
|
async visitMapFormComponentDefinition(item) {
|
|
385
469
|
await this.acceptFormComponentDefinition(item);
|
|
386
470
|
}
|
|
387
471
|
/* File Upload */
|
|
388
|
-
async visitFileUploadFieldComponentDefinition(_item) {
|
|
389
|
-
}
|
|
390
|
-
async visitFileUploadFieldModelDefinition(_item) {
|
|
391
|
-
}
|
|
472
|
+
async visitFileUploadFieldComponentDefinition(_item) { }
|
|
473
|
+
async visitFileUploadFieldModelDefinition(_item) { }
|
|
392
474
|
async visitFileUploadFormComponentDefinition(item) {
|
|
393
475
|
await this.acceptFormComponentDefinition(item);
|
|
394
476
|
}
|
|
395
|
-
async visitPDFListFieldComponentDefinition(_item) {
|
|
396
|
-
}
|
|
397
|
-
async visitPDFListFieldModelDefinition(_item) {
|
|
398
|
-
}
|
|
477
|
+
async visitPDFListFieldComponentDefinition(_item) { }
|
|
478
|
+
async visitPDFListFieldModelDefinition(_item) { }
|
|
399
479
|
async visitPDFListFormComponentDefinition(item) {
|
|
400
480
|
await this.acceptFormComponentDefinition(item);
|
|
401
481
|
}
|
|
402
|
-
async visitRecordMetadataRetrieverFieldComponentDefinition(_item) {
|
|
403
|
-
}
|
|
482
|
+
async visitRecordMetadataRetrieverFieldComponentDefinition(_item) { }
|
|
404
483
|
async visitRecordMetadataRetrieverFormComponentDefinition(item) {
|
|
405
484
|
await this.acceptFormComponentDefinition(item);
|
|
406
485
|
}
|
|
407
486
|
/* Data Location */
|
|
408
|
-
async visitDataLocationFieldComponentDefinition(_item) {
|
|
409
|
-
}
|
|
410
|
-
async visitDataLocationFieldModelDefinition(_item) {
|
|
411
|
-
}
|
|
487
|
+
async visitDataLocationFieldComponentDefinition(_item) { }
|
|
488
|
+
async visitDataLocationFieldModelDefinition(_item) { }
|
|
412
489
|
async visitDataLocationFormComponentDefinition(item) {
|
|
413
490
|
await this.acceptFormComponentDefinition(item);
|
|
414
491
|
}
|
|
415
492
|
// Validation is intentionally empty because there is no persisted refresh
|
|
416
493
|
// value to validate.
|
|
417
|
-
async visitPublishDataLocationRefreshFieldComponentDefinition(_item) {
|
|
418
|
-
}
|
|
494
|
+
async visitPublishDataLocationRefreshFieldComponentDefinition(_item) { }
|
|
419
495
|
async visitPublishDataLocationRefreshFormComponentDefinition(item) {
|
|
420
496
|
await this.acceptFormComponentDefinition(item);
|
|
421
497
|
}
|
|
422
|
-
async visitPublishDataLocationSelectorFieldComponentDefinition(_item) {
|
|
423
|
-
}
|
|
424
|
-
async visitPublishDataLocationSelectorFieldModelDefinition(_item) {
|
|
425
|
-
}
|
|
498
|
+
async visitPublishDataLocationSelectorFieldComponentDefinition(_item) { }
|
|
499
|
+
async visitPublishDataLocationSelectorFieldModelDefinition(_item) { }
|
|
426
500
|
async visitPublishDataLocationSelectorFormComponentDefinition(item) {
|
|
427
501
|
await this.acceptFormComponentDefinition(item);
|
|
428
502
|
}
|
|
429
503
|
/* Radio Input */
|
|
430
|
-
async visitRadioInputFieldComponentDefinition(_item) {
|
|
431
|
-
}
|
|
432
|
-
async visitRadioInputFieldModelDefinition(_item) {
|
|
433
|
-
}
|
|
504
|
+
async visitRadioInputFieldComponentDefinition(_item) { }
|
|
505
|
+
async visitRadioInputFieldModelDefinition(_item) { }
|
|
434
506
|
async visitRadioInputFormComponentDefinition(item) {
|
|
435
507
|
await this.acceptFormComponentDefinition(item);
|
|
436
508
|
}
|
|
437
509
|
/* Date Input */
|
|
438
|
-
async visitDateInputFieldComponentDefinition(_item) {
|
|
439
|
-
}
|
|
440
|
-
async visitDateInputFieldModelDefinition(_item) {
|
|
441
|
-
}
|
|
510
|
+
async visitDateInputFieldComponentDefinition(_item) { }
|
|
511
|
+
async visitDateInputFieldModelDefinition(_item) { }
|
|
442
512
|
async visitDateInputFormComponentDefinition(item) {
|
|
443
513
|
await this.acceptFormComponentDefinition(item);
|
|
444
514
|
}
|
|
@@ -446,11 +516,13 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
446
516
|
createFormControlFromRecordValue(recordValue) {
|
|
447
517
|
const guessedType = (0, sails_ng_common_1.guessType)(recordValue);
|
|
448
518
|
let result;
|
|
449
|
-
if (guessedType ===
|
|
450
|
-
result = new sails_ng_common_1.SimpleServerFormValidatorControl(Object.fromEntries(Object.entries(recordValue)
|
|
451
|
-
|
|
519
|
+
if (guessedType === 'object') {
|
|
520
|
+
result = new sails_ng_common_1.SimpleServerFormValidatorControl(Object.fromEntries(Object.entries(recordValue).map(([key, value]) => [
|
|
521
|
+
key,
|
|
522
|
+
this.createFormControlFromRecordValue(value),
|
|
523
|
+
])));
|
|
452
524
|
}
|
|
453
|
-
else if (guessedType ===
|
|
525
|
+
else if (guessedType === 'array') {
|
|
454
526
|
result = new sails_ng_common_1.SimpleServerFormValidatorControl(recordValue.map(i => this.createFormControlFromRecordValue(i)));
|
|
455
527
|
}
|
|
456
528
|
else {
|
|
@@ -459,8 +531,10 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
459
531
|
return result;
|
|
460
532
|
}
|
|
461
533
|
async acceptFormComponentDefinition(item) {
|
|
462
|
-
|
|
463
|
-
|
|
534
|
+
if (!this.transformationOnly) {
|
|
535
|
+
const validationErrors = await this.validateFormComponent(item?.name, item?.model?.config?.value, item?.model?.config?.validators, item?.layout?.config?.label);
|
|
536
|
+
this.validationErrors.push(...validationErrors);
|
|
537
|
+
}
|
|
464
538
|
await this.formPathHelper.acceptFormComponentDefinition(item);
|
|
465
539
|
}
|
|
466
540
|
async validateFormComponent(itemName, value, validators, message) {
|
|
@@ -468,29 +542,36 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
468
542
|
const availableValidatorGroups = this.form?.validationGroups ?? {};
|
|
469
543
|
const result = [];
|
|
470
544
|
if (Array.isArray(validators) && validators.length > 0) {
|
|
545
|
+
// Select the validators for this pass before preparing executable
|
|
546
|
+
// configuration. In particular, an advisory-only JSONata expression
|
|
547
|
+
// must not compile or execute during the blocking pass.
|
|
548
|
+
const filteredValidators = this.validatorSupport.enabledValidators(availableValidatorGroups, this.enabledValidationGroups, validators).filter(validator => !this.isValidatorExclusiveToGroups(availableValidatorGroups, validator));
|
|
471
549
|
// ensure jsonata-expression validators can be evaluated
|
|
472
|
-
this.validatorSupport.assignJsonataEvaluators(
|
|
473
|
-
const expr = validator?.config?.['expression']?.toString() ??
|
|
474
|
-
return
|
|
550
|
+
this.validatorSupport.assignJsonataEvaluators(filteredValidators, (validator, index) => {
|
|
551
|
+
const expr = validator?.config?.['expression']?.toString() ?? '';
|
|
552
|
+
return this.jsonataEvaluatorFactory(expr);
|
|
475
553
|
});
|
|
476
|
-
const filteredValidators = this.validatorSupport.enabledValidators(availableValidatorGroups, this.enabledValidationGroups, validators);
|
|
477
554
|
const formValidatorFns = createFormValidatorFns(this.validatorDefinitionsMap, filteredValidators);
|
|
478
555
|
const recordFormControl = this.createFormControlFromRecordValue(value);
|
|
479
556
|
const summaryErrors = {
|
|
480
|
-
id: itemName,
|
|
481
|
-
message: message
|
|
557
|
+
id: typeof itemName === 'string' && itemName.length > 0 ? itemName : null,
|
|
558
|
+
message: typeof message === 'string' && message.length > 0 ? message : null,
|
|
482
559
|
errors: [],
|
|
483
|
-
lineagePaths: (0, sails_ng_common_1.buildLineagePaths)(this.formPathHelper.formPath)
|
|
560
|
+
lineagePaths: (0, sails_ng_common_1.buildLineagePaths)(this.formPathHelper.formPath),
|
|
484
561
|
};
|
|
485
562
|
// async
|
|
486
563
|
for (const formValidatorFn of formValidatorFns.asyncDefs) {
|
|
564
|
+
this.checkDeadline();
|
|
487
565
|
const funcResult = await formValidatorFn(recordFormControl);
|
|
566
|
+
this.checkDeadline();
|
|
488
567
|
const compErrors = this.validatorSupport.getFormValidatorComponentErrors(funcResult);
|
|
489
568
|
summaryErrors.errors.push(...compErrors);
|
|
490
569
|
}
|
|
491
570
|
// sync
|
|
492
571
|
for (const formValidatorFn of formValidatorFns.syncDefs) {
|
|
572
|
+
this.checkDeadline();
|
|
493
573
|
const funcResult = formValidatorFn(recordFormControl);
|
|
574
|
+
this.checkDeadline();
|
|
494
575
|
const compErrors = this.validatorSupport.getFormValidatorComponentErrors(funcResult);
|
|
495
576
|
summaryErrors.errors.push(...compErrors);
|
|
496
577
|
}
|
|
@@ -501,12 +582,28 @@ class ValidatorFormConfigVisitor extends sails_ng_common_1.FormConfigVisitor {
|
|
|
501
582
|
}
|
|
502
583
|
return result;
|
|
503
584
|
}
|
|
585
|
+
isValidatorExclusiveToGroups(availableGroups, validator) {
|
|
586
|
+
if (this.excludedOnlyValidationGroups.length === 0)
|
|
587
|
+
return false;
|
|
588
|
+
// An initial-all group includes ordinary validators by default and can
|
|
589
|
+
// therefore never prove that a validator is advisory-only.
|
|
590
|
+
const excluded = new Set(this.excludedOnlyValidationGroups.filter(groupName => availableGroups[groupName]?.initialMembership !== 'all'));
|
|
591
|
+
if (excluded.size === 0)
|
|
592
|
+
return false;
|
|
593
|
+
const includes = validator?.groups?.include ?? [];
|
|
594
|
+
const excludes = validator?.groups?.exclude ?? [];
|
|
595
|
+
this.validatorSupport.checkValidationGroups(availableGroups, includes);
|
|
596
|
+
this.validatorSupport.checkValidationGroups(availableGroups, excludes);
|
|
597
|
+
const memberships = Object.entries(availableGroups).flatMap(([groupName, groupConfig]) => {
|
|
598
|
+
const membership = groupConfig?.initialMembership ?? 'none';
|
|
599
|
+
const belongs = membership === 'all' ? !excludes.includes(groupName) : includes.includes(groupName);
|
|
600
|
+
return belongs ? [groupName] : [];
|
|
601
|
+
});
|
|
602
|
+
return memberships.length > 0 && memberships.every(groupName => excluded.has(groupName));
|
|
603
|
+
}
|
|
504
604
|
normalizeHtmlForComparison(value) {
|
|
505
|
-
return value
|
|
506
|
-
.replace(/>\s+</g, '><')
|
|
507
|
-
.replace(/\s+/g, ' ')
|
|
508
|
-
.trim();
|
|
605
|
+
return value.replace(/>\s+</g, '><').replace(/\s+/g, ' ').trim();
|
|
509
606
|
}
|
|
510
607
|
}
|
|
511
608
|
exports.ValidatorFormConfigVisitor = ValidatorFormConfigVisitor;
|
|
512
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLnZpc2l0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzaXRvci92YWxpZGF0b3IudmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzRUE0RzBDO0FBQzFDLDZEQUFrRTtBQWFsRTs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsMEJBQTJCLFNBQVEsbUNBQWlCO0lBQ3JELGdCQUFnQixDQUFvQjtJQUVwQyxJQUFJLENBQW9CO0lBQ3hCLHVCQUF1QixDQUFXO0lBQ2xDLHVCQUF1QixDQUF1QztJQUU5RCxnQkFBZ0IsQ0FBK0I7SUFFL0MsY0FBYyxDQUFpQjtJQUV2QyxZQUFZLE1BQWU7UUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksbUNBQWlCLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksNEJBQVUsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO1FBRTFFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGdDQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BSVg7UUFFRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUV6Qiw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsS0FB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
|
|
609
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLnZpc2l0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzaXRvci92YWxpZGF0b3IudmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzRUFpSDBDO0FBQzFDLDZEQUFrRTtBQUNsRSxtQ0FBaUQ7QUEyQ2pEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSwwQkFBMkIsU0FBUSxtQ0FBaUI7SUFDdkQsZ0JBQWdCLENBQW9CO0lBRXBDLElBQUksQ0FBb0I7SUFDeEIsdUJBQXVCLENBQVc7SUFDbEMsNEJBQTRCLENBQVc7SUFDdkMsdUJBQXVCLENBQXVDO0lBQzlELHVCQUF1QixDQUEwQztJQUNqRSxhQUFhLENBQWE7SUFDMUIsa0JBQWtCLENBQVU7SUFFNUIsZ0JBQWdCLENBQStCO0lBQy9DLGVBQWUsQ0FBNEI7SUFFM0MsY0FBYyxDQUFpQjtJQUV2QyxZQUFZLE1BQWU7UUFDekIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksbUNBQWlCLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksNEJBQVUsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7UUFDMUUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHFDQUFtQixDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUUxQixJ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
|