@researchdatabox/redbox-core 5.0.2 → 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 +46 -5
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +815 -347
- 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 +664 -271
- 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/BrandingThemeTokens.d.ts.map +1 -1
- package/dist/services/BrandingThemeTokens.js +2 -1
- 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 +109 -45
- 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
|
@@ -58,9 +58,12 @@ const CoreService_1 = require("../CoreService");
|
|
|
58
58
|
const genson_js_1 = require("genson-js");
|
|
59
59
|
const path = __importStar(require("path"));
|
|
60
60
|
const vocab_inline_visitor_1 = require("../visitor/vocab-inline.visitor");
|
|
61
|
+
const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
|
|
61
62
|
const client_visitor_1 = require("../visitor/client.visitor");
|
|
62
63
|
const construct_visitor_1 = require("../visitor/construct.visitor");
|
|
63
64
|
const context_variables_visitor_1 = require("../visitor/context-variables.visitor");
|
|
65
|
+
const related_object_data_inline_visitor_1 = require("../visitor/related-object-data-inline.visitor");
|
|
66
|
+
const core_contributors_1 = require("../record-contract/core-contributors");
|
|
64
67
|
var Services;
|
|
65
68
|
(function (Services) {
|
|
66
69
|
/**
|
|
@@ -82,30 +85,34 @@ var Services;
|
|
|
82
85
|
'generateFormFromSchema',
|
|
83
86
|
'getFormByStartingWorkflowStep',
|
|
84
87
|
'buildClientFormConfig',
|
|
88
|
+
'buildContractFormConfig',
|
|
89
|
+
'listConfiguredRecordContractForms',
|
|
90
|
+
'discoverValidationOperations',
|
|
91
|
+
'toPublicForm',
|
|
85
92
|
];
|
|
86
93
|
async bootstrap(workflowStep, brandingId) {
|
|
87
94
|
this.logger.verbose(`Bootstrapping form for workflow step: ${workflowStep.id} with form config: ${workflowStep.config.form}`);
|
|
88
95
|
let form = await Form.find({
|
|
89
96
|
name: workflowStep.config.form,
|
|
90
|
-
branding: brandingId
|
|
97
|
+
branding: brandingId,
|
|
91
98
|
});
|
|
92
99
|
if (sails.config.appmode.bootstrapAlways) {
|
|
93
100
|
this.logger.verbose(`Destroying existing form definitions: ${workflowStep.config.form}`);
|
|
94
101
|
await Form.destroyOne({
|
|
95
102
|
name: workflowStep.config.form,
|
|
96
|
-
branding: brandingId
|
|
103
|
+
branding: brandingId,
|
|
97
104
|
});
|
|
98
105
|
form = null;
|
|
99
106
|
}
|
|
100
107
|
let formDefs = [];
|
|
101
108
|
let formName = null;
|
|
102
109
|
const formRegistry = this.getFormConfigRegistry();
|
|
103
|
-
this.logger.verbose(
|
|
110
|
+
this.logger.verbose('Form registry: ');
|
|
104
111
|
this.logger.verbose(JSON.stringify(formRegistry));
|
|
105
|
-
this.logger.verbose(
|
|
112
|
+
this.logger.verbose('Found : ');
|
|
106
113
|
this.logger.verbose(form);
|
|
107
114
|
if (!form || (Array.isArray(form) && form.length == 0)) {
|
|
108
|
-
this.logger.verbose(
|
|
115
|
+
this.logger.verbose('Bootstrapping form definitions..');
|
|
109
116
|
// only bootstrap the form for this workflow step
|
|
110
117
|
_.forOwn(formRegistry, (_formDef, formName) => {
|
|
111
118
|
if (formName == workflowStep.config.form) {
|
|
@@ -118,16 +125,16 @@ var Services;
|
|
|
118
125
|
formName = firstFormDef ?? null;
|
|
119
126
|
}
|
|
120
127
|
else {
|
|
121
|
-
this.logger.verbose(
|
|
128
|
+
this.logger.verbose('Not Bootstrapping form definitions... ');
|
|
122
129
|
}
|
|
123
130
|
// check now if the form already exists, if it does, ignore...
|
|
124
|
-
const existingFormDef = await Form.find({
|
|
131
|
+
const existingFormDef = (await Form.find({
|
|
125
132
|
name: formName,
|
|
126
|
-
branding: brandingId
|
|
127
|
-
});
|
|
133
|
+
branding: brandingId,
|
|
134
|
+
}));
|
|
128
135
|
const existCheck = {
|
|
129
136
|
formName: formName,
|
|
130
|
-
existingFormDef: existingFormDef
|
|
137
|
+
existingFormDef: existingFormDef,
|
|
131
138
|
};
|
|
132
139
|
this.logger.verbose(`Existing form check: ${existCheck.formName}`);
|
|
133
140
|
this.logger.verbose(JSON.stringify(existCheck));
|
|
@@ -138,7 +145,7 @@ var Services;
|
|
|
138
145
|
else {
|
|
139
146
|
this.logger.verbose(`Existing form definition for form name: ${existCheck.existingFormDef[0]?.name}, ignoring bootstrap.`);
|
|
140
147
|
}
|
|
141
|
-
this.logger.verbose(
|
|
148
|
+
this.logger.verbose('FormName is:');
|
|
142
149
|
this.logger.verbose(formName);
|
|
143
150
|
let result = null;
|
|
144
151
|
if (formName) {
|
|
@@ -161,11 +168,13 @@ var Services;
|
|
|
161
168
|
enabledValidationGroups: formConfigRaw.enabledValidationGroups,
|
|
162
169
|
validators: formConfigRaw.validators,
|
|
163
170
|
validationGroups: formConfigRaw.validationGroups,
|
|
171
|
+
validationOperations: formConfigRaw.validationOperations,
|
|
164
172
|
behaviours: formConfigRaw.behaviours,
|
|
165
173
|
defaultLayoutComponent: formConfigRaw.defaultLayoutComponent,
|
|
166
174
|
componentDefinitions: formConfigRaw.componentDefinitions,
|
|
167
175
|
debugValue: formConfigRaw.debugValue,
|
|
168
176
|
attachmentFields: (formConfigRaw.attachmentFields ?? []),
|
|
177
|
+
serverSyncOnSave: formConfigRaw.serverSyncOnSave,
|
|
169
178
|
// Deprecated legacy properties (now removed):
|
|
170
179
|
// fields → replaced by componentDefinitions
|
|
171
180
|
// requiredFieldIndicator → removed
|
|
@@ -177,17 +186,17 @@ var Services;
|
|
|
177
186
|
branding: brandingId,
|
|
178
187
|
configuration: formConfig,
|
|
179
188
|
};
|
|
180
|
-
result = await Form.create(formObj);
|
|
181
|
-
this.logger.verbose(
|
|
189
|
+
result = (await Form.create(formObj));
|
|
190
|
+
this.logger.verbose('Created form record: ');
|
|
182
191
|
this.logger.verbose(result);
|
|
183
192
|
}
|
|
184
193
|
if (result) {
|
|
185
194
|
this.logger.verbose(`Updating workflowstep ${workflowStep.id} to form: ${result.id}`);
|
|
186
195
|
// update the workflow step to reference the form
|
|
187
196
|
return await WorkflowStep.update({
|
|
188
|
-
id: workflowStep.id
|
|
197
|
+
id: workflowStep.id,
|
|
189
198
|
}).set({
|
|
190
|
-
form: result.id
|
|
199
|
+
form: result.id,
|
|
191
200
|
});
|
|
192
201
|
}
|
|
193
202
|
return null;
|
|
@@ -205,6 +214,21 @@ var Services;
|
|
|
205
214
|
return {};
|
|
206
215
|
}
|
|
207
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Snapshot every registered form without selecting a record, actor, workflow,
|
|
219
|
+
* or operation. RecordSchemaService owns validation and compilation of these
|
|
220
|
+
* detached candidates during its awaited startup phase.
|
|
221
|
+
*/
|
|
222
|
+
listConfiguredRecordContractForms() {
|
|
223
|
+
const reusableFormDefinitions = _.cloneDeep(sails.config.reusableFormDefinitions ?? {});
|
|
224
|
+
return Object.entries(this.getFormConfigRegistry())
|
|
225
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
226
|
+
.map(([name, form]) => Object.freeze({
|
|
227
|
+
name,
|
|
228
|
+
form: _.cloneDeep(form),
|
|
229
|
+
reusableFormDefinitions: _.cloneDeep(reusableFormDefinitions),
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
208
232
|
listForms = (brandingId) => {
|
|
209
233
|
const query = {};
|
|
210
234
|
if (brandingId) {
|
|
@@ -246,25 +270,156 @@ var Services;
|
|
|
246
270
|
...form,
|
|
247
271
|
configuration: {
|
|
248
272
|
...form.configuration,
|
|
249
|
-
type: resolvedRecordType
|
|
250
|
-
}
|
|
273
|
+
type: resolvedRecordType,
|
|
274
|
+
},
|
|
251
275
|
};
|
|
252
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Remove the server-owned operation policy and add only caller-filtered
|
|
279
|
+
* discovery metadata. Nested form configuration is otherwise preserved for
|
|
280
|
+
* compatibility with existing form clients.
|
|
281
|
+
*/
|
|
282
|
+
toPublicForm(form, validationOperations) {
|
|
283
|
+
const configuration = form.configuration;
|
|
284
|
+
const { validationOperations: _internalOperations, ...publicConfiguration } = configuration ?? {};
|
|
285
|
+
const safeOperations = validationOperations
|
|
286
|
+
?.map(operation => (0, sails_ng_common_1.sanitizeValidationOperationDiscovery)(operation))
|
|
287
|
+
.filter((operation) => operation !== undefined);
|
|
288
|
+
return {
|
|
289
|
+
...form,
|
|
290
|
+
...(configuration ? { configuration: publicConfiguration } : {}),
|
|
291
|
+
...(safeOperations
|
|
292
|
+
? {
|
|
293
|
+
validationOperations: safeOperations,
|
|
294
|
+
}
|
|
295
|
+
: {}),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Discover operations using the same form/type/stage policy resolver as a
|
|
300
|
+
* save, after applying existing record-edit and workflow-transition access.
|
|
301
|
+
* Missing services, actor data, or context fail safely to no operations.
|
|
302
|
+
*/
|
|
303
|
+
async discoverValidationOperations(options) {
|
|
304
|
+
if (!options.editable)
|
|
305
|
+
return [];
|
|
306
|
+
const user = (options.user ?? {});
|
|
307
|
+
const username = String(user.username ?? '').trim();
|
|
308
|
+
if (!username)
|
|
309
|
+
return [];
|
|
310
|
+
try {
|
|
311
|
+
const recordsService = sails.services.recordsservice;
|
|
312
|
+
const validationService = sails.services.recordvalidationservice;
|
|
313
|
+
if (!recordsService ||
|
|
314
|
+
typeof recordsService.hasEditAccess !== 'function' ||
|
|
315
|
+
typeof recordsService.hasTransitionRoleAuthorization !== 'function' ||
|
|
316
|
+
!validationService ||
|
|
317
|
+
typeof validationService.discoverOperations !== 'function') {
|
|
318
|
+
return [];
|
|
319
|
+
}
|
|
320
|
+
const actorRoles = Array.isArray(user.roles) ? user.roles : [];
|
|
321
|
+
const normalizedActorRoles = [
|
|
322
|
+
...new Set(actorRoles
|
|
323
|
+
.map(role => typeof role === 'string' ? role.trim() : String(role?.name ?? '').trim())
|
|
324
|
+
.filter(Boolean)),
|
|
325
|
+
].sort(sails_ng_common_1.compareRecordValidationIdentifiers);
|
|
326
|
+
const record = options.record ?? null;
|
|
327
|
+
const canEdit = record
|
|
328
|
+
? recordsService.hasEditAccess(options.brand, user, actorRoles, record)
|
|
329
|
+
: true;
|
|
330
|
+
if (!canEdit)
|
|
331
|
+
return [];
|
|
332
|
+
const recordTypeName = String(record?.metaMetadata?.type ?? options.recordType ?? options.form.configuration?.type ?? '').trim();
|
|
333
|
+
const brandId = String(record?.metaMetadata?.brandId ?? options.brand?.id ?? '').trim();
|
|
334
|
+
const formName = String(record?.metaMetadata?.form ?? options.form.name ?? '').trim();
|
|
335
|
+
if (!recordTypeName || !brandId || !formName)
|
|
336
|
+
return [];
|
|
337
|
+
if (record && String(options.form.name ?? '').trim() !== formName)
|
|
338
|
+
return [];
|
|
339
|
+
if (!record) {
|
|
340
|
+
const configuredFormType = String(options.form.configuration?.type ?? '').trim();
|
|
341
|
+
if (configuredFormType && configuredFormType !== recordTypeName)
|
|
342
|
+
return [];
|
|
343
|
+
}
|
|
344
|
+
const recordType = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(options.brand, recordTypeName));
|
|
345
|
+
if (!recordType)
|
|
346
|
+
return [];
|
|
347
|
+
const workflowSteps = await (0, rxjs_1.firstValueFrom)(WorkflowStepsService.getAllForRecordType(recordType));
|
|
348
|
+
if (!record) {
|
|
349
|
+
const requestedContextStep = options.targetStep
|
|
350
|
+
? (workflowSteps ?? []).find(step => String(step?.name ?? '').trim() === options.targetStep?.trim())
|
|
351
|
+
: (workflowSteps ?? []).find(step => step?.starting === true);
|
|
352
|
+
const contextConfig = requestedContextStep?.config;
|
|
353
|
+
const contextFormName = String(contextConfig && typeof contextConfig === 'object' && !Array.isArray(contextConfig)
|
|
354
|
+
? (contextConfig.form ?? '')
|
|
355
|
+
: '').trim();
|
|
356
|
+
if (!contextFormName || contextFormName !== formName)
|
|
357
|
+
return [];
|
|
358
|
+
}
|
|
359
|
+
const authorizedTargetSteps = (workflowSteps ?? [])
|
|
360
|
+
.filter(step => recordsService.hasTransitionRoleAuthorization(step, user))
|
|
361
|
+
.map(step => String(step?.name ?? '').trim())
|
|
362
|
+
.filter(step => sails_ng_common_1.RECORD_VALIDATION_REFERENCE_PATTERN.test(step))
|
|
363
|
+
.sort(sails_ng_common_1.compareRecordValidationIdentifiers);
|
|
364
|
+
const targetStep = options.targetStep?.trim();
|
|
365
|
+
if (targetStep && !authorizedTargetSteps.includes(targetStep))
|
|
366
|
+
return [];
|
|
367
|
+
const candidate = {
|
|
368
|
+
...(record?.redboxOid ? { redboxOid: String(record.redboxOid) } : {}),
|
|
369
|
+
metadata: record?.metadata ?? {},
|
|
370
|
+
metaMetadata: {
|
|
371
|
+
...(record?.metaMetadata ?? {}),
|
|
372
|
+
brandId,
|
|
373
|
+
type: recordTypeName,
|
|
374
|
+
form: formName,
|
|
375
|
+
},
|
|
376
|
+
...(record?.workflow ? { workflow: record.workflow } : {}),
|
|
377
|
+
};
|
|
378
|
+
const operations = await validationService.discoverOperations({
|
|
379
|
+
candidate,
|
|
380
|
+
writeKind: targetStep ? (record ? 'transition' : 'create') : record ? 'update' : 'create',
|
|
381
|
+
...(targetStep ? { targetStep } : {}),
|
|
382
|
+
actor: { authenticated: true, roles: normalizedActorRoles },
|
|
383
|
+
canEdit: true,
|
|
384
|
+
authorizedTargetSteps,
|
|
385
|
+
});
|
|
386
|
+
const transportTargets = new Set(targetStep ? [targetStep] : authorizedTargetSteps);
|
|
387
|
+
const merged = new Map();
|
|
388
|
+
for (const operation of operations) {
|
|
389
|
+
const safeOperation = (0, sails_ng_common_1.sanitizeValidationOperationDiscovery)(operation, transportTargets);
|
|
390
|
+
if (safeOperation)
|
|
391
|
+
merged.set(safeOperation.name, safeOperation);
|
|
392
|
+
}
|
|
393
|
+
return [...merged.values()].sort((left, right) => (0, sails_ng_common_1.compareRecordValidationIdentifiers)(left.name, right.name));
|
|
394
|
+
}
|
|
395
|
+
catch (error) {
|
|
396
|
+
const errorType = error instanceof Error ? error.name : typeof error;
|
|
397
|
+
const recordType = String(options.record?.metaMetadata?.type ?? options.recordType ?? '').trim();
|
|
398
|
+
const formName = String(options.record?.metaMetadata?.form ?? options.form.name ?? '').trim();
|
|
399
|
+
this.logger.warn(`Validation operation discovery was safely omitted` +
|
|
400
|
+
` (recordType=${sails_ng_common_1.RECORD_VALIDATION_REFERENCE_PATTERN.test(recordType) ? recordType : 'unavailable'},` +
|
|
401
|
+
` form=${sails_ng_common_1.RECORD_VALIDATION_REFERENCE_PATTERN.test(formName) ? formName : 'unavailable'},` +
|
|
402
|
+
` errorType=${errorType}).`);
|
|
403
|
+
return [];
|
|
404
|
+
}
|
|
405
|
+
}
|
|
253
406
|
getFormByStartingWorkflowStep(branding, recordType, _editMode) {
|
|
254
407
|
const starting = true;
|
|
255
|
-
return super
|
|
256
|
-
|
|
257
|
-
|
|
408
|
+
return super
|
|
409
|
+
.getObservable(RecordType.findOne({
|
|
410
|
+
key: branding.id + '_' + recordType,
|
|
411
|
+
}))
|
|
412
|
+
.pipe((0, operators_1.mergeMap)(recordTypeRecord => {
|
|
258
413
|
const recordTypeId = String(recordTypeRecord?.id ?? '');
|
|
259
414
|
return super.getObservable(WorkflowStep.findOne({
|
|
260
415
|
recordType: recordTypeId,
|
|
261
|
-
starting: starting
|
|
416
|
+
starting: starting,
|
|
262
417
|
}));
|
|
263
418
|
}), (0, operators_1.mergeMap)(workflowStep => {
|
|
264
419
|
if (workflowStep?.starting == true) {
|
|
265
420
|
return super.getObservable(Form.findOne({
|
|
266
421
|
name: workflowStep.config.form,
|
|
267
|
-
branding: branding.id
|
|
422
|
+
branding: branding.id,
|
|
268
423
|
}));
|
|
269
424
|
}
|
|
270
425
|
return (0, rxjs_1.of)(null);
|
|
@@ -273,11 +428,11 @@ var Services;
|
|
|
273
428
|
return (0, rxjs_1.of)(form);
|
|
274
429
|
}
|
|
275
430
|
return (0, rxjs_1.of)(null);
|
|
276
|
-
}), (0, operators_1.take)(1), (0, operators_1.tap)(
|
|
431
|
+
}), (0, operators_1.take)(1), (0, operators_1.tap)(form => {
|
|
277
432
|
if (!form) {
|
|
278
433
|
this.logger.warn(`No starting form found for branding '${String(branding?.id ?? '')}', recordType '${recordType}'`);
|
|
279
434
|
}
|
|
280
|
-
}), (0, operators_1.map)(
|
|
435
|
+
}), (0, operators_1.map)(form => form), (0, operators_1.catchError)((error) => {
|
|
281
436
|
const message = error instanceof Error ? error.message : String(error);
|
|
282
437
|
this.logger.error(`Error loading starting workflow form for branding '${String(branding?.id ?? '')}', recordType '${recordType}': ${message}`);
|
|
283
438
|
return (0, rxjs_1.of)(null);
|
|
@@ -289,7 +444,7 @@ var Services;
|
|
|
289
444
|
}
|
|
290
445
|
async generateFormFromSchema(branding, recordType, record) {
|
|
291
446
|
if (recordType == '') {
|
|
292
|
-
recordType = _.get(record, 'metaMetadata.type', '');
|
|
447
|
+
recordType = String(_.get(record, 'metaMetadata.type', ''));
|
|
293
448
|
if (recordType == '') {
|
|
294
449
|
return {};
|
|
295
450
|
}
|
|
@@ -305,9 +460,9 @@ var Services;
|
|
|
305
460
|
label: '@view-record-audit-link',
|
|
306
461
|
value: '/@branding/@portal/record/viewAudit/@oid',
|
|
307
462
|
cssClasses: 'btn btn-large btn-info margin-15',
|
|
308
|
-
controlType: 'anchor'
|
|
463
|
+
controlType: 'anchor',
|
|
309
464
|
},
|
|
310
|
-
variableSubstitutionFields: ['value']
|
|
465
|
+
variableSubstitutionFields: ['value'],
|
|
311
466
|
},
|
|
312
467
|
{
|
|
313
468
|
class: 'SaveButton',
|
|
@@ -324,10 +479,10 @@ var Services;
|
|
|
324
479
|
cancelButtonMessage: '@dataPublication-cancelButtonMessage',
|
|
325
480
|
confirmButtonMessage: '@dataPublication-confirmButtonMessage',
|
|
326
481
|
isDelete: true,
|
|
327
|
-
isSubmissionButton: true
|
|
482
|
+
isSubmissionButton: true,
|
|
328
483
|
},
|
|
329
|
-
variableSubstitutionFields: ['redirectLocation']
|
|
330
|
-
}
|
|
484
|
+
variableSubstitutionFields: ['redirectLocation'],
|
|
485
|
+
},
|
|
331
486
|
];
|
|
332
487
|
const textFieldTemplate = {
|
|
333
488
|
class: 'TextField',
|
|
@@ -338,15 +493,17 @@ var Services;
|
|
|
338
493
|
help: '',
|
|
339
494
|
type: 'text',
|
|
340
495
|
subscribe: {
|
|
341
|
-
|
|
342
|
-
onFormLoaded: [
|
|
496
|
+
form: {
|
|
497
|
+
onFormLoaded: [
|
|
498
|
+
{
|
|
343
499
|
action: 'utilityService.runTemplate',
|
|
344
500
|
template: '',
|
|
345
|
-
includeFieldInFnCall: true
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
501
|
+
includeFieldInFnCall: true,
|
|
502
|
+
},
|
|
503
|
+
],
|
|
504
|
+
},
|
|
505
|
+
},
|
|
506
|
+
},
|
|
350
507
|
};
|
|
351
508
|
const groupComponentTemplate = {
|
|
352
509
|
class: 'Container',
|
|
@@ -354,8 +511,8 @@ var Services;
|
|
|
354
511
|
definition: {
|
|
355
512
|
name: '',
|
|
356
513
|
cssClasses: 'form-inline',
|
|
357
|
-
fields: []
|
|
358
|
-
}
|
|
514
|
+
fields: [],
|
|
515
|
+
},
|
|
359
516
|
};
|
|
360
517
|
const groupTextFieldTemplate = {
|
|
361
518
|
class: 'TextField',
|
|
@@ -365,8 +522,8 @@ var Services;
|
|
|
365
522
|
type: 'text',
|
|
366
523
|
groupName: '',
|
|
367
524
|
groupClasses: 'width-30',
|
|
368
|
-
cssClasses:
|
|
369
|
-
}
|
|
525
|
+
cssClasses: 'width-80 form-control',
|
|
526
|
+
},
|
|
370
527
|
};
|
|
371
528
|
const repeatableGroupComponentTemplate = {
|
|
372
529
|
class: 'RepeatableContainer',
|
|
@@ -376,16 +533,16 @@ var Services;
|
|
|
376
533
|
label: '',
|
|
377
534
|
help: '',
|
|
378
535
|
forceClone: ['fields'],
|
|
379
|
-
fields: []
|
|
380
|
-
}
|
|
536
|
+
fields: [],
|
|
537
|
+
},
|
|
381
538
|
};
|
|
382
539
|
const objectFieldHeadingTemplate = {
|
|
383
540
|
class: 'Container',
|
|
384
541
|
compClass: 'TextBlockComponent',
|
|
385
542
|
definition: {
|
|
386
543
|
value: '',
|
|
387
|
-
type: 'h3'
|
|
388
|
-
}
|
|
544
|
+
type: 'h3',
|
|
545
|
+
},
|
|
389
546
|
};
|
|
390
547
|
const mainTitleFieldName = 'title';
|
|
391
548
|
const fieldList = [];
|
|
@@ -396,7 +553,11 @@ var Services;
|
|
|
396
553
|
const textField = _.cloneDeep(textFieldTemplate);
|
|
397
554
|
_.set(textField.definition, 'name', fieldKey);
|
|
398
555
|
_.set(textField.definition, 'label', fieldKey);
|
|
399
|
-
_.set(textField.definition, 'subscribe.form.onFormLoaded[0].template', '<%= _.trim(field.fieldMap["' +
|
|
556
|
+
_.set(textField.definition, 'subscribe.form.onFormLoaded[0].template', '<%= _.trim(field.fieldMap["' +
|
|
557
|
+
fieldKey +
|
|
558
|
+
'"].field.value) == "" ? field.translationService.t("@lookup-record-field-empty") : field.fieldMap["' +
|
|
559
|
+
fieldKey +
|
|
560
|
+
'"].field.value %>');
|
|
400
561
|
fieldList.push(textField);
|
|
401
562
|
}
|
|
402
563
|
if (schemaType === 'array') {
|
|
@@ -405,7 +566,11 @@ var Services;
|
|
|
405
566
|
const textField = _.cloneDeep(textFieldTemplate);
|
|
406
567
|
_.set(textField.definition, 'name', fieldKey);
|
|
407
568
|
_.set(textField.definition, 'label', fieldKey);
|
|
408
|
-
_.set(textField.definition, 'subscribe.form.onFormLoaded[0].template', '<%= _.isEmpty(_.trim(field.fieldMap["' +
|
|
569
|
+
_.set(textField.definition, 'subscribe.form.onFormLoaded[0].template', '<%= _.isEmpty(_.trim(field.fieldMap["' +
|
|
570
|
+
fieldKey +
|
|
571
|
+
'"].field.value)) ? [field.translationService.t("@lookup-record-field-empty")] : field.fieldMap["' +
|
|
572
|
+
fieldKey +
|
|
573
|
+
'"].field.value %>');
|
|
409
574
|
fieldList.push(textField);
|
|
410
575
|
}
|
|
411
576
|
else if (itemType === 'object') {
|
|
@@ -468,16 +633,16 @@ var Services;
|
|
|
468
633
|
viewOnly: true,
|
|
469
634
|
definition: {
|
|
470
635
|
name: mainTitleFieldName,
|
|
471
|
-
type: 'h1'
|
|
472
|
-
}
|
|
636
|
+
type: 'h1',
|
|
637
|
+
},
|
|
473
638
|
},
|
|
474
639
|
{
|
|
475
640
|
class: 'Container',
|
|
476
641
|
compClass: 'GenericGroupComponent',
|
|
477
642
|
definition: {
|
|
478
|
-
cssClasses:
|
|
479
|
-
fields: buttonsList
|
|
480
|
-
}
|
|
643
|
+
cssClasses: 'form-inline',
|
|
644
|
+
fields: buttonsList,
|
|
645
|
+
},
|
|
481
646
|
},
|
|
482
647
|
{
|
|
483
648
|
class: 'TabOrAccordionContainer',
|
|
@@ -494,13 +659,13 @@ var Services;
|
|
|
494
659
|
id: 'main',
|
|
495
660
|
label: '@lookup-record-details-' + recordType,
|
|
496
661
|
active: true,
|
|
497
|
-
fields: fieldList
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
]
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
]
|
|
662
|
+
fields: fieldList,
|
|
663
|
+
},
|
|
664
|
+
},
|
|
665
|
+
],
|
|
666
|
+
},
|
|
667
|
+
},
|
|
668
|
+
],
|
|
504
669
|
};
|
|
505
670
|
const form = formObject;
|
|
506
671
|
return form;
|
|
@@ -524,6 +689,29 @@ var Services;
|
|
|
524
689
|
}
|
|
525
690
|
});
|
|
526
691
|
}
|
|
692
|
+
/**
|
|
693
|
+
* Build the translation lookup used to resolve form config default values.
|
|
694
|
+
*
|
|
695
|
+
* Returns undefined when the translation service is not available, so the form
|
|
696
|
+
* config values are left as they are rather than failing to build the form.
|
|
697
|
+
*
|
|
698
|
+
* @param branding The branding name.
|
|
699
|
+
*/
|
|
700
|
+
buildFormConfigTranslator(branding) {
|
|
701
|
+
if (typeof TranslationService === 'undefined' || typeof TranslationService?.t !== 'function') {
|
|
702
|
+
return undefined;
|
|
703
|
+
}
|
|
704
|
+
const brandingName = branding || 'default';
|
|
705
|
+
return (key) => {
|
|
706
|
+
try {
|
|
707
|
+
return String(TranslationService.t(key, undefined, 'en', brandingName) ?? key);
|
|
708
|
+
}
|
|
709
|
+
catch (error) {
|
|
710
|
+
this.logger.warn(`Failed to translate form config value '${key}': ${error?.message}`);
|
|
711
|
+
return key;
|
|
712
|
+
}
|
|
713
|
+
};
|
|
714
|
+
}
|
|
527
715
|
/**
|
|
528
716
|
* Convert a server-side form config to a client-side form config.
|
|
529
717
|
*
|
|
@@ -533,22 +721,38 @@ var Services;
|
|
|
533
721
|
* @param recordMetadata The record metadata.
|
|
534
722
|
* @param reusableFormDefs The reusable form definitions.
|
|
535
723
|
*/
|
|
536
|
-
async buildClientFormConfig(item, formMode, userRoles, recordMetadata, reusableFormDefs, branding, contextVariablesMap) {
|
|
724
|
+
async buildClientFormConfig(item, formMode, userRoles, recordMetadata, reusableFormDefs, branding, contextVariablesMap, recordAccessContext, preserveDefaultValues = false) {
|
|
537
725
|
const constructor = new construct_visitor_1.ConstructFormConfigVisitor(this.logger);
|
|
538
|
-
const constructed = await constructor.start({
|
|
726
|
+
const constructed = await constructor.start({
|
|
727
|
+
data: item,
|
|
728
|
+
reusableFormDefs,
|
|
729
|
+
formMode,
|
|
730
|
+
record: recordMetadata,
|
|
731
|
+
translate: this.buildFormConfigTranslator(branding),
|
|
732
|
+
preserveDefaultValues,
|
|
733
|
+
});
|
|
539
734
|
const vocabVisitor = new vocab_inline_visitor_1.VocabInlineFormConfigVisitor(this.logger);
|
|
540
735
|
await vocabVisitor.resolveVocabs(constructed, branding, {
|
|
541
|
-
includeHistoricalValues: recordMetadata !== null && recordMetadata !== undefined
|
|
736
|
+
includeHistoricalValues: recordMetadata !== null && recordMetadata !== undefined,
|
|
542
737
|
});
|
|
543
738
|
const contextVariablesVisitor = new context_variables_visitor_1.ContextVariablesFormConfigVisitor(this.logger);
|
|
544
739
|
await contextVariablesVisitor.applyContextVariables(constructed, contextVariablesMap);
|
|
740
|
+
if (recordMetadata && recordAccessContext) {
|
|
741
|
+
const recordsService = sails.services.recordsservice;
|
|
742
|
+
const relatedVisitor = new related_object_data_inline_visitor_1.RelatedObjectDataInlineFormConfigVisitor(this.logger, recordsService);
|
|
743
|
+
await relatedVisitor.resolve(constructed, recordMetadata, recordAccessContext);
|
|
744
|
+
}
|
|
545
745
|
// create the client form config
|
|
546
746
|
const visitor = new client_visitor_1.ClientFormConfigVisitor(this.logger);
|
|
547
747
|
const result = await visitor.start({ form: constructed, formMode, userRoles, reusableFormDefs });
|
|
548
748
|
if (!result) {
|
|
549
749
|
throw new Error(`The form config is invalid because all form fields were removed, ` +
|
|
550
750
|
`the form config must have at least one field the current user can view: ${JSON.stringify({
|
|
551
|
-
item,
|
|
751
|
+
item,
|
|
752
|
+
formMode,
|
|
753
|
+
userRoles,
|
|
754
|
+
recordData: recordMetadata,
|
|
755
|
+
reusableFormDefs,
|
|
552
756
|
})}`);
|
|
553
757
|
}
|
|
554
758
|
const componentDefinitions = result.componentDefinitions;
|
|
@@ -560,6 +764,62 @@ var Services;
|
|
|
560
764
|
}
|
|
561
765
|
return result;
|
|
562
766
|
}
|
|
767
|
+
/**
|
|
768
|
+
* Build the effective form used to compile a record contract.
|
|
769
|
+
*
|
|
770
|
+
* Create contracts deliberately use the form defaults rather than a synthetic
|
|
771
|
+
* record candidate. This keeps candidate-dependent form branches available to
|
|
772
|
+
* the contract compiler. Update contracts use the authoritative existing record.
|
|
773
|
+
*/
|
|
774
|
+
async buildContractFormConfig(context, recordAccessContext) {
|
|
775
|
+
const { resolution } = context;
|
|
776
|
+
const sourceForm = _.cloneDeep({
|
|
777
|
+
...resolution.sourceForm,
|
|
778
|
+
componentDefinitions: [...resolution.sourceForm.componentDefinitions],
|
|
779
|
+
});
|
|
780
|
+
const reusableFormDefinitions = {};
|
|
781
|
+
for (const [name, definitions] of Object.entries(resolution.reusableFormDefinitions)) {
|
|
782
|
+
reusableFormDefinitions[name] = _.cloneDeep([...definitions]);
|
|
783
|
+
}
|
|
784
|
+
const recordMetadata = context.publicContext.kind === 'update'
|
|
785
|
+
? _.cloneDeep((context.resolution.existingRecord?.metadata ?? {}))
|
|
786
|
+
: null;
|
|
787
|
+
const effectiveForm = await this.buildClientFormConfig(sourceForm, resolution.formMode, [...resolution.actor.roles], recordMetadata, reusableFormDefinitions, context.publicContext.brand, _.cloneDeep(resolution.contextVariables), recordAccessContext, true);
|
|
788
|
+
effectiveForm.componentDefinitions = this.retainSubmittableContractComponents(effectiveForm.componentDefinitions ?? []);
|
|
789
|
+
if (effectiveForm.componentDefinitions.length === 0) {
|
|
790
|
+
return { ok: false, reason: 'empty-effective-form' };
|
|
791
|
+
}
|
|
792
|
+
return { ok: true, effectiveForm };
|
|
793
|
+
}
|
|
794
|
+
/** Prune known display-only core leaves and structural shells emptied by that pruning. */
|
|
795
|
+
retainSubmittableContractComponents(componentDefinitions) {
|
|
796
|
+
const nestedKeys = ['componentDefinitions', 'tabs', 'panels', 'headerActions'];
|
|
797
|
+
return componentDefinitions.filter(componentDefinition => {
|
|
798
|
+
const componentType = componentDefinition.component.class;
|
|
799
|
+
const classification = Object.prototype.hasOwnProperty.call(core_contributors_1.CORE_RECORD_CONTRACT_COMPONENT_INVENTORY, componentType)
|
|
800
|
+
? core_contributors_1.CORE_RECORD_CONTRACT_COMPONENT_INVENTORY[componentType]
|
|
801
|
+
: undefined;
|
|
802
|
+
const config = componentDefinition.component.config;
|
|
803
|
+
let nestedComponentCount = 0;
|
|
804
|
+
let hasNestedComponents = false;
|
|
805
|
+
for (const key of nestedKeys) {
|
|
806
|
+
if (!config)
|
|
807
|
+
break;
|
|
808
|
+
const children = config[key];
|
|
809
|
+
if (!Array.isArray(children))
|
|
810
|
+
continue;
|
|
811
|
+
hasNestedComponents = true;
|
|
812
|
+
const retained = this.retainSubmittableContractComponents(children);
|
|
813
|
+
config[key] = retained;
|
|
814
|
+
nestedComponentCount += retained.length;
|
|
815
|
+
}
|
|
816
|
+
if (classification === 'non-persisting')
|
|
817
|
+
return false;
|
|
818
|
+
if (classification === 'container')
|
|
819
|
+
return hasNestedComponents && nestedComponentCount > 0;
|
|
820
|
+
return true;
|
|
821
|
+
});
|
|
822
|
+
}
|
|
563
823
|
findComponentDefinitionByName(componentDefinitions, targetName) {
|
|
564
824
|
for (const componentDefinition of componentDefinitions) {
|
|
565
825
|
const typedDefinition = componentDefinition;
|
|
@@ -579,4 +839,4 @@ var Services;
|
|
|
579
839
|
}
|
|
580
840
|
Services.Forms = Forms;
|
|
581
841
|
})(Services || (exports.Services = Services = {}));
|
|
582
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0Zvcm1zU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU5RCwrQkFBc0Q7QUFDdEQsOENBQWlGO0FBQ2pGLGdEQUFzRDtBQUd0RCx5Q0FBeUM7QUFDekMsMkNBQTZCO0FBQzdCLDBFQUErRTtBQUsvRSw4REFBb0U7QUFDcEUsb0VBQTBFO0FBQzFFLG9GQUF5RjtBQThCekYsSUFBaUIsUUFBUSxDQXVsQnhCO0FBdmxCRCxXQUFpQixRQUFRO0lBQ3ZCOzs7OztPQUtHO0lBQ0gsTUFBYSxLQUFNLFNBQVEsc0JBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTztRQUM3QixzQ0FBc0MsR0FBRyxzQ0FBc0MsQ0FBQztRQUU5RSxnQkFBZ0IsR0FBYTtZQUM5QyxXQUFXO1lBQ1gsU0FBUztZQUNULGVBQWU7WUFDZixlQUFlO1lBQ2YsMkJBQTJCO1lBQzNCLFdBQVc7WUFDWCx5QkFBeUI7WUFDekIsd0JBQXdCO1lBQ3hCLCtCQUErQjtZQUMvQix1QkFBdUI7U0FDeEIsQ0FBQztRQUVLLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBOEIsRUFBRSxVQUFrQjtZQUN2RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx5Q0FBeUMsWUFBWSxDQUFDLEVBQUUsc0JBQXNCLFlBQVksQ0FBQyxNQUFN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
|
|
842
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0Zvcm1zU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU5RCwrQkFBc0Q7QUFDdEQsOENBQWlGO0FBQ2pGLGdEQUFzRDtBQUl0RCx5Q0FBeUM7QUFDekMsMkNBQTZCO0FBQzdCLDBFQUErRTtBQUMvRSxzRUFVMEM7QUFDMUMsOERBQW9FO0FBQ3BFLG9FQUEwRTtBQUMxRSxvRkFBeUY7QUFDekYsc0dBQXlHO0FBSXpHLDRFQUc4QztBQXFGOUMsSUFBaUIsUUFBUSxDQW02QnhCO0FBbjZCRCxXQUFpQixRQUFRO0lBQ3ZCOzs7OztPQUtHO0lBQ0gsTUFBYSxLQUFNLFNBQVEsc0JBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTztRQUM3QixzQ0FBc0MsR0FBRyxzQ0FBc0MsQ0FBQztRQUU5RSxnQkFBZ0IsR0FBYTtZQUM5QyxXQUFXO1lBQ1gsU0FBUztZQUNULGVBQWU7WUFDZixlQUFlO1lBQ2YsMkJBQTJCO1lBQzNCLFdBQVc7WUFDWCx5QkFBeUI7WUFDekIsd0JBQXdCO1lBQ3hCLCtCQUErQjtZQUMvQix1QkFBdUI7WUFDdkIseUJBQXlCO1lBQ3pCLG1DQUFtQztZQUNuQyw4QkFBOEI7WUFDOUIsY0FBYztTQUNmLENBQUM7UUFFSyxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQThCLEVB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
|