@researchdatabox/redbox-core 0.0.0-bootstrap.0 → 0.0.1-beta.10213
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/CoreController.d.ts +4 -0
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +68 -23
- package/dist/CoreService.d.ts +1 -1
- package/dist/CoreService.d.ts.map +1 -1
- package/dist/CoreService.js +1 -1
- package/dist/DatastreamService.d.ts +5 -2
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/HarvestRunService.d.ts +49 -0
- package/dist/HarvestRunService.d.ts.map +1 -0
- package/dist/HarvestRunService.js +13 -0
- package/dist/IntegrationAuditParams.d.ts +11 -0
- package/dist/IntegrationAuditParams.js +14 -0
- package/dist/QueueService.d.ts +1 -1
- package/dist/QueueService.d.ts.map +1 -1
- package/dist/RecordAuditParams.d.ts +2 -0
- package/dist/RecordAuditParams.d.ts.map +1 -1
- package/dist/RecordAuditParams.js +3 -1
- package/dist/RecordsService.d.ts +52 -2
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +6 -2
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/api-routes/apib.d.ts +7 -0
- package/dist/api-routes/apib.d.ts.map +1 -0
- package/dist/api-routes/apib.js +43 -0
- package/dist/api-routes/define.d.ts +4 -0
- package/dist/api-routes/define.d.ts.map +1 -0
- package/dist/api-routes/define.js +29 -0
- package/dist/api-routes/groups/admin.d.ts +6 -0
- package/dist/api-routes/groups/admin.d.ts.map +1 -0
- package/dist/api-routes/groups/admin.js +53 -0
- package/dist/api-routes/groups/appconfig.d.ts +4 -0
- package/dist/api-routes/groups/appconfig.d.ts.map +1 -0
- package/dist/api-routes/groups/appconfig.js +33 -0
- package/dist/api-routes/groups/branding.d.ts +8 -0
- package/dist/api-routes/groups/branding.d.ts.map +1 -0
- package/dist/api-routes/groups/branding.js +61 -0
- package/dist/api-routes/groups/dashboard-config.d.ts +11 -0
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -0
- package/dist/api-routes/groups/dashboard-config.js +90 -0
- package/dist/api-routes/groups/export.d.ts +3 -0
- package/dist/api-routes/groups/export.d.ts.map +1 -0
- package/dist/api-routes/groups/export.js +30 -0
- package/dist/api-routes/groups/forms.d.ts +4 -0
- package/dist/api-routes/groups/forms.d.ts.map +1 -0
- package/dist/api-routes/groups/forms.js +29 -0
- package/dist/api-routes/groups/harvest-runs.d.ts +5 -0
- package/dist/api-routes/groups/harvest-runs.d.ts.map +1 -0
- package/dist/api-routes/groups/harvest-runs.js +79 -0
- package/dist/api-routes/groups/integration-audit.d.ts +3 -0
- package/dist/api-routes/groups/integration-audit.d.ts.map +1 -0
- package/dist/api-routes/groups/integration-audit.js +35 -0
- package/dist/api-routes/groups/named-query.d.ts +8 -0
- package/dist/api-routes/groups/named-query.d.ts.map +1 -0
- package/dist/api-routes/groups/named-query.js +54 -0
- package/dist/api-routes/groups/notifications.d.ts +3 -0
- package/dist/api-routes/groups/notifications.d.ts.map +1 -0
- package/dist/api-routes/groups/notifications.js +20 -0
- package/dist/api-routes/groups/records.d.ts +28 -0
- package/dist/api-routes/groups/records.d.ts.map +1 -0
- package/dist/api-routes/groups/records.js +353 -0
- package/dist/api-routes/groups/recordtypes.d.ts +4 -0
- package/dist/api-routes/groups/recordtypes.d.ts.map +1 -0
- package/dist/api-routes/groups/recordtypes.js +27 -0
- package/dist/api-routes/groups/reports.d.ts +9 -0
- package/dist/api-routes/groups/reports.d.ts.map +1 -0
- package/dist/api-routes/groups/reports.js +63 -0
- package/dist/api-routes/groups/search-query.d.ts +4 -0
- package/dist/api-routes/groups/search-query.d.ts.map +1 -0
- package/dist/api-routes/groups/search-query.js +51 -0
- package/dist/api-routes/groups/search.d.ts +6 -0
- package/dist/api-routes/groups/search.d.ts.map +1 -0
- package/dist/api-routes/groups/search.js +31 -0
- package/dist/api-routes/groups/translation.d.ts +8 -0
- package/dist/api-routes/groups/translation.d.ts.map +1 -0
- package/dist/api-routes/groups/translation.js +82 -0
- package/dist/api-routes/groups/users.d.ts +17 -0
- package/dist/api-routes/groups/users.d.ts.map +1 -0
- package/dist/api-routes/groups/users.js +149 -0
- package/dist/api-routes/groups/vocabulary.d.ts +10 -0
- package/dist/api-routes/groups/vocabulary.d.ts.map +1 -0
- package/dist/api-routes/groups/vocabulary.js +97 -0
- package/dist/api-routes/helpers.d.ts +29 -0
- package/dist/api-routes/helpers.d.ts.map +1 -0
- package/dist/api-routes/helpers.js +485 -0
- package/dist/api-routes/index.d.ts +27 -0
- package/dist/api-routes/index.d.ts.map +1 -0
- package/dist/api-routes/index.js +43 -0
- package/dist/api-routes/openapi.d.ts +26 -0
- package/dist/api-routes/openapi.d.ts.map +1 -0
- package/dist/api-routes/openapi.js +292 -0
- package/dist/api-routes/request-extraction.d.ts +14 -0
- package/dist/api-routes/request-extraction.d.ts.map +1 -0
- package/dist/api-routes/request-extraction.js +100 -0
- package/dist/api-routes/route-factory.d.ts +3 -0
- package/dist/api-routes/route-factory.d.ts.map +1 -0
- package/dist/api-routes/route-factory.js +30 -0
- package/dist/api-routes/route-registry.d.ts +24 -0
- package/dist/api-routes/route-registry.d.ts.map +1 -0
- package/dist/api-routes/route-registry.js +117 -0
- package/dist/api-routes/route-resolution.d.ts +4 -0
- package/dist/api-routes/route-resolution.d.ts.map +1 -0
- package/dist/api-routes/route-resolution.js +71 -0
- package/dist/api-routes/schemas/common.d.ts +35 -0
- package/dist/api-routes/schemas/common.d.ts.map +1 -0
- package/dist/api-routes/schemas/common.js +146 -0
- package/dist/api-routes/schemas/responses.d.ts +972 -0
- package/dist/api-routes/schemas/responses.d.ts.map +1 -0
- package/dist/api-routes/schemas/responses.js +512 -0
- package/dist/api-routes/types.d.ts +70 -0
- package/dist/api-routes/types.d.ts.map +1 -0
- package/dist/api-routes/types.js +3 -0
- package/dist/api-routes/validation.d.ts +32 -0
- package/dist/api-routes/validation.d.ts.map +1 -0
- package/dist/api-routes/validation.js +142 -0
- package/dist/api-routes/zod-openapi.d.ts +3 -0
- package/dist/api-routes/zod-openapi.d.ts.map +1 -0
- package/dist/api-routes/zod-openapi.js +8 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +12 -12
- package/dist/config/agendaQueue.config.d.ts +33 -6
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +40 -18
- package/dist/config/auth.config.d.ts.map +1 -1
- package/dist/config/auth.config.js +29 -2
- package/dist/config/branding.config.d.ts +2 -1
- package/dist/config/branding.config.d.ts.map +1 -1
- package/dist/config/branding.config.js +5 -95
- package/dist/config/brandingConfigurationDefaults.config.d.ts +3 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +161 -5
- package/dist/config/custom.config.d.ts +6 -0
- package/dist/config/custom.config.d.ts.map +1 -1
- package/dist/config/custom.config.js +10 -1
- package/dist/config/dashboardtype.config.d.ts +5 -0
- package/dist/config/dashboardtype.config.d.ts.map +1 -1
- package/dist/config/dashboardtype.config.js +1 -1
- package/dist/config/dashboardview.config.d.ts +24 -0
- package/dist/config/dashboardview.config.d.ts.map +1 -0
- package/dist/config/dashboardview.config.js +137 -0
- package/dist/config/dompurify.config.d.ts +1 -0
- package/dist/config/dompurify.config.d.ts.map +1 -1
- package/dist/config/dompurify.config.js +5 -4
- package/dist/config/emailnotification.config.d.ts.map +1 -1
- package/dist/config/emailnotification.config.js +2 -1
- package/dist/config/figshareDev.config.d.ts +12 -0
- package/dist/config/figshareDev.config.js +9 -0
- package/dist/config/form.config.d.ts +4 -0
- package/dist/config/form.config.d.ts.map +1 -1
- package/dist/config/form.config.js +1 -1
- package/dist/config/harvestRuns.config.d.ts +9 -0
- package/dist/config/harvestRuns.config.d.ts.map +1 -0
- package/dist/config/harvestRuns.config.js +11 -0
- package/dist/config/http.config.d.ts +13 -1
- package/dist/config/http.config.d.ts.map +1 -1
- package/dist/config/http.config.js +201 -38
- package/dist/config/index.d.ts +14 -19
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +10 -15
- package/dist/config/namedQuery.config.d.ts +26 -4
- package/dist/config/namedQuery.config.d.ts.map +1 -1
- package/dist/config/namedQuery.config.js +7 -350
- package/dist/config/policies.config.d.ts +3 -0
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +35 -1
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +2 -1
- package/dist/config/recordtype.config.d.ts +28 -0
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +105 -13
- package/dist/config/redboxSession.config.d.ts +3 -0
- package/dist/config/redboxSession.config.d.ts.map +1 -1
- package/dist/config/redboxSession.config.js +1 -1
- package/dist/config/report.config.d.ts +2 -11
- package/dist/config/report.config.d.ts.map +1 -1
- package/dist/config/report.config.js +3 -49
- package/dist/config/reusableContributorFormDefinitions.config.d.ts +1 -1
- package/dist/config/reusableContributorFormDefinitions.config.d.ts.map +1 -1
- package/dist/config/reusableContributorFormDefinitions.config.js +371 -206
- package/dist/config/reusableViewFormDefinitions.config.js +3 -3
- package/dist/config/routes.config.d.ts +5 -2
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +55 -117
- package/dist/config/storage.config.d.ts +20 -2
- package/dist/config/storage.config.d.ts.map +1 -1
- package/dist/config/storage.config.js +2 -1
- package/dist/config/validators.config.d.ts +6 -4
- package/dist/config/validators.config.d.ts.map +1 -1
- package/dist/config/validators.config.js +5 -3
- package/dist/config/vocab.config.d.ts +30 -0
- package/dist/config/vocab.config.d.ts.map +1 -1
- package/dist/config/vocab.config.js +21 -1
- package/dist/config/webpack.config.d.ts.map +1 -1
- package/dist/config/webpack.config.js +18 -12
- package/dist/config/workflow.config.d.ts +0 -1
- package/dist/config/workflow.config.d.ts.map +1 -1
- package/dist/config/workflow.config.js +1 -137
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +4 -3
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts +48 -0
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts.map +1 -1
- package/dist/configmodels/AuthorizedDomainsEmails.js +50 -2
- package/dist/configmodels/ConfigModels.d.ts +7 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +41 -1
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts +1011 -0
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts.map +1 -0
- package/dist/configmodels/DashboardTableOverrideConfig.js +138 -0
- package/dist/configmodels/DoiPublishing.d.ts +4711 -0
- package/dist/configmodels/DoiPublishing.js +639 -0
- package/dist/configmodels/FigsharePublishing.d.ts +1376 -0
- package/dist/configmodels/FigsharePublishing.js +630 -0
- package/dist/configmodels/IntegrationNotificationConfig.d.ts +133 -0
- package/dist/configmodels/IntegrationNotificationConfig.d.ts.map +1 -0
- package/dist/configmodels/IntegrationNotificationConfig.js +64 -0
- package/dist/configmodels/SystemMessage.d.ts +32 -0
- package/dist/configmodels/SystemMessage.d.ts.map +1 -1
- package/dist/configmodels/SystemMessage.js +34 -2
- package/dist/controllers/AdminController.d.ts +1 -1
- package/dist/controllers/AdminController.d.ts.map +1 -1
- package/dist/controllers/AdminController.js +6 -32
- package/dist/controllers/AppConfigController.js +3 -3
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +11 -10
- package/dist/controllers/BrandingController.d.ts +11 -5
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +116 -48
- package/dist/controllers/DashboardConfigController.d.ts +8 -0
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/DashboardConfigController.js +17 -0
- package/dist/controllers/DynamicAssetController.d.ts +1 -21
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +19 -41
- package/dist/controllers/EmailController.d.ts.map +1 -1
- package/dist/controllers/EmailController.js +16 -12
- package/dist/controllers/ExportController.d.ts.map +1 -1
- package/dist/controllers/ExportController.js +3 -8
- package/dist/controllers/FormVocabularyController.d.ts +3 -0
- package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
- package/dist/controllers/FormVocabularyController.js +154 -4
- package/dist/controllers/NamedQueryController.d.ts +8 -0
- package/dist/controllers/NamedQueryController.d.ts.map +1 -0
- package/dist/controllers/NamedQueryController.js +17 -0
- package/dist/controllers/RecordAuditController.d.ts +31 -14
- package/dist/controllers/RecordAuditController.d.ts.map +1 -1
- package/dist/controllers/RecordAuditController.js +509 -57
- package/dist/controllers/RecordController.d.ts +18 -16
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +314 -167
- package/dist/controllers/RenderViewController.d.ts.map +1 -1
- package/dist/controllers/RenderViewController.js +4 -2
- package/dist/controllers/ReportController.d.ts +7 -0
- package/dist/controllers/ReportController.d.ts.map +1 -1
- package/dist/controllers/ReportController.js +75 -2
- package/dist/controllers/ReportsController.d.ts +1 -0
- package/dist/controllers/ReportsController.d.ts.map +1 -1
- package/dist/controllers/ReportsController.js +12 -2
- package/dist/controllers/TranslationController.d.ts.map +1 -1
- package/dist/controllers/TranslationController.js +14 -12
- package/dist/controllers/WorkspaceTypesController.d.ts +3 -2
- package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -1
- package/dist/controllers/WorkspaceTypesController.js +120 -31
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +19 -4
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +16 -17
- package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/AppConfigController.js +17 -18
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +102 -48
- package/dist/controllers/webservice/DashboardConfigController.d.ts +26 -0
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/webservice/DashboardConfigController.js +241 -0
- package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ExportController.js +13 -18
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +11 -13
- package/dist/controllers/webservice/HarvestRunController.d.ts +13 -0
- package/dist/controllers/webservice/HarvestRunController.d.ts.map +1 -0
- package/dist/controllers/webservice/HarvestRunController.js +148 -0
- package/dist/controllers/webservice/IntegrationAuditController.d.ts +10 -0
- package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -1
- package/dist/controllers/webservice/IntegrationAuditController.js +98 -0
- package/dist/controllers/webservice/NamedQueryController.d.ts +17 -0
- package/dist/controllers/webservice/NamedQueryController.d.ts.map +1 -0
- package/dist/controllers/webservice/NamedQueryController.js +127 -0
- package/dist/controllers/webservice/RecordController.d.ts +4 -0
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +441 -314
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +9 -10
- package/dist/controllers/webservice/ReportController.d.ts +7 -0
- package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ReportController.js +125 -19
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +28 -35
- package/dist/controllers/webservice/TranslationController.d.ts.map +1 -1
- package/dist/controllers/webservice/TranslationController.js +65 -43
- package/dist/controllers/webservice/UserManagementController.d.ts +1 -1
- package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/UserManagementController.js +114 -101
- package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -1
- package/dist/controllers/webservice/VocabularyController.js +76 -28
- package/dist/form-config/dataRecord-1.0-draft.js +3 -3
- package/dist/form-config/default-1.0-draft.d.ts.map +1 -1
- package/dist/form-config/default-1.0-draft.js +27 -3
- package/dist/form-config/index.d.ts.map +1 -1
- package/dist/form-config/index.js +1 -1
- 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/hooks/webpack.d.ts.map +1 -1
- package/dist/hooks/webpack.js +17 -7
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/loader/MigrationRunner.d.ts +19 -0
- package/dist/loader/MigrationRunner.d.ts.map +1 -0
- package/dist/loader/MigrationRunner.js +108 -0
- package/dist/loader/bootstrapShimRuntime.d.ts +2 -1
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
- package/dist/loader/bootstrapShimRuntime.js +7 -2
- package/dist/loader/index.d.ts +17 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +216 -13
- package/dist/middleware/redboxSession.d.ts +5 -0
- package/dist/middleware/redboxSession.d.ts.map +1 -1
- package/dist/middleware/redboxSession.js +19 -6
- package/dist/model/BuildResponse.d.ts +4 -0
- package/dist/model/BuildResponse.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.d.ts +13 -1
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +12 -4
- package/dist/model/DashboardViewResponseModel.d.ts +20 -0
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -0
- package/dist/model/DashboardViewResponseModel.js +38 -0
- package/dist/model/RecordTypeResponseModel.d.ts +3 -1
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +4 -2
- package/dist/model/RequestDetails.d.ts +1 -1
- package/dist/model/RequestDetails.d.ts.map +1 -1
- package/dist/model/RequestDetails.js +1 -1
- package/dist/model/config/ReportConfig.d.ts +1 -1
- package/dist/model/config/ReportConfig.d.ts.map +1 -1
- package/dist/model/config/ReportConfig.js +2 -2
- package/dist/model/index.d.ts +1 -0
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +5 -2
- package/dist/model/storage/BrandingModel.d.ts +0 -16
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +2 -51
- package/dist/model/storage/DashboardTypeModel.d.ts +4 -0
- package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -1
- package/dist/model/storage/HarvestRunModel.d.ts +140 -0
- package/dist/model/storage/HarvestRunModel.d.ts.map +1 -0
- package/dist/model/storage/HarvestRunModel.js +110 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts +49 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
- package/dist/model/storage/IntegrationAuditModel.js +106 -0
- package/dist/model/storage/RecordTypeModel.d.ts +16 -0
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +9 -1
- package/dist/model/storage/ReportModel.d.ts +1 -0
- package/dist/model/storage/ReportModel.d.ts.map +1 -1
- package/dist/model/storage/index.d.ts +2 -0
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +15 -2
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +23 -2
- package/dist/policies/i18nLanguages.d.ts.map +1 -1
- package/dist/policies/i18nLanguages.js +1 -1
- package/dist/policies/index.d.ts +3 -0
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +6 -2
- package/dist/policies/menuResolver.d.ts.map +1 -1
- package/dist/policies/menuResolver.js +1 -1
- package/dist/policies/setLang.d.ts.map +1 -1
- package/dist/policies/setLang.js +1 -1
- package/dist/policies/validateApiContractRequest.d.ts +3 -0
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -0
- package/dist/policies/validateApiContractRequest.js +74 -0
- package/dist/responses/badRequest.d.ts.map +1 -1
- package/dist/responses/badRequest.js +7 -4
- package/dist/responses/created.d.ts.map +1 -1
- package/dist/responses/created.js +7 -4
- package/dist/responses/forbidden.d.ts.map +1 -1
- package/dist/responses/forbidden.js +7 -4
- package/dist/responses/ok.d.ts.map +1 -1
- package/dist/responses/ok.js +7 -4
- package/dist/responses/serverError.d.ts.map +1 -1
- package/dist/responses/serverError.js +7 -4
- package/dist/responses/siteTitle.d.ts +6 -0
- package/dist/responses/siteTitle.d.ts.map +1 -0
- package/dist/responses/siteTitle.js +28 -0
- package/dist/sails.d.ts +9 -0
- package/dist/sails.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.d.ts +39 -17
- package/dist/services/AgendaQueueService.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.js +328 -87
- package/dist/services/AppConfigService.d.ts +20 -2
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +129 -15
- package/dist/services/AttachmentMetadataService.d.ts +34 -0
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -0
- package/dist/services/AttachmentMetadataService.js +133 -0
- package/dist/services/BrandingLogoService.d.ts +11 -8
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +71 -72
- package/dist/services/BrandingService.d.ts.map +1 -1
- package/dist/services/BrandingService.js +4 -32
- package/dist/services/BrandingThemeCssService.d.ts +21 -0
- package/dist/services/BrandingThemeCssService.d.ts.map +1 -0
- package/dist/services/BrandingThemeCssService.js +113 -0
- package/dist/services/BrandingThemeTokens.d.ts +16 -0
- package/dist/services/BrandingThemeTokens.d.ts.map +1 -0
- package/dist/services/BrandingThemeTokens.js +82 -0
- package/dist/services/CacheService.d.ts.map +1 -1
- package/dist/services/CacheService.js +37 -29
- package/dist/services/DashboardConfigService.d.ts +71 -0
- package/dist/services/DashboardConfigService.d.ts.map +1 -0
- package/dist/services/DashboardConfigService.js +315 -0
- package/dist/services/DashboardTypesService.d.ts +61 -63
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +361 -198
- package/dist/services/DoiService.d.ts +30 -25
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +448 -393
- package/dist/services/EmailService.d.ts +17 -3
- package/dist/services/EmailService.d.ts.map +1 -1
- package/dist/services/EmailService.js +44 -17
- package/dist/services/FigshareService.d.ts +40 -65
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +616 -2038
- package/dist/services/FormPayloadPrehydrateService.d.ts +35 -0
- package/dist/services/FormPayloadPrehydrateService.d.ts.map +1 -0
- package/dist/services/FormPayloadPrehydrateService.js +200 -0
- package/dist/services/FormRecordConsistencyService.d.ts +3 -3
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
- package/dist/services/FormRecordConsistencyService.js +21 -19
- package/dist/services/FormVocabularyService.d.ts +45 -0
- package/dist/services/FormVocabularyService.d.ts.map +1 -0
- package/dist/services/FormVocabularyService.js +326 -0
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +8 -6
- package/dist/services/HarvestRunService.d.ts +73 -0
- package/dist/services/HarvestRunService.d.ts.map +1 -0
- package/dist/services/HarvestRunService.js +1317 -0
- package/dist/services/I18nEntriesService.d.ts +9 -4
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +96 -18
- package/dist/services/IntegrationAuditService.d.ts +158 -0
- package/dist/services/IntegrationAuditService.d.ts.map +1 -1
- package/dist/services/IntegrationAuditService.js +838 -0
- package/dist/services/IntegrationNotificationService.d.ts +55 -0
- package/dist/services/IntegrationNotificationService.d.ts.map +1 -0
- package/dist/services/IntegrationNotificationService.js +271 -0
- package/dist/services/NamedQueryService.d.ts +51 -12
- package/dist/services/NamedQueryService.d.ts.map +1 -1
- package/dist/services/NamedQueryService.js +622 -125
- package/dist/services/OniService.d.ts.map +1 -1
- package/dist/services/OniService.js +4 -6
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +3 -2
- package/dist/services/RecordsService.d.ts +25 -3
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +119 -19
- package/dist/services/ReportsService.d.ts +57 -1
- package/dist/services/ReportsService.d.ts.map +1 -1
- package/dist/services/ReportsService.js +258 -34
- package/dist/services/SassCompilerService.d.ts +4 -10
- package/dist/services/SassCompilerService.d.ts.map +1 -1
- package/dist/services/SassCompilerService.js +9 -173
- package/dist/services/SolrSearchService.d.ts +1 -0
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +14 -3
- package/dist/services/StandardDatastreamService.d.ts +37 -5
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +535 -38
- package/dist/services/StorageManagerService.d.ts +13 -1
- package/dist/services/StorageManagerService.d.ts.map +1 -1
- package/dist/services/StorageManagerService.js +94 -11
- package/dist/services/TemplateService.d.ts +2 -18
- package/dist/services/TemplateService.d.ts.map +1 -1
- package/dist/services/TemplateService.js +9 -53
- package/dist/services/VocabularyService.d.ts +13 -0
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +204 -14
- package/dist/services/doi-v2/audit.d.ts +7 -0
- package/dist/services/doi-v2/audit.d.ts.map +1 -1
- package/dist/services/doi-v2/audit.js +30 -0
- package/dist/services/doi-v2/bindings.d.ts +8 -0
- package/dist/services/doi-v2/bindings.d.ts.map +1 -1
- package/dist/services/doi-v2/bindings.js +79 -0
- package/dist/services/doi-v2/config.d.ts +7 -0
- package/dist/services/doi-v2/config.js +51 -0
- package/dist/services/doi-v2/context.d.ts +18 -0
- package/dist/services/doi-v2/context.js +41 -0
- package/dist/services/doi-v2/http.d.ts +21 -0
- package/dist/services/doi-v2/http.js +88 -0
- package/dist/services/doi-v2/payload.d.ts +4 -0
- package/dist/services/doi-v2/payload.d.ts.map +1 -1
- package/dist/services/doi-v2/payload.js +305 -0
- package/dist/services/doi-v2/profiles.d.ts +5 -0
- package/dist/services/doi-v2/profiles.js +31 -0
- package/dist/services/doi-v2/runtime.d.ts +16 -0
- package/dist/services/doi-v2/runtime.js +173 -0
- package/dist/services/doi-v2/types.d.ts +49 -0
- package/dist/services/doi-v2/types.js +3 -0
- package/dist/services/figshare-v2/assets.d.ts +5 -0
- package/dist/services/figshare-v2/assets.js +297 -0
- package/dist/services/figshare-v2/audit.d.ts +7 -0
- package/dist/services/figshare-v2/audit.d.ts.map +1 -0
- package/dist/services/figshare-v2/audit.js +30 -0
- package/dist/services/figshare-v2/bindings.d.ts +6 -0
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
- package/dist/services/figshare-v2/bindings.js +58 -0
- package/dist/services/figshare-v2/config.d.ts +13 -0
- package/dist/services/figshare-v2/config.d.ts.map +1 -1
- package/dist/services/figshare-v2/config.js +105 -0
- package/dist/services/figshare-v2/context.d.ts +4 -0
- package/dist/services/figshare-v2/context.d.ts.map +1 -1
- package/dist/services/figshare-v2/context.js +21 -0
- package/dist/services/figshare-v2/embargo.d.ts +5 -0
- package/dist/services/figshare-v2/embargo.js +36 -0
- package/dist/services/figshare-v2/http.d.ts +42 -0
- package/dist/services/figshare-v2/http.d.ts.map +1 -1
- package/dist/services/figshare-v2/http.js +324 -0
- package/dist/services/figshare-v2/metadata.d.ts +6 -0
- package/dist/services/figshare-v2/metadata.d.ts.map +1 -1
- package/dist/services/figshare-v2/metadata.js +280 -0
- package/dist/services/figshare-v2/observability.d.ts +7 -0
- package/dist/services/figshare-v2/observability.d.ts.map +1 -1
- package/dist/services/figshare-v2/observability.js +87 -0
- package/dist/services/figshare-v2/plan.d.ts +5 -0
- package/dist/services/figshare-v2/plan.js +51 -0
- package/dist/services/figshare-v2/publish.d.ts +5 -0
- package/dist/services/figshare-v2/publish.js +20 -0
- package/dist/services/figshare-v2/queue.d.ts +4 -0
- package/dist/services/figshare-v2/queue.js +11 -0
- package/dist/services/figshare-v2/runtime.d.ts +14 -0
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
- package/dist/services/figshare-v2/runtime.js +88 -0
- package/dist/services/figshare-v2/types.d.ts +198 -0
- package/dist/services/figshare-v2/types.d.ts.map +1 -1
- package/dist/services/figshare-v2/types.js +59 -0
- package/dist/services/figshare-v2/workflow.d.ts +3 -0
- package/dist/services/figshare-v2/workflow.js +7 -0
- package/dist/services/figshare-v2/writeback.d.ts +5 -0
- package/dist/services/figshare-v2/writeback.js +45 -0
- package/dist/services/index.d.ts +24 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +43 -7
- package/dist/shims/momentShim.d.ts.map +1 -1
- package/dist/shims/momentShim.js +1 -6
- package/dist/storage/GridFSDriver.d.ts +101 -0
- package/dist/storage/GridFSDriver.d.ts.map +1 -0
- package/dist/storage/GridFSDriver.js +291 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts +49 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -0
- package/dist/storage/TusStorageManagerDataStore.js +300 -0
- package/dist/transformers/ExportJSONTransformer.d.ts +1 -1
- package/dist/transformers/ExportJSONTransformer.d.ts.map +1 -1
- package/dist/transformers/ExportJSONTransformer.js +3 -3
- package/dist/utilities/RequestParamUtils.d.ts +3 -0
- package/dist/utilities/RequestParamUtils.d.ts.map +1 -0
- package/dist/utilities/RequestParamUtils.js +13 -0
- package/dist/visitor/attachment-fields.visitor.d.ts +17 -17
- package/dist/visitor/attachment-fields.visitor.d.ts.map +1 -1
- package/dist/visitor/attachment-fields.visitor.js +44 -34
- package/dist/visitor/client.visitor.d.ts +145 -97
- package/dist/visitor/client.visitor.d.ts.map +1 -1
- package/dist/visitor/client.visitor.js +366 -273
- package/dist/visitor/construct.visitor.d.ts +99 -93
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +304 -227
- package/dist/visitor/context-variables.visitor.d.ts +35 -35
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
- package/dist/visitor/context-variables.visitor.js +85 -75
- package/dist/visitor/data-value.visitor.d.ts +99 -93
- package/dist/visitor/data-value.visitor.d.ts.map +1 -1
- package/dist/visitor/data-value.visitor.js +157 -148
- package/dist/visitor/json-type-def.visitor.d.ts +96 -90
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
- package/dist/visitor/json-type-def.visitor.js +158 -149
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +101 -94
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +356 -295
- package/dist/visitor/template.visitor.d.ts +100 -92
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +245 -156
- package/dist/visitor/validator.visitor.d.ts +95 -91
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +184 -152
- package/dist/visitor/visitor-helpers.js +9 -9
- package/dist/visitor/vocab-inline.visitor.d.ts +34 -19
- package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -1
- package/dist/visitor/vocab-inline.visitor.js +157 -48
- package/dist/waterline-models/AttachmentAccessAudit.d.ts +26 -0
- package/dist/waterline-models/AttachmentAccessAudit.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentAccessAudit.js +63 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts +40 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentMetadata.js +147 -0
- package/dist/waterline-models/BrandingConfig.d.ts +0 -2
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +5 -9
- package/dist/waterline-models/DashboardType.d.ts +7 -0
- package/dist/waterline-models/DashboardType.d.ts.map +1 -1
- package/dist/waterline-models/DashboardType.js +16 -1
- package/dist/waterline-models/HarvestRecordEvent.d.ts +43 -0
- package/dist/waterline-models/HarvestRecordEvent.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRecordEvent.js +107 -0
- package/dist/waterline-models/HarvestRun.d.ts +51 -0
- package/dist/waterline-models/HarvestRun.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRun.js +125 -0
- package/dist/waterline-models/HarvestRunChunk.d.ts +57 -0
- package/dist/waterline-models/HarvestRunChunk.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRunChunk.js +140 -0
- package/dist/waterline-models/I18nTranslation.d.ts +2 -0
- package/dist/waterline-models/I18nTranslation.d.ts.map +1 -1
- package/dist/waterline-models/I18nTranslation.js +6 -1
- package/dist/waterline-models/Migration.d.ts +24 -0
- package/dist/waterline-models/Migration.d.ts.map +1 -0
- package/dist/waterline-models/Migration.js +52 -0
- package/dist/waterline-models/NamedQuery.d.ts +6 -0
- package/dist/waterline-models/NamedQuery.d.ts.map +1 -1
- package/dist/waterline-models/NamedQuery.js +16 -1
- package/dist/waterline-models/index.d.ts +12 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +19 -1
- package/package.json +78 -52
- package/redbox-loader-templates/bootstrap-shim.js.hbs +14 -1
- package/dist/config/datacite.config.d.ts +0 -51
- package/dist/config/datacite.config.d.ts.map +0 -1
- package/dist/config/datacite.config.js +0 -44
- package/dist/config/figshareAPI.config.d.ts +0 -116
- package/dist/config/figshareAPI.config.d.ts.map +0 -1
- package/dist/config/figshareAPI.config.js +0 -857
- package/dist/config/figshareAPIEnv.config.d.ts +0 -11
- package/dist/config/figshareAPIEnv.config.d.ts.map +0 -1
- package/dist/config/figshareAPIEnv.config.js +0 -13
- package/dist/config/figshareRedboxFORMapping.config.d.ts +0 -15
- package/dist/config/figshareRedboxFORMapping.config.d.ts.map +0 -1
- package/dist/config/figshareRedboxFORMapping.config.js +0 -7458
- package/dist/config/relatedObjectsFormDefinition.config.d.ts.map +0 -1
- package/dist/controllers/VocabController.d.ts +0 -43
- package/dist/controllers/VocabController.d.ts.map +0 -1
- package/dist/controllers/VocabController.js +0 -190
- package/dist/form-config/dataPublication-1.0-draft.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-embargoed.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-published.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-queued.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-retired.d.ts.map +0 -1
- package/dist/services/VocabService.d.ts +0 -81
- package/dist/services/VocabService.d.ts.map +0 -1
- package/dist/services/VocabService.js +0 -424
|
@@ -7,12 +7,15 @@ const sails_ng_common_2 = require("@researchdatabox/sails-ng-common");
|
|
|
7
7
|
const sails_ng_common_3 = require("@researchdatabox/sails-ng-common");
|
|
8
8
|
const sails_ng_common_4 = require("@researchdatabox/sails-ng-common");
|
|
9
9
|
const sails_ng_common_5 = require("@researchdatabox/sails-ng-common");
|
|
10
|
-
const json_type_def_visitor_1 = require("./json-type-def.visitor");
|
|
11
10
|
const sails_ng_common_6 = require("@researchdatabox/sails-ng-common");
|
|
12
11
|
const sails_ng_common_7 = require("@researchdatabox/sails-ng-common");
|
|
13
12
|
const sails_ng_common_8 = require("@researchdatabox/sails-ng-common");
|
|
13
|
+
const json_type_def_visitor_1 = require("./json-type-def.visitor");
|
|
14
14
|
const sails_ng_common_9 = require("@researchdatabox/sails-ng-common");
|
|
15
15
|
const sails_ng_common_10 = require("@researchdatabox/sails-ng-common");
|
|
16
|
+
const sails_ng_common_11 = require("@researchdatabox/sails-ng-common");
|
|
17
|
+
const sails_ng_common_12 = require("@researchdatabox/sails-ng-common");
|
|
18
|
+
const sails_ng_common_13 = require("@researchdatabox/sails-ng-common");
|
|
16
19
|
/**
|
|
17
20
|
* Visit each form config class type and build the form config for the client-side.
|
|
18
21
|
*
|
|
@@ -30,7 +33,7 @@ const sails_ng_common_10 = require("@researchdatabox/sails-ng-common");
|
|
|
30
33
|
* - use the various 'viewCssClasses' and 'editCssClasses' to set the css classes depending on the form mode, then remove these properties
|
|
31
34
|
* - use the various 'wrapperCssClasses' and 'hostCssClasses' to set the css classes in the relevant config, then remove these properties??
|
|
32
35
|
*/
|
|
33
|
-
class ClientFormConfigVisitor extends
|
|
36
|
+
class ClientFormConfigVisitor extends sails_ng_common_6.FormConfigVisitor {
|
|
34
37
|
logName = 'ClientFormConfigVisitor';
|
|
35
38
|
clientFormConfig;
|
|
36
39
|
formMode;
|
|
@@ -42,14 +45,14 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
42
45
|
formOverride;
|
|
43
46
|
constructor(logger) {
|
|
44
47
|
super(logger);
|
|
45
|
-
this.clientFormConfig = new
|
|
48
|
+
this.clientFormConfig = new sails_ng_common_5.FormConfig();
|
|
46
49
|
this.formMode = 'view';
|
|
47
50
|
this.formModeProvided = false;
|
|
48
51
|
this.userRoles = [];
|
|
49
52
|
this.reusableFormDefs = {};
|
|
50
53
|
this.constraintPath = [];
|
|
51
|
-
this.formPathHelper = new
|
|
52
|
-
this.formOverride = new
|
|
54
|
+
this.formPathHelper = new sails_ng_common_7.FormPathHelper(logger, this);
|
|
55
|
+
this.formOverride = new sails_ng_common_10.FormOverride(logger);
|
|
53
56
|
}
|
|
54
57
|
/**
|
|
55
58
|
* Start the visitor.
|
|
@@ -62,7 +65,7 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
62
65
|
* @param options.formMode The currently active form mode.
|
|
63
66
|
* @param options.userRoles The current user's roles.
|
|
64
67
|
*/
|
|
65
|
-
start(options) {
|
|
68
|
+
async start(options) {
|
|
66
69
|
this.clientFormConfig = options.form;
|
|
67
70
|
this.formMode = options.formMode ?? 'view';
|
|
68
71
|
this.formModeProvided = options.formMode !== undefined;
|
|
@@ -70,7 +73,7 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
70
73
|
this.reusableFormDefs = options.reusableFormDefs ?? {};
|
|
71
74
|
this.constraintPath = [];
|
|
72
75
|
this.formPathHelper.reset();
|
|
73
|
-
this.clientFormConfig.accept(this);
|
|
76
|
+
await this.clientFormConfig.accept(this);
|
|
74
77
|
this.applyPostPruningViewModeTransforms();
|
|
75
78
|
return this.clientFormConfig;
|
|
76
79
|
}
|
|
@@ -94,11 +97,12 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
94
97
|
}
|
|
95
98
|
applyPostPruningTransformToComponent(item) {
|
|
96
99
|
const className = item?.component?.class;
|
|
97
|
-
const shouldTransformRepeatable = className ===
|
|
98
|
-
const shouldTransformGroup = className ===
|
|
99
|
-
const shouldTransformQuestionTree = className ===
|
|
100
|
+
const shouldTransformRepeatable = className === sails_ng_common_12.RepeatableComponentName;
|
|
101
|
+
const shouldTransformGroup = className === sails_ng_common_11.GroupFieldComponentName && item?.layout?.class !== sails_ng_common_1.ActionRowLayoutName;
|
|
102
|
+
const shouldTransformQuestionTree = className === sails_ng_common_13.QuestionTreeComponentName;
|
|
103
|
+
const shouldTransformInlineVocabOption = this.isInlineVocabOptionComponent(item);
|
|
100
104
|
const shouldSkipViewTransform = this.hasExplicitAllowedMode(item, 'view');
|
|
101
|
-
if (shouldTransformRepeatable || shouldTransformGroup || shouldTransformQuestionTree) {
|
|
105
|
+
if (shouldTransformRepeatable || shouldTransformGroup || shouldTransformQuestionTree || shouldTransformInlineVocabOption) {
|
|
102
106
|
if (shouldSkipViewTransform) {
|
|
103
107
|
this.applyPostPruningTransformsToNestedChildren(item);
|
|
104
108
|
if ('constraints' in item) {
|
|
@@ -120,6 +124,14 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
120
124
|
this.applyPostPruningTransformsToNestedChildren(item);
|
|
121
125
|
return item;
|
|
122
126
|
}
|
|
127
|
+
isInlineVocabOptionComponent(item) {
|
|
128
|
+
const className = item?.component?.class;
|
|
129
|
+
const componentConfig = item?.component?.config;
|
|
130
|
+
return (componentConfig?.inlineVocab === true &&
|
|
131
|
+
(className === sails_ng_common_3.DropdownInputComponentName ||
|
|
132
|
+
className === sails_ng_common_2.CheckboxInputComponentName ||
|
|
133
|
+
className === sails_ng_common_4.RadioInputComponentName));
|
|
134
|
+
}
|
|
123
135
|
hasExplicitAllowedMode(item, mode) {
|
|
124
136
|
const overrides = item?.overrides;
|
|
125
137
|
if (overrides?.__forceViewTransform === true) {
|
|
@@ -143,7 +155,7 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
143
155
|
config.panels = this.applyPostPruningTransforms(config.panels);
|
|
144
156
|
}
|
|
145
157
|
}
|
|
146
|
-
visitFormConfig(item) {
|
|
158
|
+
async visitFormConfig(item) {
|
|
147
159
|
// Behaviours follow the same client-delivery pattern as expressions:
|
|
148
160
|
// compile JSONata on the server, strip raw source from the delivered config,
|
|
149
161
|
// and leave marker flags so the Angular runtime knows which compiled keys to
|
|
@@ -184,12 +196,11 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
184
196
|
});
|
|
185
197
|
this.removePropsUndefined(item);
|
|
186
198
|
const items = [];
|
|
187
|
-
const
|
|
188
|
-
(item?.componentDefinitions ?? []).forEach((componentDefinition, index) => {
|
|
199
|
+
for (const [index, componentDefinition] of (item?.componentDefinitions ?? []).entries()) {
|
|
189
200
|
items.push(componentDefinition);
|
|
190
201
|
// Visit children
|
|
191
|
-
|
|
192
|
-
}
|
|
202
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForFormConfigComponentDefinition(componentDefinition, index));
|
|
203
|
+
}
|
|
193
204
|
item.componentDefinitions = items.filter(i => this.hasObjectProps(i));
|
|
194
205
|
// if there are no components, this is an invalid form
|
|
195
206
|
// indicate this by deleting all properties on item
|
|
@@ -198,40 +209,40 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
198
209
|
}
|
|
199
210
|
}
|
|
200
211
|
/* SimpleInput */
|
|
201
|
-
visitSimpleInputFieldComponentDefinition(item) {
|
|
212
|
+
async visitSimpleInputFieldComponentDefinition(item) {
|
|
202
213
|
this.processFieldComponentDefinition(item);
|
|
203
214
|
}
|
|
204
|
-
visitSimpleInputFieldModelDefinition(item) {
|
|
215
|
+
async visitSimpleInputFieldModelDefinition(item) {
|
|
205
216
|
this.processFieldModelDefinition(item);
|
|
206
217
|
}
|
|
207
|
-
visitSimpleInputFormComponentDefinition(item) {
|
|
208
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
218
|
+
async visitSimpleInputFormComponentDefinition(item) {
|
|
219
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
209
220
|
this.processFormComponentDefinition(item);
|
|
210
221
|
}
|
|
211
222
|
/* Content */
|
|
212
|
-
visitContentFieldComponentDefinition(item) {
|
|
223
|
+
async visitContentFieldComponentDefinition(item) {
|
|
213
224
|
this.processFieldComponentDefinition(item);
|
|
214
225
|
}
|
|
215
|
-
visitContentFormComponentDefinition(item) {
|
|
216
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
226
|
+
async visitContentFormComponentDefinition(item) {
|
|
227
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
217
228
|
this.processFormComponentDefinition(item);
|
|
218
229
|
}
|
|
219
230
|
/* Repeatable */
|
|
220
|
-
visitRepeatableFieldComponentDefinition(item) {
|
|
231
|
+
async visitRepeatableFieldComponentDefinition(item) {
|
|
221
232
|
this.processFieldComponentDefinition(item);
|
|
222
233
|
const componentDefinition = item?.config?.elementTemplate;
|
|
223
234
|
if (componentDefinition) {
|
|
224
|
-
this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForRepeatableFieldComponentDefinition(componentDefinition));
|
|
235
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForRepeatableFieldComponentDefinition(componentDefinition));
|
|
225
236
|
}
|
|
226
237
|
}
|
|
227
|
-
visitRepeatableFieldModelDefinition(item) {
|
|
238
|
+
async visitRepeatableFieldModelDefinition(item) {
|
|
228
239
|
this.processFieldModelDefinition(item);
|
|
229
240
|
}
|
|
230
|
-
visitRepeatableElementFieldLayoutDefinition(item) {
|
|
241
|
+
async visitRepeatableElementFieldLayoutDefinition(item) {
|
|
231
242
|
this.processFieldLayoutDefinition(item);
|
|
232
243
|
}
|
|
233
|
-
visitRepeatableFormComponentDefinition(item) {
|
|
234
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
244
|
+
async visitRepeatableFormComponentDefinition(item) {
|
|
245
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
235
246
|
this.processFormComponentDefinition(item);
|
|
236
247
|
// if the element template is empty, this is an invalid component
|
|
237
248
|
// indicate this by deleting all properties on item
|
|
@@ -242,41 +253,55 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
242
253
|
// The data model items in 'repeatable.model.config.value' and
|
|
243
254
|
// 'repeatable.elementTemplate.model.config.newEntryValue'
|
|
244
255
|
// need to be updated to reflect any changes in components.
|
|
245
|
-
this.updateRepeatableDataModels(item);
|
|
256
|
+
await this.updateRepeatableDataModels(item);
|
|
246
257
|
}
|
|
247
258
|
/* Validation Summary */
|
|
248
|
-
visitValidationSummaryFieldComponentDefinition(item) {
|
|
259
|
+
async visitValidationSummaryFieldComponentDefinition(item) {
|
|
260
|
+
this.processFieldComponentDefinition(item);
|
|
261
|
+
}
|
|
262
|
+
async visitValidationSummaryFormComponentDefinition(item) {
|
|
263
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
264
|
+
this.processFormComponentDefinition(item);
|
|
265
|
+
}
|
|
266
|
+
async visitSuggestedValidationSummaryFieldComponentDefinition(item) {
|
|
267
|
+
this.processFieldComponentDefinition(item);
|
|
268
|
+
}
|
|
269
|
+
async visitSuggestedValidationSummaryFormComponentDefinition(item) {
|
|
270
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
271
|
+
this.processFormComponentDefinition(item);
|
|
272
|
+
}
|
|
273
|
+
async visitSaveStatusFieldComponentDefinition(item) {
|
|
249
274
|
this.processFieldComponentDefinition(item);
|
|
250
275
|
}
|
|
251
|
-
|
|
252
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
276
|
+
async visitSaveStatusFormComponentDefinition(item) {
|
|
277
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
253
278
|
this.processFormComponentDefinition(item);
|
|
254
279
|
}
|
|
255
|
-
|
|
280
|
+
/* Integration Status */
|
|
281
|
+
async visitIntegrationStatusFieldComponentDefinition(item) {
|
|
256
282
|
this.processFieldComponentDefinition(item);
|
|
257
283
|
}
|
|
258
|
-
|
|
259
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
284
|
+
async visitIntegrationStatusFormComponentDefinition(item) {
|
|
285
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
260
286
|
this.processFormComponentDefinition(item);
|
|
261
287
|
}
|
|
262
288
|
/* Group */
|
|
263
|
-
visitGroupFieldComponentDefinition(item) {
|
|
289
|
+
async visitGroupFieldComponentDefinition(item) {
|
|
264
290
|
this.processFieldComponentDefinition(item);
|
|
265
291
|
const items = [];
|
|
266
|
-
const
|
|
267
|
-
(item?.config?.componentDefinitions ?? []).forEach((componentDefinition, index) => {
|
|
292
|
+
for (const [index, componentDefinition] of (item?.config?.componentDefinitions ?? []).entries()) {
|
|
268
293
|
items.push(componentDefinition);
|
|
269
|
-
|
|
270
|
-
}
|
|
294
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForGroupFieldComponentDefinition(componentDefinition, index));
|
|
295
|
+
}
|
|
271
296
|
if (item.config) {
|
|
272
297
|
item.config.componentDefinitions = items.filter(i => this.hasObjectProps(i));
|
|
273
298
|
}
|
|
274
299
|
}
|
|
275
|
-
visitGroupFieldModelDefinition(item) {
|
|
300
|
+
async visitGroupFieldModelDefinition(item) {
|
|
276
301
|
this.processFieldModelDefinition(item);
|
|
277
302
|
}
|
|
278
|
-
visitGroupFormComponentDefinition(item) {
|
|
279
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
303
|
+
async visitGroupFormComponentDefinition(item) {
|
|
304
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
280
305
|
this.processFormComponentDefinition(item);
|
|
281
306
|
// if there are no components, this is an invalid component
|
|
282
307
|
// indicate this by deleting all properties on item
|
|
@@ -285,18 +310,18 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
285
310
|
}
|
|
286
311
|
}
|
|
287
312
|
/* Tab */
|
|
288
|
-
visitTabFieldComponentDefinition(item) {
|
|
313
|
+
async visitTabFieldComponentDefinition(item) {
|
|
289
314
|
this.processFieldComponentDefinition(item);
|
|
290
|
-
(item.config?.tabs ?? []).
|
|
315
|
+
for (const [index, componentDefinition] of (item.config?.tabs ?? []).entries()) {
|
|
291
316
|
// Visit children
|
|
292
|
-
this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForTabFieldComponentDefinition(componentDefinition, index));
|
|
293
|
-
}
|
|
317
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForTabFieldComponentDefinition(componentDefinition, index));
|
|
318
|
+
}
|
|
294
319
|
}
|
|
295
|
-
visitTabFieldLayoutDefinition(item) {
|
|
320
|
+
async visitTabFieldLayoutDefinition(item) {
|
|
296
321
|
this.processFieldLayoutDefinition(item);
|
|
297
322
|
}
|
|
298
|
-
visitTabFormComponentDefinition(item) {
|
|
299
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
323
|
+
async visitTabFormComponentDefinition(item) {
|
|
324
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
300
325
|
this.processFormComponentDefinition(item);
|
|
301
326
|
// if there are no tabs, this is an invalid component
|
|
302
327
|
// indicate this by deleting all properties on item
|
|
@@ -305,61 +330,61 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
305
330
|
}
|
|
306
331
|
}
|
|
307
332
|
/* Accordion */
|
|
308
|
-
visitAccordionFieldComponentDefinition(item) {
|
|
333
|
+
async visitAccordionFieldComponentDefinition(item) {
|
|
309
334
|
this.processFieldComponentDefinition(item);
|
|
310
|
-
(item.config?.panels ?? []).
|
|
311
|
-
this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForAccordionFieldComponentDefinition(componentDefinition, index));
|
|
312
|
-
}
|
|
335
|
+
for (const [index, componentDefinition] of (item.config?.panels ?? []).entries()) {
|
|
336
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForAccordionFieldComponentDefinition(componentDefinition, index));
|
|
337
|
+
}
|
|
313
338
|
}
|
|
314
|
-
visitAccordionFieldLayoutDefinition(item) {
|
|
339
|
+
async visitAccordionFieldLayoutDefinition(item) {
|
|
315
340
|
this.processFieldLayoutDefinition(item);
|
|
316
341
|
}
|
|
317
|
-
visitAccordionFormComponentDefinition(item) {
|
|
318
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
342
|
+
async visitAccordionFormComponentDefinition(item) {
|
|
343
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
319
344
|
this.processFormComponentDefinition(item);
|
|
320
345
|
if ((item.component?.config?.panels ?? [])?.length === 0) {
|
|
321
346
|
this.removePropsAll(item);
|
|
322
347
|
}
|
|
323
348
|
}
|
|
324
|
-
visitAccordionPanelFieldComponentDefinition(item) {
|
|
349
|
+
async visitAccordionPanelFieldComponentDefinition(item) {
|
|
325
350
|
this.processFieldComponentDefinition(item);
|
|
326
351
|
const items = [];
|
|
327
|
-
(item.config?.componentDefinitions ?? []).
|
|
352
|
+
for (const [index, componentDefinition] of (item.config?.componentDefinitions ?? []).entries()) {
|
|
328
353
|
items.push(componentDefinition);
|
|
329
|
-
this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForAccordionPanelFieldComponentDefinition(componentDefinition, index));
|
|
330
|
-
}
|
|
354
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForAccordionPanelFieldComponentDefinition(componentDefinition, index));
|
|
355
|
+
}
|
|
331
356
|
if (item.config) {
|
|
332
357
|
item.config.componentDefinitions = items.filter(i => this.hasObjectProps(i));
|
|
333
358
|
}
|
|
334
359
|
}
|
|
335
|
-
visitAccordionPanelFieldLayoutDefinition(item) {
|
|
360
|
+
async visitAccordionPanelFieldLayoutDefinition(item) {
|
|
336
361
|
this.processFieldLayoutDefinition(item);
|
|
337
362
|
}
|
|
338
|
-
visitAccordionPanelFormComponentDefinition(item) {
|
|
339
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
363
|
+
async visitAccordionPanelFormComponentDefinition(item) {
|
|
364
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
340
365
|
this.processFormComponentDefinition(item);
|
|
341
366
|
if ((item.component?.config?.componentDefinitions ?? []).length === 0) {
|
|
342
367
|
this.removePropsAll(item);
|
|
343
368
|
}
|
|
344
369
|
}
|
|
345
370
|
/* Tab Content */
|
|
346
|
-
visitTabContentFieldComponentDefinition(item) {
|
|
371
|
+
async visitTabContentFieldComponentDefinition(item) {
|
|
347
372
|
this.processFieldComponentDefinition(item);
|
|
348
373
|
const items = [];
|
|
349
|
-
(item.config?.componentDefinitions ?? []).
|
|
374
|
+
for (const [index, componentDefinition] of (item.config?.componentDefinitions ?? []).entries()) {
|
|
350
375
|
items.push(componentDefinition);
|
|
351
376
|
// Visit children
|
|
352
|
-
this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForTabContentFieldComponentDefinition(componentDefinition, index));
|
|
353
|
-
}
|
|
377
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForTabContentFieldComponentDefinition(componentDefinition, index));
|
|
378
|
+
}
|
|
354
379
|
if (item.config) {
|
|
355
380
|
item.config.componentDefinitions = items.filter(i => this.hasObjectProps(i));
|
|
356
381
|
}
|
|
357
382
|
}
|
|
358
|
-
visitTabContentFieldLayoutDefinition(item) {
|
|
383
|
+
async visitTabContentFieldLayoutDefinition(item) {
|
|
359
384
|
this.processFieldLayoutDefinition(item);
|
|
360
385
|
}
|
|
361
|
-
visitTabContentFormComponentDefinition(item) {
|
|
362
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
386
|
+
async visitTabContentFormComponentDefinition(item) {
|
|
387
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
363
388
|
this.processFormComponentDefinition(item);
|
|
364
389
|
// if there are no components, this is an invalid component
|
|
365
390
|
// indicate this by deleting all properties on item
|
|
@@ -368,227 +393,237 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
368
393
|
}
|
|
369
394
|
}
|
|
370
395
|
/* Save Button */
|
|
371
|
-
visitSaveButtonFieldComponentDefinition(item) {
|
|
396
|
+
async visitSaveButtonFieldComponentDefinition(item) {
|
|
372
397
|
this.processFieldComponentDefinition(item);
|
|
373
398
|
}
|
|
374
|
-
visitSaveButtonFormComponentDefinition(item) {
|
|
375
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
399
|
+
async visitSaveButtonFormComponentDefinition(item) {
|
|
400
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
376
401
|
this.processFormComponentDefinition(item);
|
|
377
402
|
}
|
|
378
403
|
/* Cancel Button */
|
|
379
|
-
visitCancelButtonFieldComponentDefinition(item) {
|
|
404
|
+
async visitCancelButtonFieldComponentDefinition(item) {
|
|
380
405
|
this.processFieldComponentDefinition(item);
|
|
381
406
|
}
|
|
382
|
-
visitCancelButtonFormComponentDefinition(item) {
|
|
383
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
407
|
+
async visitCancelButtonFormComponentDefinition(item) {
|
|
408
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
384
409
|
this.processFormComponentDefinition(item);
|
|
385
410
|
}
|
|
386
|
-
visitDeleteButtonFieldComponentDefinition(item) {
|
|
411
|
+
async visitDeleteButtonFieldComponentDefinition(item) {
|
|
387
412
|
this.processFieldComponentDefinition(item);
|
|
388
413
|
}
|
|
389
|
-
visitDeleteButtonFormComponentDefinition(item) {
|
|
390
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
414
|
+
async visitDeleteButtonFormComponentDefinition(item) {
|
|
415
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
391
416
|
this.processFormComponentDefinition(item);
|
|
392
417
|
}
|
|
393
418
|
/* Tab Nav Button */
|
|
394
|
-
visitTabNavButtonFieldComponentDefinition(item) {
|
|
419
|
+
async visitTabNavButtonFieldComponentDefinition(item) {
|
|
395
420
|
this.processFieldComponentDefinition(item);
|
|
396
421
|
}
|
|
397
|
-
visitTabNavButtonFormComponentDefinition(item) {
|
|
398
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
422
|
+
async visitTabNavButtonFormComponentDefinition(item) {
|
|
423
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
399
424
|
this.processFormComponentDefinition(item);
|
|
400
425
|
}
|
|
401
426
|
/* Text Area */
|
|
402
|
-
visitTextAreaFieldComponentDefinition(item) {
|
|
427
|
+
async visitTextAreaFieldComponentDefinition(item) {
|
|
403
428
|
this.processFieldComponentDefinition(item);
|
|
404
429
|
}
|
|
405
|
-
visitTextAreaFieldModelDefinition(item) {
|
|
430
|
+
async visitTextAreaFieldModelDefinition(item) {
|
|
406
431
|
this.processFieldModelDefinition(item);
|
|
407
432
|
}
|
|
408
|
-
visitTextAreaFormComponentDefinition(item) {
|
|
409
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
433
|
+
async visitTextAreaFormComponentDefinition(item) {
|
|
434
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
410
435
|
this.processFormComponentDefinition(item);
|
|
411
436
|
}
|
|
412
437
|
/* Default Layout */
|
|
413
|
-
visitDefaultFieldLayoutDefinition(item) {
|
|
438
|
+
async visitDefaultFieldLayoutDefinition(item) {
|
|
414
439
|
this.processFieldLayoutDefinition(item);
|
|
415
440
|
}
|
|
416
441
|
/* Checkbox Input */
|
|
417
|
-
visitCheckboxInputFieldComponentDefinition(item) {
|
|
442
|
+
async visitCheckboxInputFieldComponentDefinition(item) {
|
|
418
443
|
this.processFieldComponentDefinition(item);
|
|
419
444
|
}
|
|
420
|
-
visitCheckboxInputFieldModelDefinition(item) {
|
|
445
|
+
async visitCheckboxInputFieldModelDefinition(item) {
|
|
421
446
|
this.processFieldModelDefinition(item);
|
|
422
447
|
}
|
|
423
|
-
visitCheckboxInputFormComponentDefinition(item) {
|
|
424
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
448
|
+
async visitCheckboxInputFormComponentDefinition(item) {
|
|
449
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
425
450
|
this.processFormComponentDefinition(item);
|
|
426
451
|
}
|
|
427
452
|
/* Checkbox Tree */
|
|
428
|
-
visitCheckboxTreeFieldComponentDefinition(item) {
|
|
453
|
+
async visitCheckboxTreeFieldComponentDefinition(item) {
|
|
429
454
|
this.processFieldComponentDefinition(item);
|
|
430
455
|
}
|
|
431
|
-
visitCheckboxTreeFieldModelDefinition(item) {
|
|
456
|
+
async visitCheckboxTreeFieldModelDefinition(item) {
|
|
432
457
|
this.processFieldModelDefinition(item);
|
|
433
458
|
}
|
|
434
|
-
visitCheckboxTreeFormComponentDefinition(item) {
|
|
435
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
459
|
+
async visitCheckboxTreeFormComponentDefinition(item) {
|
|
460
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
436
461
|
this.processFormComponentDefinition(item);
|
|
437
462
|
}
|
|
438
463
|
/* Record Selector */
|
|
439
|
-
visitRecordSelectorFieldComponentDefinition(item) {
|
|
464
|
+
async visitRecordSelectorFieldComponentDefinition(item) {
|
|
440
465
|
this.processFieldComponentDefinition(item);
|
|
441
466
|
}
|
|
442
|
-
visitRecordSelectorFieldModelDefinition(item) {
|
|
467
|
+
async visitRecordSelectorFieldModelDefinition(item) {
|
|
443
468
|
this.processFieldModelDefinition(item);
|
|
444
469
|
}
|
|
445
|
-
visitRecordSelectorFormComponentDefinition(item) {
|
|
446
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
470
|
+
async visitRecordSelectorFormComponentDefinition(item) {
|
|
471
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
447
472
|
this.processFormComponentDefinition(item);
|
|
448
473
|
}
|
|
449
474
|
/* Dropdown Input */
|
|
450
|
-
visitDropdownInputFieldComponentDefinition(item) {
|
|
475
|
+
async visitDropdownInputFieldComponentDefinition(item) {
|
|
451
476
|
this.processFieldComponentDefinition(item);
|
|
452
477
|
}
|
|
453
|
-
visitDropdownInputFieldModelDefinition(item) {
|
|
478
|
+
async visitDropdownInputFieldModelDefinition(item) {
|
|
454
479
|
this.processFieldModelDefinition(item);
|
|
455
480
|
}
|
|
456
|
-
visitDropdownInputFormComponentDefinition(item) {
|
|
457
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
481
|
+
async visitDropdownInputFormComponentDefinition(item) {
|
|
482
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
458
483
|
this.processFormComponentDefinition(item);
|
|
459
484
|
}
|
|
460
485
|
/* Typeahead Input */
|
|
461
|
-
visitTypeaheadInputFieldComponentDefinition(item) {
|
|
486
|
+
async visitTypeaheadInputFieldComponentDefinition(item) {
|
|
462
487
|
this.processFieldComponentDefinition(item);
|
|
463
488
|
}
|
|
464
|
-
visitTypeaheadInputFieldModelDefinition(item) {
|
|
489
|
+
async visitTypeaheadInputFieldModelDefinition(item) {
|
|
465
490
|
this.processFieldModelDefinition(item);
|
|
466
491
|
}
|
|
467
|
-
visitTypeaheadInputFormComponentDefinition(item) {
|
|
468
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
492
|
+
async visitTypeaheadInputFormComponentDefinition(item) {
|
|
493
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
469
494
|
this.processFormComponentDefinition(item);
|
|
470
495
|
}
|
|
471
496
|
/* Rich Text Editor */
|
|
472
|
-
visitRichTextEditorFieldComponentDefinition(item) {
|
|
497
|
+
async visitRichTextEditorFieldComponentDefinition(item) {
|
|
473
498
|
this.processFieldComponentDefinition(item);
|
|
474
499
|
}
|
|
475
|
-
visitRichTextEditorFieldModelDefinition(item) {
|
|
500
|
+
async visitRichTextEditorFieldModelDefinition(item) {
|
|
476
501
|
this.processFieldModelDefinition(item);
|
|
477
502
|
}
|
|
478
|
-
visitRichTextEditorFormComponentDefinition(item) {
|
|
479
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
503
|
+
async visitRichTextEditorFormComponentDefinition(item) {
|
|
504
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
480
505
|
this.processFormComponentDefinition(item);
|
|
481
506
|
}
|
|
482
507
|
/* Map */
|
|
483
|
-
visitMapFieldComponentDefinition(item) {
|
|
508
|
+
async visitMapFieldComponentDefinition(item) {
|
|
484
509
|
this.processFieldComponentDefinition(item);
|
|
485
510
|
}
|
|
486
|
-
visitMapFieldModelDefinition(item) {
|
|
511
|
+
async visitMapFieldModelDefinition(item) {
|
|
487
512
|
this.processFieldModelDefinition(item);
|
|
488
513
|
}
|
|
489
|
-
visitMapFormComponentDefinition(item) {
|
|
490
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
514
|
+
async visitMapFormComponentDefinition(item) {
|
|
515
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
491
516
|
this.processFormComponentDefinition(item);
|
|
492
517
|
}
|
|
493
518
|
/* File Upload */
|
|
494
|
-
visitFileUploadFieldComponentDefinition(item) {
|
|
519
|
+
async visitFileUploadFieldComponentDefinition(item) {
|
|
495
520
|
this.processFieldComponentDefinition(item);
|
|
496
521
|
}
|
|
497
|
-
visitFileUploadFieldModelDefinition(item) {
|
|
522
|
+
async visitFileUploadFieldModelDefinition(item) {
|
|
498
523
|
this.processFieldModelDefinition(item);
|
|
499
524
|
}
|
|
500
|
-
visitFileUploadFormComponentDefinition(item) {
|
|
501
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
525
|
+
async visitFileUploadFormComponentDefinition(item) {
|
|
526
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
502
527
|
this.processFormComponentDefinition(item);
|
|
503
528
|
}
|
|
504
529
|
/* PDF List */
|
|
505
|
-
visitPDFListFieldComponentDefinition(item) {
|
|
530
|
+
async visitPDFListFieldComponentDefinition(item) {
|
|
506
531
|
this.processFieldComponentDefinition(item);
|
|
507
532
|
}
|
|
508
|
-
visitPDFListFieldModelDefinition(item) {
|
|
533
|
+
async visitPDFListFieldModelDefinition(item) {
|
|
509
534
|
this.processFieldModelDefinition(item);
|
|
510
535
|
}
|
|
511
|
-
visitPDFListFormComponentDefinition(item) {
|
|
512
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
536
|
+
async visitPDFListFormComponentDefinition(item) {
|
|
537
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
513
538
|
this.processFormComponentDefinition(item);
|
|
514
539
|
}
|
|
515
540
|
/* Record Metadata Retriever */
|
|
516
|
-
visitRecordMetadataRetrieverFieldComponentDefinition(item) {
|
|
541
|
+
async visitRecordMetadataRetrieverFieldComponentDefinition(item) {
|
|
517
542
|
this.processFieldComponentDefinition(item);
|
|
518
543
|
}
|
|
519
|
-
visitRecordMetadataRetrieverFormComponentDefinition(item) {
|
|
520
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
544
|
+
async visitRecordMetadataRetrieverFormComponentDefinition(item) {
|
|
545
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
521
546
|
this.processFormComponentDefinition(item);
|
|
522
547
|
}
|
|
523
548
|
/* Data Location */
|
|
524
|
-
visitDataLocationFieldComponentDefinition(item) {
|
|
549
|
+
async visitDataLocationFieldComponentDefinition(item) {
|
|
525
550
|
this.processFieldComponentDefinition(item);
|
|
526
551
|
}
|
|
527
|
-
visitDataLocationFieldModelDefinition(item) {
|
|
552
|
+
async visitDataLocationFieldModelDefinition(item) {
|
|
528
553
|
this.processFieldModelDefinition(item);
|
|
529
554
|
}
|
|
530
|
-
visitDataLocationFormComponentDefinition(item) {
|
|
531
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
555
|
+
async visitDataLocationFormComponentDefinition(item) {
|
|
556
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
532
557
|
this.processFormComponentDefinition(item);
|
|
533
558
|
}
|
|
534
559
|
// Client visitor treats the refresh trigger like any other field component,
|
|
535
560
|
// but there is intentionally no model companion to process.
|
|
536
|
-
visitPublishDataLocationRefreshFieldComponentDefinition(item) {
|
|
561
|
+
async visitPublishDataLocationRefreshFieldComponentDefinition(item) {
|
|
537
562
|
this.processFieldComponentDefinition(item);
|
|
538
563
|
}
|
|
539
|
-
visitPublishDataLocationRefreshFormComponentDefinition(item) {
|
|
540
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
564
|
+
async visitPublishDataLocationRefreshFormComponentDefinition(item) {
|
|
565
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
541
566
|
this.processFormComponentDefinition(item);
|
|
542
567
|
}
|
|
543
|
-
visitPublishDataLocationSelectorFieldComponentDefinition(item) {
|
|
568
|
+
async visitPublishDataLocationSelectorFieldComponentDefinition(item) {
|
|
544
569
|
this.processFieldComponentDefinition(item);
|
|
570
|
+
const headerActions = [];
|
|
571
|
+
for (const [index, componentDefinition] of (item.config?.headerActions ?? []).entries()) {
|
|
572
|
+
headerActions.push(componentDefinition);
|
|
573
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, {
|
|
574
|
+
formConfig: ['config', 'headerActions', index.toString()],
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
if (item.config) {
|
|
578
|
+
item.config.headerActions = headerActions.filter((entry) => this.hasObjectProps(entry));
|
|
579
|
+
}
|
|
545
580
|
}
|
|
546
|
-
visitPublishDataLocationSelectorFieldModelDefinition(item) {
|
|
581
|
+
async visitPublishDataLocationSelectorFieldModelDefinition(item) {
|
|
547
582
|
this.processFieldModelDefinition(item);
|
|
548
583
|
}
|
|
549
|
-
visitPublishDataLocationSelectorFormComponentDefinition(item) {
|
|
550
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
584
|
+
async visitPublishDataLocationSelectorFormComponentDefinition(item) {
|
|
585
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
551
586
|
this.processFormComponentDefinition(item);
|
|
552
587
|
}
|
|
553
588
|
/* Radio Input */
|
|
554
|
-
visitRadioInputFieldComponentDefinition(item) {
|
|
589
|
+
async visitRadioInputFieldComponentDefinition(item) {
|
|
555
590
|
this.processFieldComponentDefinition(item);
|
|
556
591
|
}
|
|
557
|
-
visitRadioInputFieldModelDefinition(item) {
|
|
592
|
+
async visitRadioInputFieldModelDefinition(item) {
|
|
558
593
|
this.processFieldModelDefinition(item);
|
|
559
594
|
}
|
|
560
|
-
visitRadioInputFormComponentDefinition(item) {
|
|
561
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
595
|
+
async visitRadioInputFormComponentDefinition(item) {
|
|
596
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
562
597
|
this.processFormComponentDefinition(item);
|
|
563
598
|
}
|
|
564
599
|
/* Date Input */
|
|
565
|
-
visitDateInputFieldComponentDefinition(item) {
|
|
600
|
+
async visitDateInputFieldComponentDefinition(item) {
|
|
566
601
|
this.processFieldComponentDefinition(item);
|
|
567
602
|
}
|
|
568
|
-
visitDateInputFieldModelDefinition(item) {
|
|
603
|
+
async visitDateInputFieldModelDefinition(item) {
|
|
569
604
|
this.processFieldModelDefinition(item);
|
|
570
605
|
}
|
|
571
|
-
visitDateInputFormComponentDefinition(item) {
|
|
572
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
606
|
+
async visitDateInputFormComponentDefinition(item) {
|
|
607
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
573
608
|
this.processFormComponentDefinition(item);
|
|
574
609
|
}
|
|
575
610
|
/* Question Tree */
|
|
576
|
-
visitQuestionTreeFieldComponentDefinition(item) {
|
|
611
|
+
async visitQuestionTreeFieldComponentDefinition(item) {
|
|
577
612
|
this.processFieldComponentDefinition(item);
|
|
578
613
|
const items = [];
|
|
579
|
-
(item?.config?.componentDefinitions ?? []).
|
|
614
|
+
for (const [index, componentDefinition] of (item?.config?.componentDefinitions ?? []).entries()) {
|
|
580
615
|
items.push(componentDefinition);
|
|
581
|
-
this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForQuestionTreeFieldComponentDefinition(componentDefinition, index));
|
|
582
|
-
}
|
|
616
|
+
await this.formPathHelper.acceptFormPath(componentDefinition, this.formPathHelper.lineagePathsForQuestionTreeFieldComponentDefinition(componentDefinition, index));
|
|
617
|
+
}
|
|
583
618
|
if (item.config) {
|
|
584
619
|
item.config.componentDefinitions = items.filter(i => this.hasObjectProps(i));
|
|
585
620
|
}
|
|
586
621
|
}
|
|
587
|
-
visitQuestionTreeFieldModelDefinition(item) {
|
|
622
|
+
async visitQuestionTreeFieldModelDefinition(item) {
|
|
588
623
|
this.processFieldModelDefinition(item);
|
|
589
624
|
}
|
|
590
|
-
visitQuestionTreeFormComponentDefinition(item) {
|
|
591
|
-
this.acceptCheckConstraintsCurrentPath(item);
|
|
625
|
+
async visitQuestionTreeFormComponentDefinition(item) {
|
|
626
|
+
await this.acceptCheckConstraintsCurrentPath(item);
|
|
592
627
|
this.processFormComponentDefinition(item);
|
|
593
628
|
if ((item.component?.config?.componentDefinitions ?? [])?.length === 0) {
|
|
594
629
|
this.removePropsAll(item);
|
|
@@ -598,9 +633,9 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
598
633
|
processFormComponentDefinition(item) {
|
|
599
634
|
const isPostPruningCandidate = this.formMode === 'view' &&
|
|
600
635
|
this.formModeProvided &&
|
|
601
|
-
(item?.component?.class ===
|
|
602
|
-
item?.component?.class ===
|
|
603
|
-
item?.component?.class ===
|
|
636
|
+
(item?.component?.class === sails_ng_common_12.RepeatableComponentName ||
|
|
637
|
+
item?.component?.class === sails_ng_common_11.GroupFieldComponentName ||
|
|
638
|
+
item?.component?.class === sails_ng_common_13.QuestionTreeComponentName);
|
|
604
639
|
// Constraint define the criteria for including a component.
|
|
605
640
|
// The client has no need for the constraints.
|
|
606
641
|
if ('constraints' in item && !isPostPruningCandidate) {
|
|
@@ -609,18 +644,20 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
609
644
|
// Expressions must be compiled on the server, then retrieved by the client.
|
|
610
645
|
// The raw expressions must not be available to the client.
|
|
611
646
|
if ('expressions' in item) {
|
|
612
|
-
|
|
613
|
-
item.expressions?.forEach(expr => {
|
|
614
|
-
expr.config.hasTemplate = 'template' in expr?.config && expr.config?.template !== undefined && expr.config?.template !== null;
|
|
615
|
-
this.removePropsUndefined(expr);
|
|
616
|
-
this.removePropsUndefined(expr.config);
|
|
617
|
-
});
|
|
647
|
+
this.processFormComponentExpressions(item);
|
|
618
648
|
if (item.expressions?.length === 0) {
|
|
619
649
|
delete item['expressions'];
|
|
620
650
|
}
|
|
621
651
|
}
|
|
622
652
|
this.removePropsUndefined(item);
|
|
623
653
|
}
|
|
654
|
+
processFormComponentExpressions(item) {
|
|
655
|
+
item.expressions?.forEach(expr => {
|
|
656
|
+
expr.config.hasTemplate = expr.config?.template !== undefined && expr.config?.template !== null;
|
|
657
|
+
this.removePropsUndefined(expr);
|
|
658
|
+
this.removePropsUndefined(expr.config);
|
|
659
|
+
});
|
|
660
|
+
}
|
|
624
661
|
processFieldComponentDefinition(item) {
|
|
625
662
|
this.removeShowValidIndicatorIfDefault(item);
|
|
626
663
|
this.removePropsUndefined(item);
|
|
@@ -684,7 +721,7 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
684
721
|
return (isArray && hasElements && hasMode) || !isArray || !hasElements;
|
|
685
722
|
});
|
|
686
723
|
}
|
|
687
|
-
acceptCheckConstraintsCurrentPath(item) {
|
|
724
|
+
async acceptCheckConstraintsCurrentPath(item) {
|
|
688
725
|
const currentConstraintPath = [...this.constraintPath];
|
|
689
726
|
try {
|
|
690
727
|
// add constraints to constraintPath before and after processing components
|
|
@@ -695,7 +732,7 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
695
732
|
const allowedByUserRoles = this.isAllowedByUserRoles();
|
|
696
733
|
const allowedByFormMode = this.isAllowedByFormMode();
|
|
697
734
|
if (allowedByUserRoles && allowedByFormMode) {
|
|
698
|
-
this.formPathHelper.acceptFormComponentDefinition(item);
|
|
735
|
+
await this.formPathHelper.acceptFormComponentDefinition(item);
|
|
699
736
|
}
|
|
700
737
|
else {
|
|
701
738
|
this.removePropsAll(item);
|
|
@@ -718,29 +755,28 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
718
755
|
* @param item The repeatable form component.
|
|
719
756
|
* @protected
|
|
720
757
|
*/
|
|
721
|
-
updateRepeatableDataModels(item) {
|
|
758
|
+
async updateRepeatableDataModels(item) {
|
|
722
759
|
this.updateLayoutVisibilityForZeroRows(item);
|
|
723
760
|
const elementTemplate = item.component?.config?.elementTemplate;
|
|
724
761
|
const elementTemplateCompConfig = elementTemplate?.component?.config;
|
|
725
|
-
if (!(0,
|
|
762
|
+
if (!(0, sails_ng_common_8.isTypeWithComponentDefinitions)(elementTemplateCompConfig)) {
|
|
726
763
|
// The elementTemplate does not have nested components. Nothing to update.
|
|
727
764
|
return;
|
|
728
765
|
}
|
|
729
766
|
// Build the data model schema from the components.
|
|
730
|
-
//
|
|
767
|
+
// NOTE: This depends on the repeatable model being set already.
|
|
731
768
|
const schemaVisitor = new json_type_def_visitor_1.JsonTypeDefSchemaFormConfigVisitor(this.logger);
|
|
732
|
-
const elementTemplateFormConfig = new
|
|
769
|
+
const elementTemplateFormConfig = new sails_ng_common_5.FormConfig();
|
|
733
770
|
elementTemplateFormConfig.componentDefinitions = (0, lodash_1.cloneDeep)(elementTemplateCompConfig.componentDefinitions);
|
|
734
|
-
const elementTemplateSchema = schemaVisitor.start({ form: elementTemplateFormConfig });
|
|
771
|
+
const elementTemplateSchema = await schemaVisitor.start({ form: elementTemplateFormConfig });
|
|
735
772
|
// Remove any data model items that are not present in the schema.
|
|
736
|
-
const toProcess = [{ path: [], schema: elementTemplateSchema }];
|
|
737
773
|
const itemValue = item.model?.config?.value;
|
|
738
|
-
if (Array.isArray(itemValue)) {
|
|
739
|
-
item.model.config.value = itemValue.map(value => this.
|
|
774
|
+
if (Array.isArray(itemValue) && item.model?.config) {
|
|
775
|
+
item.model.config.value = itemValue.map(value => this.buildDataMatchingSchema(elementTemplateSchema, [], value, []) ?? {});
|
|
740
776
|
}
|
|
741
777
|
const newEntryValue = elementTemplate?.model?.config?.newEntryValue;
|
|
742
778
|
if (elementTemplate?.model?.config) {
|
|
743
|
-
elementTemplate.model.config.newEntryValue = this.
|
|
779
|
+
elementTemplate.model.config.newEntryValue = this.buildDataMatchingSchema(elementTemplateSchema, [], newEntryValue, []) ?? {};
|
|
744
780
|
}
|
|
745
781
|
}
|
|
746
782
|
updateLayoutVisibilityForZeroRows(item) {
|
|
@@ -756,110 +792,167 @@ class ClientFormConfigVisitor extends sails_ng_common_3.FormConfigVisitor {
|
|
|
756
792
|
}
|
|
757
793
|
}
|
|
758
794
|
/**
|
|
759
|
-
*
|
|
760
|
-
* @param
|
|
761
|
-
* @param
|
|
795
|
+
* Match the schema at the given path to the value at the given path.
|
|
796
|
+
* @param currentSchema The current schema.
|
|
797
|
+
* @param schemaPath The current path within the schema.
|
|
798
|
+
* @param currentValue The current data.
|
|
799
|
+
* @param valuePath The current path within the value.
|
|
800
|
+
* @return The updated value.
|
|
801
|
+
*/
|
|
802
|
+
buildDataMatchingSchema(currentSchema, schemaPath, currentValue, valuePath) {
|
|
803
|
+
currentSchema = currentSchema ?? {};
|
|
804
|
+
schemaPath = schemaPath ?? [];
|
|
805
|
+
valuePath = valuePath ?? [];
|
|
806
|
+
let result = structuredClone(currentValue);
|
|
807
|
+
const schemaKeys = Object.keys(currentSchema);
|
|
808
|
+
const propKeys = ['properties', 'optionalProperties'];
|
|
809
|
+
// For debugging:
|
|
810
|
+
// this.logger.warn(`buildDataMatchingSchema ${JSON.stringify({currentSchema, schemaPath, result, valuePath})}`);
|
|
811
|
+
if ((!currentSchema || schemaKeys.length === 0)) {
|
|
812
|
+
// TODO: If there are no components that have a data model,
|
|
813
|
+
// there will be no schema, so there is nothing to check and update.
|
|
814
|
+
// If there is no schema, then even if there is data, the data cannot be checked without a schema.
|
|
815
|
+
return result;
|
|
816
|
+
}
|
|
817
|
+
else if (schemaKeys.includes('elements') && schemaKeys.length === 1) {
|
|
818
|
+
const elementsSchema = (currentSchema['elements'] ?? {});
|
|
819
|
+
result = this.buildDataMatchingSchemaElements(elementsSchema, [...schemaPath, 'elements'], result, valuePath);
|
|
820
|
+
}
|
|
821
|
+
else if (schemaKeys.includes('type') && schemaKeys.length === 1) {
|
|
822
|
+
const typeSchema = (currentSchema['type'] ?? {});
|
|
823
|
+
result = this.buildDataMatchingSchemaType(typeSchema, [...schemaPath, 'type'], result, valuePath);
|
|
824
|
+
}
|
|
825
|
+
else if (schemaKeys.length > 0 && schemaKeys.filter(k => !propKeys.includes(k)).length === 0) {
|
|
826
|
+
// Process required and optional properties.
|
|
827
|
+
const propertiesSchema = (currentSchema['properties'] ?? {});
|
|
828
|
+
result = this.buildDataMatchingSchemaProperties(propertiesSchema, [...schemaPath, 'properties'], result, valuePath);
|
|
829
|
+
const optionalPropertiesSchema = (currentSchema['optionalProperties'] ?? {});
|
|
830
|
+
result = this.buildDataMatchingSchemaProperties(optionalPropertiesSchema, [...schemaPath, 'optionalProperties'], result, valuePath);
|
|
831
|
+
// Remove properties not in the schema.
|
|
832
|
+
const resultObj = (result ?? {});
|
|
833
|
+
const resultKeys = Object.keys(resultObj);
|
|
834
|
+
const propSchemaKeys = [...Object.keys(propertiesSchema), ...Object.keys(optionalPropertiesSchema)];
|
|
835
|
+
for (const key of resultKeys) {
|
|
836
|
+
// Remove names missing in the schema.
|
|
837
|
+
if (!propSchemaKeys.includes(key) && Object.hasOwn(resultObj, key)) {
|
|
838
|
+
delete result[key];
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
else {
|
|
843
|
+
throw new Error(`Unknown schema structure '${JSON.stringify(currentSchema)}'.`);
|
|
844
|
+
}
|
|
845
|
+
return result;
|
|
846
|
+
}
|
|
847
|
+
/**
|
|
848
|
+
* Match an object to the schema. Removes any keys that do not existing the schema.
|
|
849
|
+
* @param currentSchema The current schema.
|
|
850
|
+
* @param schemaPath The current path within the schema.
|
|
851
|
+
* @param currentValue The current data.
|
|
852
|
+
* @param valuePath The current path within the value.
|
|
853
|
+
* @return The updated value.
|
|
762
854
|
* @protected
|
|
763
855
|
*/
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
856
|
+
buildDataMatchingSchemaProperties(currentSchema, schemaPath, currentValue, valuePath) {
|
|
857
|
+
let currentValueType = (0, sails_ng_common_9.guessType)(currentValue);
|
|
858
|
+
const result = {};
|
|
859
|
+
if (currentValueType === 'object' && typeof currentValue === 'object') {
|
|
860
|
+
Object.assign(result, structuredClone(currentValue));
|
|
861
|
+
}
|
|
862
|
+
// Allow missing or null object values - set an empty object.
|
|
863
|
+
if (currentValue === undefined || currentValue === null) {
|
|
864
|
+
currentValue = {};
|
|
865
|
+
currentValueType = 'object';
|
|
866
|
+
}
|
|
867
|
+
// Legacy schema allowed a single value where an object is now expected.
|
|
868
|
+
// Convert the single value to the object key 'name' if able.
|
|
869
|
+
const schemaNames = Object.keys(currentSchema);
|
|
870
|
+
const hasSchemaPropName = schemaNames.includes('name');
|
|
871
|
+
const isCurrentValueNameType = ['string', 'timestamp', 'number', 'boolean'].includes(currentValueType);
|
|
872
|
+
if (currentValueType !== 'object' && hasSchemaPropName && isCurrentValueNameType) {
|
|
873
|
+
currentValueType = 'object';
|
|
874
|
+
result.name = String(currentValue);
|
|
875
|
+
}
|
|
876
|
+
if (currentValueType !== 'object') {
|
|
877
|
+
throw this.matchDataSchemaError('object', currentSchema, schemaPath, result, valuePath);
|
|
878
|
+
}
|
|
879
|
+
// Legacy schema has value instead of name.
|
|
880
|
+
// Add the value as the name if name is missing.
|
|
881
|
+
const isObjPropNameString = typeof result.name === 'string' && result.name.length > 0;
|
|
882
|
+
const isObjPropValueString = typeof result.value === 'string' && result.value.length > 0;
|
|
883
|
+
if (hasSchemaPropName && !isObjPropNameString && isObjPropValueString) {
|
|
884
|
+
result.name = result.value;
|
|
885
|
+
}
|
|
886
|
+
// Build each of the current value's properties matching the schema.
|
|
887
|
+
for (const key of Object.keys(result)) {
|
|
888
|
+
// Remove names missing in the schema.
|
|
889
|
+
if (!schemaNames.includes(key) && Object.hasOwn(result, key)) {
|
|
890
|
+
// delete result[key];
|
|
771
891
|
}
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
let currentValueType = (0, sails_ng_common_6.guessType)(currentValue);
|
|
776
|
-
const errMsg1 = `Component and data model do not match. Component at '${JSON.stringify(path)}' expected`;
|
|
777
|
-
const errMsg2 = `but got '${currentValueType}':`;
|
|
778
|
-
for (const [schemaKey, schemaValue] of Object.entries(schema)) {
|
|
779
|
-
const schemaCurrent = schemaValue;
|
|
780
|
-
switch (schemaKey) {
|
|
781
|
-
case 'properties':
|
|
782
|
-
// Allow missing or null object values - set an empty object.
|
|
783
|
-
if (currentValue === undefined || currentValue === null) {
|
|
784
|
-
currentValue = {};
|
|
785
|
-
if (path.length > 0) {
|
|
786
|
-
(0, lodash_1.set)(value, path, currentValue);
|
|
787
|
-
}
|
|
788
|
-
else {
|
|
789
|
-
value = currentValue;
|
|
790
|
-
}
|
|
791
|
-
currentValueType = 'object';
|
|
792
|
-
}
|
|
793
|
-
if (currentValueType !== 'object') {
|
|
794
|
-
const schemaNames = Object.keys(schemaCurrent);
|
|
795
|
-
const canCoerceToLegacyGroupRow = schemaNames.includes('name') && ['string', 'timestamp', 'number', 'boolean'].includes(currentValueType);
|
|
796
|
-
if (canCoerceToLegacyGroupRow) {
|
|
797
|
-
currentValue = {
|
|
798
|
-
name: String(currentValue),
|
|
799
|
-
};
|
|
800
|
-
if (path.length > 0) {
|
|
801
|
-
(0, lodash_1.set)(value, path, currentValue);
|
|
802
|
-
}
|
|
803
|
-
else {
|
|
804
|
-
value = currentValue;
|
|
805
|
-
}
|
|
806
|
-
currentValueType = 'object';
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
if (currentValueType !== 'object') {
|
|
810
|
-
throw new Error(`${errMsg1} an object, ${errMsg2} ${JSON.stringify(currentValue)}`);
|
|
811
|
-
}
|
|
812
|
-
// Remove names missing in the schema.
|
|
813
|
-
// Add names in the schema to the to-process array.
|
|
814
|
-
const schemaNames = Object.keys(schemaCurrent);
|
|
815
|
-
if (schemaNames.includes('name')) {
|
|
816
|
-
const currentObj = currentValue;
|
|
817
|
-
const hasName = typeof currentObj.name === 'string' && currentObj.name.length > 0;
|
|
818
|
-
const legacyValue = currentObj.value;
|
|
819
|
-
if (!hasName && typeof legacyValue === 'string' && legacyValue.length > 0) {
|
|
820
|
-
currentObj.name = legacyValue;
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
Object.keys(currentValue).forEach(name => {
|
|
824
|
-
if (!schemaNames.includes(name)) {
|
|
825
|
-
delete currentValue[name];
|
|
826
|
-
}
|
|
827
|
-
else {
|
|
828
|
-
processing.push({
|
|
829
|
-
path: [...path, name],
|
|
830
|
-
schema: schemaCurrent[name],
|
|
831
|
-
});
|
|
832
|
-
}
|
|
833
|
-
});
|
|
834
|
-
break;
|
|
835
|
-
case 'elements':
|
|
836
|
-
if (currentValueType !== 'array') {
|
|
837
|
-
throw new Error(`${errMsg1} an array, ${errMsg2} ${JSON.stringify(currentValue)}`);
|
|
838
|
-
}
|
|
839
|
-
currentValue.forEach((_, index) => {
|
|
840
|
-
processing.push({
|
|
841
|
-
path: [...path, `${index}`],
|
|
842
|
-
schema: schemaCurrent,
|
|
843
|
-
});
|
|
844
|
-
});
|
|
845
|
-
break;
|
|
846
|
-
case 'type':
|
|
847
|
-
// TODO: do the json type def type names match the guessType names?
|
|
848
|
-
// Allow null values
|
|
849
|
-
const schemaValueStr = String(schemaValue);
|
|
850
|
-
const isTimestampString = schemaValueStr === 'string' && currentValueType === 'timestamp';
|
|
851
|
-
if (currentValueType !== schemaValueStr && currentValueType !== 'null' && !isTimestampString) {
|
|
852
|
-
throw new Error(`${errMsg1} ${schemaValue}, ${errMsg2} ${JSON.stringify(currentValue)}`);
|
|
853
|
-
}
|
|
854
|
-
// Nothing else to do.
|
|
855
|
-
break;
|
|
856
|
-
default:
|
|
857
|
-
throw new Error(`Unknown schema type '${schemaKey}'.`);
|
|
858
|
-
}
|
|
892
|
+
else {
|
|
893
|
+
const childSchema = currentSchema[key];
|
|
894
|
+
result[key] = this.buildDataMatchingSchema(childSchema, [...schemaPath, key], result[key], [...valuePath, key]);
|
|
859
895
|
}
|
|
860
896
|
}
|
|
861
|
-
return
|
|
897
|
+
return result;
|
|
898
|
+
}
|
|
899
|
+
/**
|
|
900
|
+
* Match each item in an array to the schema type.
|
|
901
|
+
* @param currentSchema The current schema.
|
|
902
|
+
* @param schemaPath The current path within the schema.
|
|
903
|
+
* @param currentValue The current data.
|
|
904
|
+
* @param valuePath The current path within the value.
|
|
905
|
+
* @return The updated value.
|
|
906
|
+
* @protected
|
|
907
|
+
*/
|
|
908
|
+
buildDataMatchingSchemaElements(currentSchema, schemaPath, currentValue, valuePath) {
|
|
909
|
+
const currentValueType = (0, sails_ng_common_9.guessType)(currentValue);
|
|
910
|
+
if (!Array.isArray(currentValue) || currentValueType !== 'array') {
|
|
911
|
+
throw this.matchDataSchemaError('array', currentSchema, schemaPath, currentValue, valuePath);
|
|
912
|
+
}
|
|
913
|
+
return currentValue.map((v, i) => this.buildDataMatchingSchema(currentSchema, [...schemaPath], v, [...valuePath, i.toString()]));
|
|
914
|
+
}
|
|
915
|
+
/**
|
|
916
|
+
* Match a value to a schema type.
|
|
917
|
+
* @param currentSchema The current schema.
|
|
918
|
+
* @param schemaPath The current path within the schema.
|
|
919
|
+
* @param currentValue The current data.
|
|
920
|
+
* @param valuePath The current path within the value.
|
|
921
|
+
* @return The updated value.
|
|
922
|
+
* @protected
|
|
923
|
+
*/
|
|
924
|
+
buildDataMatchingSchemaType(currentSchema, schemaPath, currentValue, valuePath) {
|
|
925
|
+
const currentSchemaType = String(currentSchema);
|
|
926
|
+
const currentValueType = (0, sails_ng_common_9.guessType)(currentValue);
|
|
927
|
+
// Allow a timestamp as a string.
|
|
928
|
+
const isTimestampString = currentSchemaType === 'string' && currentValueType === 'timestamp';
|
|
929
|
+
// Allow null values.
|
|
930
|
+
const isNull = currentValueType === 'null';
|
|
931
|
+
// The current schema at this point in the schema structure should be a string representing the expected type.
|
|
932
|
+
// An invalid schema might provide an object instead,
|
|
933
|
+
// so check for that by comparing to the guessed type of the current value.
|
|
934
|
+
if (currentValueType !== currentSchemaType && !isNull && !isTimestampString) {
|
|
935
|
+
throw this.matchDataSchemaError(currentSchemaType, currentSchema, schemaPath, currentValue, valuePath);
|
|
936
|
+
}
|
|
937
|
+
return currentValue;
|
|
938
|
+
}
|
|
939
|
+
/**
|
|
940
|
+
* Create an error indicating the data that doesn't match the schema.
|
|
941
|
+
* @param expectedType The expected type of the data.
|
|
942
|
+
* @param currentSchema The current schema.
|
|
943
|
+
* @param schemaPath The current path within the schema.
|
|
944
|
+
* @param currentValue The current data.
|
|
945
|
+
* @param valuePath The current path within the value.
|
|
946
|
+
* @return An Error instance with the details of the match failure.
|
|
947
|
+
* @protected
|
|
948
|
+
*/
|
|
949
|
+
matchDataSchemaError(expectedType, currentSchema, schemaPath, currentValue, valuePath) {
|
|
950
|
+
const currentValueType = (0, sails_ng_common_9.guessType)(currentValue);
|
|
951
|
+
// TODO: do the json type def type names match the guessType names?
|
|
952
|
+
return new Error(`Value and schema do not match. ` +
|
|
953
|
+
`Value '${JSON.stringify(currentValue)}' at '${JSON.stringify(valuePath)}' is type '${currentValueType}'. ` +
|
|
954
|
+
`Schema ${JSON.stringify(currentSchema)} at '${JSON.stringify(schemaPath)}' expected type '${expectedType}'.`);
|
|
862
955
|
}
|
|
863
956
|
}
|
|
864
957
|
exports.ClientFormConfigVisitor = ClientFormConfigVisitor;
|
|
865
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LnZpc2l0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzaXRvci9jbGllbnQudmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBd0Y7QUFzRXhGLHNFQUF1RTtBQXVGdkUsc0VBQThEO0FBQzlELHNFQUFxRTtBQUVyRSxzRUFBa0U7QUFDbEUsc0VBQWtGO0FBQ2xGLG1FQUE2RTtBQUM3RSxzRUFBNkQ7QUFDN0Qsc0VBQWdFO0FBQ2hFLHNFQUEyRTtBQUMzRSxzRUFBMkU7QUFDM0UsdUVBQTZFO0FBRTdFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxtQ0FBaUI7SUFDekMsT0FBTyxHQUFHLHlCQUF5QixDQUFDO0lBRS9DLGdCQUFnQixDQUFvQjtJQUNwQyxRQUFRLENBQWtCO0lBQzFCLGdCQUFnQixDQUFVO0lBQzFCLFNBQVMsQ0FBVztJQUNwQixnQkFBZ0IsQ0FBMEI7SUFFMUMsY0FBYyxDQUF5QjtJQUV2QyxjQUFjLENBQWlCO0lBQy9CLFlBQVksQ0FBZTtJQUVuQyxZQUFZLE1BQWU7UUFDekIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksNEJBQVUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksZ0NBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLDhCQUFZLENBQUMs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
|
|
958
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LnZpc2l0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzaXRvci9jbGllbnQudmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBaUQ7QUE4RWpELHNFQUFxRTtBQUNyRSxzRUFLMEM7QUFXMUMsc0VBSzBDO0FBd0MxQyxzRUFLMEM7QUF1QjFDLHNFQUE0RDtBQUM1RCxzRUFBbUU7QUFFbkUsc0VBQWdFO0FBQ2hFLHNFQUFnRjtBQUNoRixtRUFBMkU7QUFDM0Usc0VBQTJEO0FBQzNELHVFQUE4RDtBQUM5RCx1RUFBeUU7QUFDekUsdUVBQXlFO0FBQ3pFLHVFQUEyRTtBQUUzRTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsbUNBQWlCO0lBQ3pDLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQztJQUUvQyxnQkFBZ0IsQ0FBb0I7SUFDcEMsUUFBUSxDQUFrQjtJQUMxQixnQkFBZ0IsQ0FBVTtJQUMxQixTQUFTLENBQVc7SUFDcEIsZ0JBQWdCLENBQTBCO0lBRTFDLGNBQWMsQ0FBeUI7SUFFdkMsY0FBYyxDQUFpQjtJQUMvQixZQUFZLENBQWU7SUFFbkMsWUFBWSxNQUFlO1FBQ3pCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLDRCQUFVLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGdDQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FB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
|