@defra/forms-engine-plugin 5.0.0-alpha.2 → 5.0.0-alpha.21
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/.public/javascripts/application.min.js +1 -1
- package/.public/javascripts/application.min.js.LICENSE.txt +7 -0
- package/.public/javascripts/application.min.js.map +1 -1
- package/.public/javascripts/shared.min.js +1 -1
- package/.public/javascripts/shared.min.js.LICENSE.txt +7 -0
- package/.public/javascripts/shared.min.js.map +1 -1
- package/.public/stylesheets/application.min.css.map +1 -1
- package/.server/client/javascripts/file-upload.js +6 -3
- package/.server/client/javascripts/file-upload.js.map +1 -1
- package/.server/client/javascripts/geospatial-map.d.ts +153 -5
- package/.server/client/javascripts/geospatial-map.js +157 -77
- package/.server/client/javascripts/geospatial-map.js.map +1 -1
- package/.server/client/javascripts/govuk.js +2 -1
- package/.server/client/javascripts/govuk.js.map +1 -1
- package/.server/client/javascripts/location-map.d.ts +44 -0
- package/.server/client/javascripts/location-map.js +54 -5
- package/.server/client/javascripts/location-map.js.map +1 -1
- package/.server/client/javascripts/map-constants.d.ts +3 -0
- package/.server/client/javascripts/map-constants.js +4 -0
- package/.server/client/javascripts/map-constants.js.map +1 -0
- package/.server/client/javascripts/map.d.ts +10 -0
- package/.server/client/javascripts/map.js +42 -0
- package/.server/client/javascripts/map.js.map +1 -1
- package/.server/client/javascripts/maps.d.ts +5 -0
- package/.server/client/javascripts/maps.js +6 -0
- package/.server/client/javascripts/maps.js.map +1 -0
- package/.server/client/javascripts/shared.d.ts +1 -4
- package/.server/client/javascripts/shared.js +1 -4
- package/.server/client/javascripts/shared.js.map +1 -1
- package/.server/client/javascripts/sssi-dataset.d.ts +18 -20
- package/.server/client/javascripts/sssi-dataset.js +37 -39
- package/.server/client/javascripts/sssi-dataset.js.map +1 -1
- package/.server/client/stylesheets/maps.scss +4 -0
- package/.server/client/stylesheets/shared.scss +1 -5
- package/.server/server/constants.d.ts +2 -0
- package/.server/server/constants.js +2 -0
- package/.server/server/constants.js.map +1 -1
- package/.server/server/plugins/engine/__stubs__/definitions.d.ts +29 -0
- package/.server/server/plugins/engine/__stubs__/definitions.js +125 -0
- package/.server/server/plugins/engine/__stubs__/definitions.js.map +1 -0
- package/.server/server/plugins/engine/components/AutocompleteField.d.ts +9 -3
- package/.server/server/plugins/engine/components/AutocompleteField.js +12 -0
- package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
- package/.server/server/plugins/engine/components/CheckboxesField.d.ts +21 -0
- package/.server/server/plugins/engine/components/CheckboxesField.js +30 -5
- package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentBase.d.ts +1 -0
- package/.server/server/plugins/engine/components/ComponentBase.js +2 -0
- package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.js +11 -6
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/DatePartsField.d.ts +6 -3
- package/.server/server/plugins/engine/components/DatePartsField.js +12 -7
- package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
- package/.server/server/plugins/engine/components/DeclarationField.d.ts +5 -2
- package/.server/server/plugins/engine/components/DeclarationField.js +6 -4
- package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
- package/.server/server/plugins/engine/components/Details.d.ts +1 -0
- package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +33 -2
- package/.server/server/plugins/engine/components/EastingNorthingField.js +110 -54
- package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
- package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -1
- package/.server/server/plugins/engine/components/EmailAddressField.js +2 -1
- package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/FileUploadField.d.ts +21 -0
- package/.server/server/plugins/engine/components/FileUploadField.js +35 -3
- package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
- package/.server/server/plugins/engine/components/FormComponent.d.ts +5 -1
- package/.server/server/plugins/engine/components/FormComponent.js +5 -2
- package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/GeospatialField.d.ts +23 -0
- package/.server/server/plugins/engine/components/GeospatialField.js +33 -9
- package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
- package/.server/server/plugins/engine/components/Html.d.ts +1 -0
- package/.server/server/plugins/engine/components/InsetText.d.ts +1 -0
- package/.server/server/plugins/engine/components/LatLongField.d.ts +32 -2
- package/.server/server/plugins/engine/components/LatLongField.js +85 -48
- package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
- package/.server/server/plugins/engine/components/List.d.ts +1 -0
- package/.server/server/plugins/engine/components/ListFormComponent.d.ts +1 -0
- package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +8 -2
- package/.server/server/plugins/engine/components/LocationFieldBase.js +25 -6
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +12 -3
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +21 -13
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
- package/.server/server/plugins/engine/components/Markdown.d.ts +1 -0
- package/.server/server/plugins/engine/components/Markdown.js +1 -1
- package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
- package/.server/server/plugins/engine/components/MonthYearField.d.ts +5 -2
- package/.server/server/plugins/engine/components/MonthYearField.js +13 -9
- package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
- package/.server/server/plugins/engine/components/MultilineTextField.d.ts +1 -0
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +4 -3
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/NotificationBanner.d.ts +1 -0
- package/.server/server/plugins/engine/components/NumberField.d.ts +5 -0
- package/.server/server/plugins/engine/components/NumberField.js +16 -0
- package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/OsGridRefField.d.ts +103 -1
- package/.server/server/plugins/engine/components/OsGridRefField.js +13 -3
- package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
- package/.server/server/plugins/engine/components/PaymentField.d.ts +3 -0
- package/.server/server/plugins/engine/components/PaymentField.js +17 -6
- package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectField.d.ts +1 -0
- package/.server/server/plugins/engine/components/SelectionControlField.d.ts +1 -0
- package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +1 -0
- package/.server/server/plugins/engine/components/UkAddressField.d.ts +1 -0
- package/.server/server/plugins/engine/components/UkAddressField.js +23 -8
- package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/YesNoField.d.ts +5 -2
- package/.server/server/plugins/engine/components/YesNoField.js +17 -8
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/components.js +3 -3
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +8 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.js +56 -15
- package/.server/server/plugins/engine/components/helpers/geospatial.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/index.d.ts +7 -0
- package/.server/server/plugins/engine/components/helpers/index.js +13 -1
- package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
- package/.server/server/plugins/engine/components/types.d.ts +1 -0
- package/.server/server/plugins/engine/components/types.js.map +1 -1
- package/.server/server/plugins/engine/errors.d.ts +49 -0
- package/.server/server/plugins/engine/errors.js +75 -0
- package/.server/server/plugins/engine/errors.js.map +1 -0
- package/.server/server/plugins/engine/form-availability.d.ts +3 -2
- package/.server/server/plugins/engine/form-availability.js +3 -2
- package/.server/server/plugins/engine/form-availability.js.map +1 -1
- package/.server/server/plugins/engine/form-context.js +2 -2
- package/.server/server/plugins/engine/form-context.js.map +1 -1
- package/.server/server/plugins/engine/helpers.d.ts +22 -2
- package/.server/server/plugins/engine/helpers.js +44 -5
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +4 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js +31 -7
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
- package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +4 -4
- package/.server/server/plugins/engine/i18n/createFormTranslator.js +33 -4
- package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -1
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +1 -1
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +9 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -1
- package/.server/server/plugins/engine/i18n/form.d.ts +13 -0
- package/.server/server/plugins/engine/i18n/form.js +35 -0
- package/.server/server/plugins/engine/i18n/form.js.map +1 -0
- package/.server/server/plugins/engine/i18n/languages.d.ts +10 -0
- package/.server/server/plugins/engine/i18n/languages.js +19 -0
- package/.server/server/plugins/engine/i18n/languages.js.map +1 -0
- package/.server/server/plugins/engine/i18n/translations/cy.json +192 -9
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +125 -7
- package/.server/server/plugins/engine/i18n/types.d.ts +3 -0
- package/.server/server/plugins/engine/i18n/types.js.map +1 -1
- package/.server/server/plugins/engine/index.d.ts +4 -0
- package/.server/server/plugins/engine/index.js +4 -0
- package/.server/server/plugins/engine/index.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.d.ts +0 -4
- package/.server/server/plugins/engine/models/FormModel.js +35 -23
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.js +9 -4
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/models/types.d.ts +28 -1
- package/.server/server/plugins/engine/models/types.js.map +1 -1
- package/.server/server/plugins/engine/models/unavailable-view-model.d.ts +11 -2
- package/.server/server/plugins/engine/models/unavailable-view-model.js +23 -4
- package/.server/server/plugins/engine/models/unavailable-view-model.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +14 -6
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +2 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v2.js +2 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +7 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +56 -10
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +7 -3
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +3 -4
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +10 -4
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/pages.js +2 -1
- package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +35 -2
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js +100 -3
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +24 -3
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
- package/.server/server/plugins/engine/types/enums.d.ts +3 -3
- package/.server/server/plugins/engine/types/enums.js +5 -4
- package/.server/server/plugins/engine/types/enums.js.map +1 -1
- package/.server/server/plugins/engine/types/schema.js +10 -3
- package/.server/server/plugins/engine/types/schema.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +18 -2
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/unavailable-response.js +5 -2
- package/.server/server/plugins/engine/unavailable-response.js.map +1 -1
- package/.server/server/plugins/engine/views/components/_location-field-base.html +4 -2
- package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -1
- package/.server/server/plugins/engine/views/components/geospatialfield.html +1 -0
- package/.server/server/plugins/engine/views/components/multilinetextfield.html +12 -1
- package/.server/server/plugins/engine/views/components/osgridreffield.html +4 -1
- package/.server/server/plugins/engine/views/components/paymentfield.html +1 -1
- package/.server/server/plugins/engine/views/components/ukaddressfield.html +1 -1
- package/.server/server/plugins/engine/views/file-upload.html +1 -1
- package/.server/server/plugins/engine/views/partials/preview-banner.html +3 -1
- package/.server/server/plugins/engine/views/unavailable.html +14 -11
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.d.ts +9 -0
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js +17 -0
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
- package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
- package/.server/server/plugins/nunjucks/filters/index.js +1 -0
- package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
- package/.server/server/plugins/payment/helper.d.ts +11 -1
- package/.server/server/plugins/payment/helper.js +18 -2
- package/.server/server/plugins/payment/helper.js.map +1 -1
- package/.server/server/plugins/payment/helper.test.js +2 -1
- package/.server/server/plugins/payment/helper.test.js.map +1 -1
- package/.server/server/plugins/payment/service.d.ts +2 -1
- package/.server/server/plugins/payment/service.js +5 -2
- package/.server/server/plugins/payment/service.js.map +1 -1
- package/.server/server/plugins/payment/service.test.js +7 -3
- package/.server/server/plugins/payment/service.test.js.map +1 -1
- package/.server/server/plugins/payment/types.d.ts +4 -0
- package/.server/server/plugins/payment/types.js +1 -0
- package/.server/server/plugins/payment/types.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/models/index.d.ts +249 -3
- package/.server/server/plugins/postcode-lookup/models/index.js +87 -33
- package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/routes/index.d.ts +15 -1
- package/.server/server/plugins/postcode-lookup/routes/index.js +47 -15
- package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/routes/index.test.js +84 -0
- package/.server/server/plugins/postcode-lookup/routes/index.test.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/types.d.ts +12 -0
- package/.server/server/plugins/postcode-lookup/types.js +6 -1
- package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/.server/server/utils/type-utils.d.ts +1 -2
- package/.server/server/utils/type-utils.js +0 -3
- package/.server/server/utils/type-utils.js.map +1 -1
- package/.server/server/utils/utils.d.ts +6 -0
- package/.server/server/utils/utils.js +18 -1
- package/.server/server/utils/utils.js.map +1 -1
- package/.server/server/utils/utils.test.js +21 -1
- package/.server/server/utils/utils.test.js.map +1 -1
- package/package.json +20 -5
- package/src/client/javascripts/file-upload.js +11 -3
- package/src/client/javascripts/geospatial-map.js +176 -81
- package/src/client/javascripts/govuk.js +2 -0
- package/src/client/javascripts/location-map.js +60 -4
- package/src/client/javascripts/map-constants.js +3 -0
- package/src/client/javascripts/map.js +47 -0
- package/src/client/javascripts/maps.js +5 -0
- package/src/client/javascripts/shared.js +1 -4
- package/src/client/javascripts/sssi-dataset.js +39 -41
- package/src/client/stylesheets/maps.scss +4 -0
- package/src/client/stylesheets/shared.scss +1 -5
- package/src/server/constants.js +2 -0
- package/src/server/plugins/engine/__stubs__/definitions.ts +155 -0
- package/src/server/plugins/engine/components/AutocompleteField.ts +13 -0
- package/src/server/plugins/engine/components/CheckboxesField.ts +38 -5
- package/src/server/plugins/engine/components/ComponentBase.ts +2 -0
- package/src/server/plugins/engine/components/ComponentCollection.ts +16 -11
- package/src/server/plugins/engine/components/DatePartsField.ts +20 -9
- package/src/server/plugins/engine/components/DeclarationField.ts +7 -6
- package/src/server/plugins/engine/components/EastingNorthingField.ts +185 -89
- package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
- package/src/server/plugins/engine/components/FileUploadField.ts +44 -3
- package/src/server/plugins/engine/components/FormComponent.ts +6 -5
- package/src/server/plugins/engine/components/GeospatialField.ts +47 -9
- package/src/server/plugins/engine/components/LatLongField.ts +128 -58
- package/src/server/plugins/engine/components/LocationFieldBase.ts +30 -7
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +28 -14
- package/src/server/plugins/engine/components/Markdown.ts +2 -3
- package/src/server/plugins/engine/components/MonthYearField.ts +20 -15
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +9 -3
- package/src/server/plugins/engine/components/NumberField.ts +21 -1
- package/src/server/plugins/engine/components/OsGridRefField.ts +22 -3
- package/src/server/plugins/engine/components/PaymentField.ts +15 -5
- package/src/server/plugins/engine/components/UkAddressField.ts +30 -7
- package/src/server/plugins/engine/components/YesNoField.ts +17 -9
- package/src/server/plugins/engine/components/helpers/components.ts +3 -3
- package/src/server/plugins/engine/components/helpers/geospatial.ts +84 -21
- package/src/server/plugins/engine/components/helpers/index.ts +19 -0
- package/src/server/plugins/engine/components/types.ts +1 -0
- package/src/server/plugins/engine/errors.ts +78 -0
- package/src/server/plugins/engine/form-availability.ts +8 -2
- package/src/server/plugins/engine/form-context.ts +4 -2
- package/src/server/plugins/engine/helpers.ts +52 -5
- package/src/server/plugins/engine/i18n/buildValidationMessages.ts +16 -8
- package/src/server/plugins/engine/i18n/createFormTranslator.ts +62 -11
- package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +7 -1
- package/src/server/plugins/engine/i18n/form.ts +54 -0
- package/src/server/plugins/engine/i18n/languages.ts +19 -0
- package/src/server/plugins/engine/i18n/translations/cy.json +192 -9
- package/src/server/plugins/engine/i18n/translations/en-GB.json +125 -7
- package/src/server/plugins/engine/i18n/types.ts +3 -0
- package/src/server/plugins/engine/index.ts +7 -0
- package/src/server/plugins/engine/models/FormModel.ts +46 -23
- package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
- package/src/server/plugins/engine/models/types.ts +31 -0
- package/src/server/plugins/engine/models/unavailable-view-model.ts +26 -5
- package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +18 -7
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -1
- package/src/server/plugins/engine/outputFormatters/machine/v2.ts +3 -0
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +60 -9
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +10 -5
- package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +2 -2
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
- package/src/server/plugins/engine/pageControllers/helpers/pages.ts +2 -1
- package/src/server/plugins/engine/pageControllers/helpers/submission.ts +143 -4
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +29 -4
- package/src/server/plugins/engine/types/enums.ts +4 -3
- package/src/server/plugins/engine/types/schema.ts +17 -4
- package/src/server/plugins/engine/types.ts +19 -1
- package/src/server/plugins/engine/unavailable-response.ts +6 -2
- package/src/server/plugins/engine/views/components/_location-field-base.html +4 -2
- package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
- package/src/server/plugins/engine/views/components/geospatialfield.html +1 -0
- package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -1
- package/src/server/plugins/engine/views/components/osgridreffield.html +4 -1
- package/src/server/plugins/engine/views/components/paymentfield.html +1 -1
- package/src/server/plugins/engine/views/components/ukaddressfield.html +1 -1
- package/src/server/plugins/engine/views/file-upload.html +1 -1
- package/src/server/plugins/engine/views/partials/preview-banner.html +3 -1
- package/src/server/plugins/engine/views/unavailable.html +14 -11
- package/src/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
- package/src/server/plugins/nunjucks/filters/index.js +1 -0
- package/src/server/plugins/payment/helper.js +22 -2
- package/src/server/plugins/payment/service.js +6 -2
- package/src/server/plugins/payment/types.js +1 -0
- package/src/server/plugins/postcode-lookup/models/index.js +75 -43
- package/src/server/plugins/postcode-lookup/routes/index.js +73 -16
- package/src/server/plugins/postcode-lookup/types.js +6 -1
- package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/src/server/utils/type-utils.ts +1 -11
- package/src/server/utils/utils.js +19 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Boom","StatusCodes","Joi","EXTERNAL_STATE_APPENDAGE","JOURNEY_BASE_URL","createDetailsPayloadSchema","createManualPayloadSchema","createSelectPayloadSchema","detailsViewModel","manualViewModel","selectViewModel","stepSchema","steps","service","viewName","getSessionState","request","state","yar","get","badRequest","flashComponentState","componentName","address","addressState","addressLine1","addressLine2","town","county","postcode","uprn","undefined","appendage","component","data","flash","dispatch","h","initial","details","postcodeQuery","buildingNameQuery","set","query","step","redirect","code","SEE_OTHER","getRoutes","options","getRoute","postRoute","method","path","handler","session","model","manual","view","validate","object","keys","string","allow","optional","payload","detailsPostHandler","select","selectPostHandler","manualPostHandler","unknown","ordnanceSurveyApiKey","apiKey","language","value","error","addresses","searchByUPRN","property","at","internal","sourceUrl","abortEarly"],"sources":["../../../../../src/server/plugins/postcode-lookup/routes/index.js"],"sourcesContent":["import Boom from '@hapi/boom'\nimport { StatusCodes } from 'http-status-codes'\nimport Joi from 'joi'\n\nimport { EXTERNAL_STATE_APPENDAGE } from '~/src/server/constants.js'\nimport {\n JOURNEY_BASE_URL,\n createDetailsPayloadSchema,\n createManualPayloadSchema,\n createSelectPayloadSchema,\n detailsViewModel,\n manualViewModel,\n selectViewModel,\n stepSchema,\n steps\n} from '~/src/server/plugins/postcode-lookup/models/index.js'\nimport * as service from '~/src/server/plugins/postcode-lookup/service.js'\n\nconst viewName = 'postcode-lookup-details'\n\n/**\n * Get the session state associated with this journey\n * @param {PostcodeLookupRequest} request\n */\nfunction getSessionState(request) {\n /**\n * @type {PostcodeLookupSessionData | null | undefined}\n */\n const state = request.yar.get(JOURNEY_BASE_URL)\n\n if (!state) {\n throw Boom.badRequest(\n `No postcode lookup data found for ${JOURNEY_BASE_URL}`\n )\n }\n\n return state\n}\n\n/**\n * Flash form component state\n * @param {PostcodeLookupRequest} request - the request\n * @param {string} componentName - the component name\n * @param {Address | PostcodeLookupManualPayload} address - the address from ordnance survey or manually entered\n */\nfunction flashComponentState(request, componentName, address) {\n const addressState = {\n addressLine1: address.addressLine1,\n addressLine2: address.addressLine2,\n town: address.town,\n county: address.county,\n postcode: address.postcode,\n uprn: 'uprn' in address && address.uprn ? address.uprn : undefined\n }\n\n /**\n * @type {ExternalStateAppendage}\n */\n const appendage = {\n component: componentName,\n data: addressState\n }\n\n request.yar.flash(EXTERNAL_STATE_APPENDAGE, appendage, true)\n}\n\n/**\n * Initialises and dispatches the request to the postcode lookup journey\n * @param {FormRequestPayload} request - the source page\n * @param {FormResponseToolkit} h - the source page\n * @param {PostcodeLookupDispatchData} initial - the source data\n */\nexport function dispatch(request, h, initial) {\n /**\n * @type {PostcodeLookupSessionData}\n */\n const data = {\n initial,\n details: { postcodeQuery: '', buildingNameQuery: '' }\n }\n\n request.yar.set(JOURNEY_BASE_URL, data)\n\n const query = initial.step ? `?step=${initial.step}` : ''\n\n return h.redirect(`${JOURNEY_BASE_URL}${query}`).code(StatusCodes.SEE_OTHER)\n}\n\n/**\n * Gets the postcode lookup routes\n * @param {PostcodeLookupConfiguration} options - ordnance survey api key\n */\nexport function getRoutes(options) {\n return [getRoute(), postRoute(options)]\n}\n\n/**\n * @returns {ServerRoute<PostcodeLookupGetRequestRefs>}\n */\nfunction getRoute() {\n return {\n method: 'GET',\n path: JOURNEY_BASE_URL,\n handler(request, h) {\n const { query } = request\n const { step } = query\n const session = getSessionState(request)\n\n const model =\n step === steps.manual\n ? manualViewModel(session)\n : detailsViewModel(session)\n\n return h.view(viewName, model)\n },\n options: {\n validate: {\n query: Joi.object()\n .keys({\n step: Joi.string().allow(steps.details, steps.manual).optional()\n })\n .optional()\n }\n }\n }\n}\n\n/**\n * @param {PostcodeLookupConfiguration} options\n * @returns {ServerRoute<PostcodeLookupPostRequestRefs>}\n */\nfunction postRoute(options) {\n return {\n method: 'POST',\n path: JOURNEY_BASE_URL,\n async handler(request, h) {\n const { payload } = request\n const { step } = payload\n\n switch (step) {\n case steps.details: {\n return detailsPostHandler(request, h, options)\n }\n case steps.select: {\n return selectPostHandler(request, h, options)\n }\n case steps.manual: {\n return manualPostHandler(request, h)\n }\n default:\n throw Boom.badRequest(`Invalid step ${step}`)\n }\n },\n options: {\n validate: {\n payload: Joi.object()\n .keys({\n step: stepSchema\n })\n .unknown(true)\n }\n }\n }\n}\n\n/**\n * Post handler for the details step\n * @param {PostcodeLookupPostRequest} request\n * @param {ResponseToolkit<PostcodeLookupPostRequestRefs>} h\n * @param {PostcodeLookupConfiguration} options\n */\nasync function detailsPostHandler(request, h, options) {\n const session = getSessionState(request)\n const { ordnanceSurveyApiKey: apiKey } = options\n const language = session.initial.language ?? 'en-GB'\n const { value: details, error } = createDetailsPayloadSchema(\n language\n ).validate(request.payload)\n\n let model\n\n if (error) {\n model = detailsViewModel(session, details, error)\n\n return h.view(viewName, model)\n }\n\n const { postcodeQuery, buildingNameQuery } = details\n session.details = { postcodeQuery, buildingNameQuery }\n\n // Store the updated session\n request.yar.set(JOURNEY_BASE_URL, session)\n\n model = await selectViewModel({ session, apiKey })\n\n return h.view(viewName, model)\n}\n\n/**\n * Post handler for the select step\n * @param {PostcodeLookupPostRequest} request\n * @param {ResponseToolkit<PostcodeLookupPostRequestRefs>} h\n * @param {PostcodeLookupConfiguration} options\n */\nasync function selectPostHandler(request, h, options) {\n const session = getSessionState(request)\n const { ordnanceSurveyApiKey: apiKey } = options\n const language = session.initial.language ?? 'en-GB'\n const { value: select, error } = createSelectPayloadSchema(language).validate(\n request.payload\n )\n\n if (error) {\n const model = await selectViewModel({ session, apiKey }, select, error)\n\n return h.view(viewName, model)\n }\n\n const addresses = await service.searchByUPRN(select.uprn, apiKey)\n const property = addresses.at(0)\n\n if (!property) {\n throw Boom.internal(`UPRN ${property} not found`)\n }\n\n const { componentName, sourceUrl } = session.initial\n flashComponentState(request, componentName, property)\n\n // Redirect back to the source form page\n return h.redirect(sourceUrl).code(StatusCodes.SEE_OTHER)\n}\n\n/**\n * Post handler for the manual step\n * @param {PostcodeLookupPostRequest} request\n * @param {ResponseToolkit<PostcodeLookupPostRequestRefs>} h\n */\nfunction manualPostHandler(request, h) {\n const session = getSessionState(request)\n const language = session.initial.language ?? 'en-GB'\n\n const { value: manual, error } = createManualPayloadSchema(language).validate(\n request.payload,\n {\n abortEarly: false\n }\n )\n\n if (error) {\n const model = manualViewModel(session, manual, error)\n\n return h.view(viewName, model)\n }\n\n const { componentName, sourceUrl } = session.initial\n flashComponentState(request, componentName, manual)\n\n // Redirect back to the source form page\n return h.redirect(sourceUrl).code(StatusCodes.SEE_OTHER)\n}\n\n/**\n * @import { ResponseToolkit, ServerRoute } from '@hapi/hapi'\n * @import { PostcodeLookupManualPayload, PostcodeLookupDetailsPayload, PostcodeLookupSelectPayload, Address, PostcodeLookupGetRequestRefs, PostcodeLookupPostRequestRefs, PostcodeLookupRequest, PostcodeLookupPostRequest, PostcodeLookupConfiguration, PostcodeLookupDispatchData, PostcodeLookupSessionData } from '~/src/server/plugins/postcode-lookup/types.js'\n * @import { FormRequestPayload, FormResponseToolkit } from '~/src/server/routes/types.js'\n * @import { ExternalStateAppendage } from '~/src/server/plugins/engine/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Boom","StatusCodes","Joi","EXTERNAL_STATE_APPENDAGE","getCachedPluginTranslator","JOURNEY_BASE_URL","createDetailsPayloadSchema","createManualPayloadSchema","createSelectPayloadSchema","detailsViewModel","manualViewModel","selectViewModel","stepSchema","steps","service","resolveLanguage","viewName","getSessionState","request","state","yar","get","badRequest","flashComponentState","componentName","address","addressState","addressLine1","addressLine2","town","county","postcode","uprn","undefined","appendage","component","data","flash","getDispatchTranslator","initial","language","formId","formStatus","set","typedReq","lang","translator","id","dispatch","h","details","postcodeQuery","buildingNameQuery","query","step","redirect","code","SEE_OTHER","getRoutes","options","getRoute","postRoute","method","path","handler","session","model","manual","view","validate","object","keys","string","allow","optional","payload","detailsPostHandler","select","selectPostHandler","manualPostHandler","unknown","ordnanceSurveyApiKey","apiKey","value","error","addresses","searchByUPRN","property","at","internal","sourceUrl","abortEarly"],"sources":["../../../../../src/server/plugins/postcode-lookup/routes/index.js"],"sourcesContent":["import Boom from '@hapi/boom'\nimport { StatusCodes } from 'http-status-codes'\nimport Joi from 'joi'\n\nimport { EXTERNAL_STATE_APPENDAGE } from '~/src/server/constants.js'\nimport { getCachedPluginTranslator } from '~/src/server/plugins/engine/i18n/form.js'\nimport {\n JOURNEY_BASE_URL,\n createDetailsPayloadSchema,\n createManualPayloadSchema,\n createSelectPayloadSchema,\n detailsViewModel,\n manualViewModel,\n selectViewModel,\n stepSchema,\n steps\n} from '~/src/server/plugins/postcode-lookup/models/index.js'\nimport * as service from '~/src/server/plugins/postcode-lookup/service.js'\nimport { resolveLanguage } from '~/src/server/utils/utils.js'\n\nconst viewName = 'postcode-lookup-details'\n\n/**\n * Get the session state associated with this journey\n * @param {PostcodeLookupRequest} request\n */\nexport function getSessionState(request) {\n /**\n * @type {PostcodeLookupSessionData | null | undefined}\n */\n const state = request.yar.get(JOURNEY_BASE_URL)\n\n if (!state) {\n throw Boom.badRequest(\n `No postcode lookup data found for ${JOURNEY_BASE_URL}`\n )\n }\n\n return state\n}\n\n/**\n * Flash form component state\n * @param {PostcodeLookupRequest} request - the request\n * @param {string} componentName - the component name\n * @param {Address | PostcodeLookupManualPayload} address - the address from ordnance survey or manually entered\n */\nfunction flashComponentState(request, componentName, address) {\n const addressState = {\n addressLine1: address.addressLine1,\n addressLine2: address.addressLine2,\n town: address.town,\n county: address.county,\n postcode: address.postcode,\n uprn: 'uprn' in address && address.uprn ? address.uprn : undefined\n }\n\n /**\n * @type {ExternalStateAppendage}\n */\n const appendage = {\n component: componentName,\n data: addressState\n }\n\n request.yar.flash(EXTERNAL_STATE_APPENDAGE, appendage, true)\n}\n/**\n * Get a cached translator, or create a new one if not in the cache\n * @param {PostcodeLookupRequest} request\n * @param {PostcodeLookupDispatchData} initial\n * @param { string | string[] | undefined } language\n */\nexport async function getDispatchTranslator(request, initial, language) {\n const { formId, formStatus } = initial\n\n // Override language if passed as a query param\n if (language) {\n request.yar.set('language', language)\n }\n\n const typedReq = /** @type {AnyFormRequest} */ (/** @type {any} */ (request))\n const lang = resolveLanguage(typedReq)\n\n const translator = await getCachedPluginTranslator(\n typedReq,\n /** @type {FormMetadata} */ ({ id: formId }),\n formStatus,\n lang\n )\n\n return translator\n}\n\n/**\n * Initialises and dispatches the request to the postcode lookup journey\n * @param {FormRequestPayload} request - the source page\n * @param {FormResponseToolkit} h - the source page\n * @param {PostcodeLookupDispatchData} initial - the source data\n */\nexport function dispatch(request, h, initial) {\n /**\n * @type {PostcodeLookupSessionData}\n */\n const data = {\n initial,\n details: { postcodeQuery: '', buildingNameQuery: '' }\n }\n\n request.yar.set(JOURNEY_BASE_URL, data)\n\n const query = initial.step ? `?step=${initial.step}` : ''\n\n return h.redirect(`${JOURNEY_BASE_URL}${query}`).code(StatusCodes.SEE_OTHER)\n}\n\n/**\n * Gets the postcode lookup routes\n * @param {PostcodeLookupConfiguration} options - ordnance survey api key\n */\nexport function getRoutes(options) {\n return [getRoute(), postRoute(options)]\n}\n\n/**\n * @returns {ServerRoute<PostcodeLookupGetRequestRefs>}\n */\nfunction getRoute() {\n return {\n method: 'GET',\n path: JOURNEY_BASE_URL,\n async handler(request, h) {\n const { query } = request\n const { step, language } = query\n const session = getSessionState(request)\n\n const translator = await getDispatchTranslator(\n request,\n session.initial,\n language\n )\n\n const model =\n step === steps.manual\n ? manualViewModel(session, translator)\n : detailsViewModel(session, translator)\n\n return h.view(viewName, model)\n },\n options: {\n validate: {\n query: Joi.object()\n .keys({\n step: Joi.string().allow(steps.details, steps.manual).optional(),\n language: Joi.string().allow('en-GB', 'cy').optional()\n })\n .optional()\n }\n }\n }\n}\n\n/**\n * @param {PostcodeLookupConfiguration} options\n * @returns {ServerRoute<PostcodeLookupPostRequestRefs>}\n */\nfunction postRoute(options) {\n return {\n method: 'POST',\n path: JOURNEY_BASE_URL,\n async handler(request, h) {\n const { payload } = request\n const { step } = payload\n\n switch (step) {\n case steps.details: {\n return detailsPostHandler(request, h, options)\n }\n case steps.select: {\n return selectPostHandler(request, h, options)\n }\n case steps.manual: {\n return manualPostHandler(request, h)\n }\n default:\n throw Boom.badRequest(`Invalid step ${step}`)\n }\n },\n options: {\n validate: {\n payload: Joi.object()\n .keys({\n step: stepSchema\n })\n .unknown(true)\n }\n }\n }\n}\n\n/**\n * Post handler for the details step\n * @param {PostcodeLookupPostRequest} request\n * @param {ResponseToolkit<PostcodeLookupPostRequestRefs>} h\n * @param {PostcodeLookupConfiguration} options\n */\nasync function detailsPostHandler(request, h, options) {\n const session = getSessionState(request)\n const { ordnanceSurveyApiKey: apiKey } = options\n const translator = await getDispatchTranslator(\n request,\n session.initial,\n request.query.language\n )\n const language = translator.language\n\n const { value: details, error } = createDetailsPayloadSchema(\n language\n ).validate(request.payload)\n\n let model\n\n if (error) {\n model = detailsViewModel(session, translator, details, error)\n\n return h.view(viewName, model)\n }\n\n const { postcodeQuery, buildingNameQuery } = details\n session.details = { postcodeQuery, buildingNameQuery }\n\n // Store the updated session\n request.yar.set(JOURNEY_BASE_URL, session)\n\n model = await selectViewModel({ session, apiKey }, translator)\n\n return h.view(viewName, model)\n}\n\n/**\n * Post handler for the select step\n * @param {PostcodeLookupPostRequest} request\n * @param {ResponseToolkit<PostcodeLookupPostRequestRefs>} h\n * @param {PostcodeLookupConfiguration} options\n */\nasync function selectPostHandler(request, h, options) {\n const session = getSessionState(request)\n const { ordnanceSurveyApiKey: apiKey } = options\n const translator = await getDispatchTranslator(\n request,\n session.initial,\n request.query.language\n )\n const language = translator.language\n const { value: select, error } = createSelectPayloadSchema(language).validate(\n request.payload\n )\n\n if (error) {\n const model = await selectViewModel(\n { session, apiKey },\n translator,\n select,\n error\n )\n\n return h.view(viewName, model)\n }\n\n const addresses = await service.searchByUPRN(select.uprn, apiKey)\n const property = addresses.at(0)\n\n if (!property) {\n throw Boom.internal(`UPRN ${property} not found`)\n }\n\n const { componentName, sourceUrl } = session.initial\n flashComponentState(request, componentName, property)\n\n // Redirect back to the source form page\n return h.redirect(sourceUrl).code(StatusCodes.SEE_OTHER)\n}\n\n/**\n * Post handler for the manual step\n * @param {PostcodeLookupPostRequest} request\n * @param {ResponseToolkit<PostcodeLookupPostRequestRefs>} h\n */\nasync function manualPostHandler(request, h) {\n const session = getSessionState(request)\n const translator = await getDispatchTranslator(\n request,\n session.initial,\n request.query.language\n )\n const language = translator.language\n\n const { value: manual, error } = createManualPayloadSchema(language).validate(\n request.payload,\n {\n abortEarly: false\n }\n )\n\n if (error) {\n const model = manualViewModel(session, translator, manual, error)\n\n return h.view(viewName, model)\n }\n\n const { componentName, sourceUrl } = session.initial\n flashComponentState(request, componentName, manual)\n\n // Redirect back to the source form page\n return h.redirect(sourceUrl).code(StatusCodes.SEE_OTHER)\n}\n\n/**\n * @import { ResponseToolkit, ServerRoute } from '@hapi/hapi'\n * @import { FormMetadata } from '@defra/forms-model'\n * @import { PostcodeLookupManualPayload, Address, PostcodeLookupGetRequestRefs, PostcodeLookupPostRequestRefs, PostcodeLookupRequest, PostcodeLookupPostRequest, PostcodeLookupConfiguration, PostcodeLookupDispatchData, PostcodeLookupSessionData } from '~/src/server/plugins/postcode-lookup/types.js'\n * @import { FormRequestPayload, FormResponseToolkit } from '~/src/server/routes/types.js'\n * @import { AnyFormRequest, ExternalStateAppendage } from '~/src/server/plugins/engine/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { EN_GB } from "../../../constants.js";
|
|
2
|
+
import { getCachedPluginTranslator } from "../../engine/i18n/form.js";
|
|
3
|
+
import { getDispatchTranslator, getSessionState } from "./index.js";
|
|
4
|
+
jest.mock("../../engine/i18n/form.ts");
|
|
5
|
+
describe('postcode-lookup routes', () => {
|
|
6
|
+
describe('getSessionState', () => {
|
|
7
|
+
test('should throw if missing state', () => {
|
|
8
|
+
const mockRequest = /** @type { PostcodeLookupRequest} */
|
|
9
|
+
/** @type {any} */
|
|
10
|
+
{
|
|
11
|
+
yar: {
|
|
12
|
+
get: jest.fn()
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
expect(() => getSessionState(mockRequest)).toThrow('No postcode lookup data found for /postcode-lookup');
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe('getDispatchTranslator', () => {
|
|
19
|
+
test('should get default translator', async () => {
|
|
20
|
+
const mockSet = jest.fn();
|
|
21
|
+
const mockRequest = /** @type { PostcodeLookupRequest} */
|
|
22
|
+
/** @type {any} */
|
|
23
|
+
{
|
|
24
|
+
yar: {
|
|
25
|
+
get: jest.fn(),
|
|
26
|
+
set: mockSet
|
|
27
|
+
},
|
|
28
|
+
query: {},
|
|
29
|
+
server: {
|
|
30
|
+
// eslint-disable-next-line no-useless-computed-key
|
|
31
|
+
plugins: {
|
|
32
|
+
['forms-engine-plugin']: {
|
|
33
|
+
getLanguage: () => 'en-GB'
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const mockTranslator = /** @type {Translator} */{
|
|
39
|
+
language: EN_GB
|
|
40
|
+
};
|
|
41
|
+
jest.mocked(getCachedPluginTranslator).mockResolvedValue(mockTranslator);
|
|
42
|
+
const initial = /** @type {PostcodeLookupDispatchData} */{};
|
|
43
|
+
const res = await getDispatchTranslator(mockRequest, initial, EN_GB);
|
|
44
|
+
expect(mockSet).toHaveBeenCalledWith('language', EN_GB);
|
|
45
|
+
expect(res).toBeDefined();
|
|
46
|
+
expect(res.language).toBe(EN_GB);
|
|
47
|
+
});
|
|
48
|
+
test('should get welsh translator', async () => {
|
|
49
|
+
const mockSet = jest.fn();
|
|
50
|
+
const mockRequest = /** @type { PostcodeLookupRequest} */
|
|
51
|
+
/** @type {any} */
|
|
52
|
+
{
|
|
53
|
+
yar: {
|
|
54
|
+
get: jest.fn().mockResolvedValueOnce('cy'),
|
|
55
|
+
set: mockSet
|
|
56
|
+
},
|
|
57
|
+
query: {},
|
|
58
|
+
server: {
|
|
59
|
+
// eslint-disable-next-line no-useless-computed-key
|
|
60
|
+
plugins: {
|
|
61
|
+
['forms-engine-plugin']: {
|
|
62
|
+
getLanguage: () => 'en-GB'
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const mockTranslator = /** @type {Translator} */{
|
|
68
|
+
language: 'cy'
|
|
69
|
+
};
|
|
70
|
+
jest.mocked(getCachedPluginTranslator).mockResolvedValue(mockTranslator);
|
|
71
|
+
const initial = /** @type {PostcodeLookupDispatchData} */{};
|
|
72
|
+
const res = await getDispatchTranslator(mockRequest, initial, 'cy');
|
|
73
|
+
expect(mockSet).toHaveBeenCalledWith('language', 'cy');
|
|
74
|
+
expect(res).toBeDefined();
|
|
75
|
+
expect(res.language).toBe('cy');
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @import { PostcodeLookupDispatchData, PostcodeLookupRequest } from '../../../../server/plugins/postcode-lookup/types.js'
|
|
82
|
+
* @import { Translator } from '../../../../server/plugins/engine/i18n/types.js'
|
|
83
|
+
*/
|
|
84
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["EN_GB","getCachedPluginTranslator","getDispatchTranslator","getSessionState","jest","mock","describe","test","mockRequest","yar","get","fn","expect","toThrow","mockSet","set","query","server","plugins","getLanguage","mockTranslator","language","mocked","mockResolvedValue","initial","res","toHaveBeenCalledWith","toBeDefined","toBe","mockResolvedValueOnce"],"sources":["../../../../../src/server/plugins/postcode-lookup/routes/index.test.js"],"sourcesContent":["import { EN_GB } from '~/src/server/constants.js'\nimport { getCachedPluginTranslator } from '~/src/server/plugins/engine/i18n/form.js'\nimport {\n getDispatchTranslator,\n getSessionState\n} from '~/src/server/plugins/postcode-lookup/routes/index.js'\n\njest.mock('~/src/server/plugins/engine/i18n/form.ts')\n\ndescribe('postcode-lookup routes', () => {\n describe('getSessionState', () => {\n test('should throw if missing state', () => {\n const mockRequest = /** @type { PostcodeLookupRequest} */ (\n /** @type {any} */\n ({\n yar: {\n get: jest.fn()\n }\n })\n )\n expect(() => getSessionState(mockRequest)).toThrow(\n 'No postcode lookup data found for /postcode-lookup'\n )\n })\n })\n\n describe('getDispatchTranslator', () => {\n test('should get default translator', async () => {\n const mockSet = jest.fn()\n const mockRequest = /** @type { PostcodeLookupRequest} */ (\n /** @type {any} */\n ({\n yar: {\n get: jest.fn(),\n set: mockSet\n },\n query: {},\n server: {\n // eslint-disable-next-line no-useless-computed-key\n plugins: { ['forms-engine-plugin']: { getLanguage: () => 'en-GB' } }\n }\n })\n )\n const mockTranslator = /** @type {Translator} */ ({ language: EN_GB })\n jest.mocked(getCachedPluginTranslator).mockResolvedValue(mockTranslator)\n const initial = /** @type {PostcodeLookupDispatchData} */ ({})\n const res = await getDispatchTranslator(mockRequest, initial, EN_GB)\n expect(mockSet).toHaveBeenCalledWith('language', EN_GB)\n expect(res).toBeDefined()\n expect(res.language).toBe(EN_GB)\n })\n\n test('should get welsh translator', async () => {\n const mockSet = jest.fn()\n const mockRequest = /** @type { PostcodeLookupRequest} */ (\n /** @type {any} */\n ({\n yar: {\n get: jest.fn().mockResolvedValueOnce('cy'),\n set: mockSet\n },\n query: {},\n server: {\n // eslint-disable-next-line no-useless-computed-key\n plugins: { ['forms-engine-plugin']: { getLanguage: () => 'en-GB' } }\n }\n })\n )\n const mockTranslator = /** @type {Translator} */ ({ language: 'cy' })\n jest.mocked(getCachedPluginTranslator).mockResolvedValue(mockTranslator)\n const initial = /** @type {PostcodeLookupDispatchData} */ ({})\n const res = await getDispatchTranslator(mockRequest, initial, 'cy')\n expect(mockSet).toHaveBeenCalledWith('language', 'cy')\n expect(res).toBeDefined()\n expect(res.language).toBe('cy')\n })\n })\n})\n\n/**\n * @import { PostcodeLookupDispatchData, PostcodeLookupRequest } from '~/src/server/plugins/postcode-lookup/types.js'\n * @import { Translator } from '~/src/server/plugins/engine/i18n/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,12 +7,19 @@ export type PostcodeLookupDispatchArgs = {
|
|
|
7
7
|
};
|
|
8
8
|
export type PostcodeLookupDispatchData = {
|
|
9
9
|
sourceUrl: string;
|
|
10
|
+
formId: string;
|
|
10
11
|
formName: string;
|
|
12
|
+
formStatus: FormStatus;
|
|
13
|
+
componentId: string;
|
|
11
14
|
componentName: string;
|
|
12
15
|
componentTitle: string;
|
|
13
16
|
componentHint?: string;
|
|
14
17
|
step?: string;
|
|
15
18
|
language?: string;
|
|
19
|
+
languages?: {
|
|
20
|
+
name: string;
|
|
21
|
+
code: string;
|
|
22
|
+
}[];
|
|
16
23
|
};
|
|
17
24
|
export type PostcodeLookupSessionData = {
|
|
18
25
|
initial: PostcodeLookupDispatchData;
|
|
@@ -39,6 +46,10 @@ export type PostcodeLookupQuery = {
|
|
|
39
46
|
* - step
|
|
40
47
|
*/
|
|
41
48
|
step?: string | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* - language
|
|
51
|
+
*/
|
|
52
|
+
language?: string | undefined;
|
|
42
53
|
};
|
|
43
54
|
export type PostcodeLookupDetailsPayloadProperties = {
|
|
44
55
|
/**
|
|
@@ -202,4 +213,5 @@ export type DeliveryPointAddressResult = {
|
|
|
202
213
|
*/
|
|
203
214
|
results?: DeliveryPointAddressItem[] | undefined;
|
|
204
215
|
};
|
|
216
|
+
import type { FormStatus } from '@defra/forms-model';
|
|
205
217
|
import type { Request } from '@hapi/hapi';
|
|
@@ -14,12 +14,16 @@
|
|
|
14
14
|
/**
|
|
15
15
|
* @typedef {{
|
|
16
16
|
* sourceUrl: string,
|
|
17
|
+
* formId: string
|
|
17
18
|
* formName: string
|
|
19
|
+
* formStatus: FormStatus
|
|
20
|
+
* componentId: string
|
|
18
21
|
* componentName: string
|
|
19
22
|
* componentTitle: string,
|
|
20
23
|
* componentHint?: string
|
|
21
24
|
* step?: string
|
|
22
25
|
* language?: string
|
|
26
|
+
* languages?: { name: string, code: string}[]
|
|
23
27
|
* }} PostcodeLookupDispatchData
|
|
24
28
|
*/
|
|
25
29
|
|
|
@@ -49,6 +53,7 @@
|
|
|
49
53
|
* Postcode lookup query params
|
|
50
54
|
* @typedef {object} PostcodeLookupQuery
|
|
51
55
|
* @property {string} [step] - step
|
|
56
|
+
* @property {string} [language] - language
|
|
52
57
|
*/
|
|
53
58
|
|
|
54
59
|
/**
|
|
@@ -140,6 +145,6 @@
|
|
|
140
145
|
|
|
141
146
|
/**
|
|
142
147
|
* @import { Request } from '@hapi/hapi'
|
|
143
|
-
* @import {
|
|
148
|
+
* @import { FormStatus } from '@defra/forms-model'
|
|
144
149
|
*/
|
|
145
150
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/postcode-lookup/types.js"],"sourcesContent":["/**\n * @typedef {{\n * ordnanceSurveyApiKey: string\n * }} PostcodeLookupConfiguration\n */\n\n/**\n * @typedef {{\n * name: string\n * step?: string\n * }} PostcodeLookupDispatchArgs\n */\n\n/**\n * @typedef {{\n * sourceUrl: string,\n * formName: string\n * componentName: string\n * componentTitle: string,\n * componentHint?: string\n * step?: string\n * language?: string\n * }} PostcodeLookupDispatchData\n */\n\n/**\n * @typedef {{\n * initial: PostcodeLookupDispatchData\n * details: PostcodeLookupDetailsData\n * }} PostcodeLookupSessionData\n */\n\n//\n// Model types\n//\n\n/**\n * The postcode lookup details form view model data\n * @typedef {object} PostcodeLookupDetailsData\n * @property {string} postcodeQuery - postcode query\n * @property {string} buildingNameQuery - Building name or number query\n */\n\n//\n// Route types\n//\n\n/**\n * Postcode lookup query params\n * @typedef {object} PostcodeLookupQuery\n * @property {string} [step] - step\n */\n\n/**\n * @typedef {object} PostcodeLookupDetailsPayloadProperties\n * @property {string} step - step\n */\n\n/**\n * @typedef {PostcodeLookupDetailsData & PostcodeLookupDetailsPayloadProperties} PostcodeLookupDetailsPayload\n */\n\n/**\n * @typedef {object} PostcodeLookupSelectPayload\n * @property {string} step - step\n * @property {string} uprn - postcode\n */\n\n/**\n * Postcode lookup get request\n * @typedef {object} PostcodeLookupGetRequestRefs\n * @property {PostcodeLookupQuery} Query - Request query\n */\n\n/**\n * Postcode lookup post request\n * @typedef {object} PostcodeLookupPostRequestRefs\n * @property {PostcodeLookupDetailsPayload | PostcodeLookupSelectPayload} Payload - Request payload\n */\n\n/**\n * @typedef {PostcodeLookupGetRequestRefs | PostcodeLookupPostRequestRefs} PostcodeLookupRequestRefs\n * @typedef {Request<PostcodeLookupGetRequestRefs>} PostcodeLookupGetRequest\n * @typedef {Request<PostcodeLookupPostRequestRefs>} PostcodeLookupPostRequest\n * @typedef {PostcodeLookupGetRequest | PostcodeLookupPostRequest} PostcodeLookupRequest\n */\n\n/**\n * @typedef {object} PostcodeLookupManualPayload\n * @property {string} addressLine1 - The address line 1\n * @property {string} addressLine2 - The address line 2\n * @property {string} town - The address town or city\n * @property {string} county - The address county\n * @property {string} postcode - The address postcode\n */\n\n//\n// Service types\n//\n\n/**\n * @typedef {object} Address\n * @property {string} uprn - The unique property reference\n * @property {string} address - The full address\n * @property {string} addressLine1 - Address line 1\n * @property {string} addressLine2 - Address line 2\n * @property {string} town - Address town\n * @property {string} county - Address county\n * @property {string} postcode - Address postcode\n * @property {string} formatted - The full formatted address\n */\n\n/**\n * OS places address response\n * @typedef {object} DeliveryPointAddress\n * @property {string} UPRN - Unique property reference number\n * @property {string} UDPRN - Unique delivery point Reference Number\n * @property {string} ADDRESS - Address\n * @property {string} ORGANISATION_NAME - Organisation name\n * @property {string} SUB_BUILDING_NAME - Sub building name\n * @property {string} BUILDING_NAME - Building name\n * @property {string} BUILDING_NUMBER - Building number\n * @property {string} THOROUGHFARE_NAME - Throughfare name\n * @property {string} DEPENDENT_LOCALITY - Dependent locality\n * @property {string} POST_TOWN - Post town\n * @property {string} POSTCODE - Postcode\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressItem\n * @property {DeliveryPointAddress} DPA - Delivery point address\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressResult\n * @property {DeliveryPointAddressItem[]} [results] - Delivery point address results\n */\n\n/**\n * @import { Request } from '@hapi/hapi'\n * @import {
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/postcode-lookup/types.js"],"sourcesContent":["/**\n * @typedef {{\n * ordnanceSurveyApiKey: string\n * }} PostcodeLookupConfiguration\n */\n\n/**\n * @typedef {{\n * name: string\n * step?: string\n * }} PostcodeLookupDispatchArgs\n */\n\n/**\n * @typedef {{\n * sourceUrl: string,\n * formId: string\n * formName: string\n * formStatus: FormStatus\n * componentId: string\n * componentName: string\n * componentTitle: string,\n * componentHint?: string\n * step?: string\n * language?: string\n * languages?: { name: string, code: string}[]\n * }} PostcodeLookupDispatchData\n */\n\n/**\n * @typedef {{\n * initial: PostcodeLookupDispatchData\n * details: PostcodeLookupDetailsData\n * }} PostcodeLookupSessionData\n */\n\n//\n// Model types\n//\n\n/**\n * The postcode lookup details form view model data\n * @typedef {object} PostcodeLookupDetailsData\n * @property {string} postcodeQuery - postcode query\n * @property {string} buildingNameQuery - Building name or number query\n */\n\n//\n// Route types\n//\n\n/**\n * Postcode lookup query params\n * @typedef {object} PostcodeLookupQuery\n * @property {string} [step] - step\n * @property {string} [language] - language\n */\n\n/**\n * @typedef {object} PostcodeLookupDetailsPayloadProperties\n * @property {string} step - step\n */\n\n/**\n * @typedef {PostcodeLookupDetailsData & PostcodeLookupDetailsPayloadProperties} PostcodeLookupDetailsPayload\n */\n\n/**\n * @typedef {object} PostcodeLookupSelectPayload\n * @property {string} step - step\n * @property {string} uprn - postcode\n */\n\n/**\n * Postcode lookup get request\n * @typedef {object} PostcodeLookupGetRequestRefs\n * @property {PostcodeLookupQuery} Query - Request query\n */\n\n/**\n * Postcode lookup post request\n * @typedef {object} PostcodeLookupPostRequestRefs\n * @property {PostcodeLookupDetailsPayload | PostcodeLookupSelectPayload} Payload - Request payload\n */\n\n/**\n * @typedef {PostcodeLookupGetRequestRefs | PostcodeLookupPostRequestRefs} PostcodeLookupRequestRefs\n * @typedef {Request<PostcodeLookupGetRequestRefs>} PostcodeLookupGetRequest\n * @typedef {Request<PostcodeLookupPostRequestRefs>} PostcodeLookupPostRequest\n * @typedef {PostcodeLookupGetRequest | PostcodeLookupPostRequest} PostcodeLookupRequest\n */\n\n/**\n * @typedef {object} PostcodeLookupManualPayload\n * @property {string} addressLine1 - The address line 1\n * @property {string} addressLine2 - The address line 2\n * @property {string} town - The address town or city\n * @property {string} county - The address county\n * @property {string} postcode - The address postcode\n */\n\n//\n// Service types\n//\n\n/**\n * @typedef {object} Address\n * @property {string} uprn - The unique property reference\n * @property {string} address - The full address\n * @property {string} addressLine1 - Address line 1\n * @property {string} addressLine2 - Address line 2\n * @property {string} town - Address town\n * @property {string} county - Address county\n * @property {string} postcode - Address postcode\n * @property {string} formatted - The full formatted address\n */\n\n/**\n * OS places address response\n * @typedef {object} DeliveryPointAddress\n * @property {string} UPRN - Unique property reference number\n * @property {string} UDPRN - Unique delivery point Reference Number\n * @property {string} ADDRESS - Address\n * @property {string} ORGANISATION_NAME - Organisation name\n * @property {string} SUB_BUILDING_NAME - Sub building name\n * @property {string} BUILDING_NAME - Building name\n * @property {string} BUILDING_NUMBER - Building number\n * @property {string} THOROUGHFARE_NAME - Throughfare name\n * @property {string} DEPENDENT_LOCALITY - Dependent locality\n * @property {string} POST_TOWN - Post town\n * @property {string} POSTCODE - Postcode\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressItem\n * @property {DeliveryPointAddress} DPA - Delivery point address\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressResult\n * @property {DeliveryPointAddressItem[]} [results] - Delivery point address results\n */\n\n/**\n * @import { Request } from '@hapi/hapi'\n * @import { FormStatus } from '@defra/forms-model'\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<!-- Postcode lookup select -->
|
|
34
34
|
<!-- Postcode lookup details display -->
|
|
35
35
|
{%- set detailsHtml -%}
|
|
36
|
-
<strong>{{ details.postcodeQuery }}</strong>{% if details.buildingNameQuery %} and <strong>{{ details.buildingNameQuery }}</strong>{% endif %}
|
|
36
|
+
<strong>{{ details.postcodeQuery }}</strong>{% if details.buildingNameQuery %} {{ t('common.and')}} <strong>{{ details.buildingNameQuery }}</strong>{% endif %}
|
|
37
37
|
{%- endset -%}
|
|
38
38
|
|
|
39
39
|
{% if hasAddresses %}
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
{{ govukButton(buttons.continueButton) }}
|
|
73
73
|
|
|
74
74
|
{% if buttons.manualLink %}
|
|
75
|
-
<p class="govuk-body">or <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.manualLink.href }}">{{buttons.manualLink.text}}</a></p>
|
|
75
|
+
<p class="govuk-body">{{ t('common.or')}} <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.manualLink.href }}">{{buttons.manualLink.text}}</a></p>
|
|
76
76
|
{% elif buttons.detailsLink %}
|
|
77
|
-
<p class="govuk-body">or <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.detailsLink.href }}">{{buttons.detailsLink.text}}</a></p>
|
|
77
|
+
<p class="govuk-body">{{ t('common.or')}} <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.detailsLink.href }}">{{buttons.detailsLink.text}}</a></p>
|
|
78
78
|
{% endif %}
|
|
79
79
|
</div>
|
|
80
80
|
</form>
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { type JoiExpression
|
|
2
|
-
export declare function convertToLanguageMessages(extLanguageMessages: LanguageMessagesExt): LanguageMessages;
|
|
1
|
+
import { type JoiExpression } from 'joi';
|
|
3
2
|
export declare function createJoiExpression(expr: string): JoiExpression;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-utils.js","names":["Joi","
|
|
1
|
+
{"version":3,"file":"type-utils.js","names":["Joi","createJoiExpression","expr","expression"],"sources":["../../../src/server/utils/type-utils.ts"],"sourcesContent":["import Joi, { type JoiExpression } from 'joi'\n\nexport function createJoiExpression(expr: string): JoiExpression {\n return Joi.expression(expr) as unknown as JoiExpression\n}\n"],"mappings":"AAAA,OAAOA,GAAG,MAA8B,KAAK;AAE7C,OAAO,SAASC,mBAAmBA,CAACC,IAAY,EAAiB;EAC/D,OAAOF,GAAG,CAACG,UAAU,CAACD,IAAI,CAAC;AAC7B","ignoreList":[]}
|
|
@@ -15,4 +15,10 @@ export function isValidUUID(str: string): boolean;
|
|
|
15
15
|
* @param {AnyFormRequest} request
|
|
16
16
|
*/
|
|
17
17
|
export function resolveLanguage(request: AnyFormRequest): string;
|
|
18
|
+
/**
|
|
19
|
+
* Create a comma-separated list with the last seperator being 'or'
|
|
20
|
+
* @param { string[] | undefined } items
|
|
21
|
+
* @param {string} [finalSeparator]
|
|
22
|
+
*/
|
|
23
|
+
export function joinWithOr(items: string[] | undefined, finalSeparator?: string): string;
|
|
18
24
|
import type { AnyFormRequest } from '../../server/plugins/engine/types.js';
|
|
@@ -43,7 +43,24 @@ export function resolveLanguage(request) {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
46
|
+
* Create a comma-separated list with the last seperator being 'or'
|
|
47
|
+
* @param { string[] | undefined } items
|
|
48
|
+
* @param {string} [finalSeparator]
|
|
49
|
+
*/
|
|
50
|
+
export function joinWithOr(items, finalSeparator = 'or') {
|
|
51
|
+
if (!items || items.length === 0) {
|
|
52
|
+
return '';
|
|
53
|
+
}
|
|
54
|
+
if (items.length === 1) {
|
|
55
|
+
return items[0];
|
|
56
|
+
}
|
|
57
|
+
if (items.length === 2) {
|
|
58
|
+
return `${items[0]} ${finalSeparator} ${items[1]}`;
|
|
59
|
+
}
|
|
60
|
+
return `${items.slice(0, -1).join(', ')} ${finalSeparator} ${items.at(-1)}`;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
47
64
|
* @import { AnyFormRequest } from '../../server/plugins/engine/types.js'
|
|
48
65
|
*/
|
|
49
66
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["getTraceId","Joi","config","getPluginOptions","applyTraceHeaders","existingHeaders","header","get","traceId","headers","undefined","Object","assign","isValidUUID","str","error","string","uuid","validate","resolveLanguage","request","getLanguage","server","query","yar"],"sources":["../../../src/server/utils/utils.js"],"sourcesContent":["import { getTraceId } from '@defra/hapi-tracing'\nimport Joi from 'joi'\n\nimport { config } from '~/src/config/index.js'\nimport { getPluginOptions } from '~/src/server/plugins/engine/helpers.js'\n\n/**\n * Returns a set of headers to use in an HTTP request, merging them with any existing headers in options.\n * @param {Record<string, string> | undefined} [existingHeaders] - Optional existing headers to merge with the tracing headers.\n * @param {string} [header] - The tracing header name to use.\n * @returns {Record<string, string> | undefined} The merged headers, or undefined if no tracing header is available.\n */\nexport function applyTraceHeaders(\n existingHeaders,\n header = config.get('tracing').header\n) {\n if (!header) {\n return existingHeaders\n }\n\n const traceId = getTraceId()\n\n const headers = traceId ? { [header]: traceId } : undefined\n\n return existingHeaders ? Object.assign(existingHeaders, headers) : headers\n}\n\n/**\n * Validates if a string conforms to the uuid structure\n * @param {string} str\n * @returns\n */\nexport function isValidUUID(str) {\n const { error } = Joi.string().uuid().validate(str)\n return error === undefined\n}\n\n/**\n * @param {AnyFormRequest} request\n */\nexport function resolveLanguage(request) {\n const { getLanguage } = getPluginOptions(request.server)\n return getLanguage?.(request.query, request.yar) ?? 'en-GB'\n}\n\n/**\n * @
|
|
1
|
+
{"version":3,"file":"utils.js","names":["getTraceId","Joi","config","getPluginOptions","applyTraceHeaders","existingHeaders","header","get","traceId","headers","undefined","Object","assign","isValidUUID","str","error","string","uuid","validate","resolveLanguage","request","getLanguage","server","query","yar","joinWithOr","items","finalSeparator","length","slice","join","at"],"sources":["../../../src/server/utils/utils.js"],"sourcesContent":["import { getTraceId } from '@defra/hapi-tracing'\nimport Joi from 'joi'\n\nimport { config } from '~/src/config/index.js'\nimport { getPluginOptions } from '~/src/server/plugins/engine/helpers.js'\n\n/**\n * Returns a set of headers to use in an HTTP request, merging them with any existing headers in options.\n * @param {Record<string, string> | undefined} [existingHeaders] - Optional existing headers to merge with the tracing headers.\n * @param {string} [header] - The tracing header name to use.\n * @returns {Record<string, string> | undefined} The merged headers, or undefined if no tracing header is available.\n */\nexport function applyTraceHeaders(\n existingHeaders,\n header = config.get('tracing').header\n) {\n if (!header) {\n return existingHeaders\n }\n\n const traceId = getTraceId()\n\n const headers = traceId ? { [header]: traceId } : undefined\n\n return existingHeaders ? Object.assign(existingHeaders, headers) : headers\n}\n\n/**\n * Validates if a string conforms to the uuid structure\n * @param {string} str\n * @returns\n */\nexport function isValidUUID(str) {\n const { error } = Joi.string().uuid().validate(str)\n return error === undefined\n}\n\n/**\n * @param {AnyFormRequest} request\n */\nexport function resolveLanguage(request) {\n const { getLanguage } = getPluginOptions(request.server)\n return getLanguage?.(request.query, request.yar) ?? 'en-GB'\n}\n\n/**\n * Create a comma-separated list with the last seperator being 'or'\n * @param { string[] | undefined } items\n * @param {string} [finalSeparator]\n */\nexport function joinWithOr(items, finalSeparator = 'or') {\n if (!items || items.length === 0) {\n return ''\n }\n if (items.length === 1) {\n return items[0]\n }\n if (items.length === 2) {\n return `${items[0]} ${finalSeparator} ${items[1]}`\n }\n\n return `${items.slice(0, -1).join(', ')} ${finalSeparator} ${items.at(-1)}`\n}\n\n/**\n * @import { AnyFormRequest } from '~/src/server/plugins/engine/types.js'\n */\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,qBAAqB;AAChD,OAAOC,GAAG,MAAM,KAAK;AAErB,SAASC,MAAM;AACf,SAASC,gBAAgB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,eAAe,EACfC,MAAM,GAAGJ,MAAM,CAACK,GAAG,CAAC,SAAS,CAAC,CAACD,MAAM,EACrC;EACA,IAAI,CAACA,MAAM,EAAE;IACX,OAAOD,eAAe;EACxB;EAEA,MAAMG,OAAO,GAAGR,UAAU,CAAC,CAAC;EAE5B,MAAMS,OAAO,GAAGD,OAAO,GAAG;IAAE,CAACF,MAAM,GAAGE;EAAQ,CAAC,GAAGE,SAAS;EAE3D,OAAOL,eAAe,GAAGM,MAAM,CAACC,MAAM,CAACP,eAAe,EAAEI,OAAO,CAAC,GAAGA,OAAO;AAC5E;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,WAAWA,CAACC,GAAG,EAAE;EAC/B,MAAM;IAAEC;EAAM,CAAC,GAAGd,GAAG,CAACe,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAACJ,GAAG,CAAC;EACnD,OAAOC,KAAK,KAAKL,SAAS;AAC5B;;AAEA;AACA;AACA;AACA,OAAO,SAASS,eAAeA,CAACC,OAAO,EAAE;EACvC,MAAM;IAAEC;EAAY,CAAC,GAAGlB,gBAAgB,CAACiB,OAAO,CAACE,MAAM,CAAC;EACxD,OAAOD,WAAW,GAAGD,OAAO,CAACG,KAAK,EAAEH,OAAO,CAACI,GAAG,CAAC,IAAI,OAAO;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,KAAK,EAAEC,cAAc,GAAG,IAAI,EAAE;EACvD,IAAI,CAACD,KAAK,IAAIA,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;IAChC,OAAO,EAAE;EACX;EACA,IAAIF,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;IACtB,OAAOF,KAAK,CAAC,CAAC,CAAC;EACjB;EACA,IAAIA,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;IACtB,OAAO,GAAGF,KAAK,CAAC,CAAC,CAAC,IAAIC,cAAc,IAAID,KAAK,CAAC,CAAC,CAAC,EAAE;EACpD;EAEA,OAAO,GAAGA,KAAK,CAACG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC,IAAIH,cAAc,IAAID,KAAK,CAACK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7E;;AAEA;AACA;AACA","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getTraceId } from '@defra/hapi-tracing';
|
|
2
2
|
import { config } from "../../config/index.js";
|
|
3
|
-
import { applyTraceHeaders, isValidUUID } from "./utils.js";
|
|
3
|
+
import { applyTraceHeaders, isValidUUID, joinWithOr } from "./utils.js";
|
|
4
4
|
jest.mock('@defra/hapi-tracing');
|
|
5
5
|
describe('Header helper functions', () => {
|
|
6
6
|
it('should include the trace id in the headers if available', () => {
|
|
@@ -81,5 +81,25 @@ describe('Header helper functions', () => {
|
|
|
81
81
|
}) => {
|
|
82
82
|
expect(isValidUUID(uuid)).toBe(valid);
|
|
83
83
|
});
|
|
84
|
+
describe('joinWithOr', () => {
|
|
85
|
+
it('should handle undefined array', () => {
|
|
86
|
+
expect(joinWithOr(undefined)).toBe('');
|
|
87
|
+
});
|
|
88
|
+
it('should handle empty array', () => {
|
|
89
|
+
expect(joinWithOr([])).toBe('');
|
|
90
|
+
});
|
|
91
|
+
it('should handle one item', () => {
|
|
92
|
+
expect(joinWithOr(['item1'])).toBe('item1');
|
|
93
|
+
});
|
|
94
|
+
it('should handle two items', () => {
|
|
95
|
+
expect(joinWithOr(['item1', 'item2'])).toBe('item1 or item2');
|
|
96
|
+
});
|
|
97
|
+
it('should handle three items', () => {
|
|
98
|
+
expect(joinWithOr(['item1', 'item2', 'item3'])).toBe('item1, item2 or item3');
|
|
99
|
+
});
|
|
100
|
+
it('should handle a different last separator', () => {
|
|
101
|
+
expect(joinWithOr(['item1', 'item2', 'item3'], 'and')).toBe('item1, item2 and item3');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
84
104
|
});
|
|
85
105
|
//# sourceMappingURL=utils.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.js","names":["getTraceId","config","applyTraceHeaders","isValidUUID","jest","mock","describe","it","mocked","mockReturnValue","result","expect","toEqual","get","header","toBeUndefined","existingHeaders","Authorization","toBe","each","uuid","valid"],"sources":["../../../src/server/utils/utils.test.js"],"sourcesContent":["import { getTraceId } from '@defra/hapi-tracing'\n\nimport { config } from '~/src/config/index.js'\nimport {
|
|
1
|
+
{"version":3,"file":"utils.test.js","names":["getTraceId","config","applyTraceHeaders","isValidUUID","joinWithOr","jest","mock","describe","it","mocked","mockReturnValue","result","expect","toEqual","get","header","toBeUndefined","existingHeaders","Authorization","toBe","each","uuid","valid","undefined"],"sources":["../../../src/server/utils/utils.test.js"],"sourcesContent":["import { getTraceId } from '@defra/hapi-tracing'\n\nimport { config } from '~/src/config/index.js'\nimport {\n applyTraceHeaders,\n isValidUUID,\n joinWithOr\n} from '~/src/server/utils/utils.js'\n\njest.mock('@defra/hapi-tracing')\n\ndescribe('Header helper functions', () => {\n it('should include the trace id in the headers if available', () => {\n jest.mocked(getTraceId).mockReturnValue('my-trace-id')\n\n const result = applyTraceHeaders() // Updated to applyTraceHeaders\n expect(result).toEqual({\n [config.get('tracing').header]: 'my-trace-id'\n })\n })\n\n it('should exclude the trace id in the headers if missing', () => {\n jest.mocked(getTraceId).mockReturnValue(null)\n\n const result = applyTraceHeaders() // Updated to applyTraceHeaders\n expect(result).toBeUndefined()\n })\n\n it('should merge existing headers with the trace id if available', () => {\n jest.mocked(getTraceId).mockReturnValue('my-trace-id')\n\n const existingHeaders = { Authorization: 'Bearer token' }\n const result = applyTraceHeaders(existingHeaders) // Updated to applyTraceHeaders\n\n expect(result).toEqual({\n Authorization: 'Bearer token',\n [config.get('tracing').header]: 'my-trace-id'\n })\n })\n\n it('should return existing headers without modification if trace id is missing', () => {\n jest.mocked(getTraceId).mockReturnValue(null)\n\n const existingHeaders = { Authorization: 'Bearer token' }\n const result = applyTraceHeaders(existingHeaders) // Updated to applyTraceHeaders\n\n expect(result).toEqual({\n Authorization: 'Bearer token'\n })\n })\n\n it('should return existing headers if tracing header configuration is missing', () => {\n const existingHeaders = { Authorization: 'Bearer token' }\n const result = applyTraceHeaders(existingHeaders, '')\n\n expect(result).toBe(existingHeaders)\n })\n\n it.each([\n { uuid: '1f457a37-7b99-452e-8324-df9e041abff2', valid: true },\n { uuid: '0c9a2690-9a0c-4a2c-98d7-e9ef95615ac9', valid: true },\n { uuid: 'f223de3b-5ae5-44b2-8cee-ea8439adc335', valid: true },\n { uuid: '82ecc90c-bc47-4ec5-80af-1a9fc1c4c08c', valid: true },\n { uuid: 'd99ff582-ecce-474f-a44b-bc5961d977c5', valid: true },\n { uuid: '7afffc8a-81ab-4aa6-a8f5-ecf6a600a781', valid: true },\n { uuid: '7afffc8a81ab4aa6a8f5ecf6a600a781', valid: true },\n { uuid: '', valid: false },\n { uuid: 'uuid', valid: false },\n { uuid: 'h4f84ef8-b5e1-4544-94aa-1b671d50d8cb', valid: false }\n ])('should validate uuid appropriately %s', ({ uuid, valid }) => {\n expect(isValidUUID(uuid)).toBe(valid)\n })\n\n describe('joinWithOr', () => {\n it('should handle undefined array', () => {\n expect(joinWithOr(undefined)).toBe('')\n })\n it('should handle empty array', () => {\n expect(joinWithOr([])).toBe('')\n })\n it('should handle one item', () => {\n expect(joinWithOr(['item1'])).toBe('item1')\n })\n it('should handle two items', () => {\n expect(joinWithOr(['item1', 'item2'])).toBe('item1 or item2')\n })\n it('should handle three items', () => {\n expect(joinWithOr(['item1', 'item2', 'item3'])).toBe(\n 'item1, item2 or item3'\n )\n })\n it('should handle a different last separator', () => {\n expect(joinWithOr(['item1', 'item2', 'item3'], 'and')).toBe(\n 'item1, item2 and item3'\n )\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defra/forms-engine-plugin",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.21",
|
|
4
4
|
"description": "Defra forms engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -19,6 +19,11 @@
|
|
|
19
19
|
"import": "./.server/server/plugins/engine/types/index.js",
|
|
20
20
|
"default": "./.server/server/plugins/engine/types/index.js"
|
|
21
21
|
},
|
|
22
|
+
"./maps": {
|
|
23
|
+
"sass": "./.server/client/stylesheets/maps.scss",
|
|
24
|
+
"import": "./.server/client/javascripts/maps.js",
|
|
25
|
+
"default": "./.server/client/javascripts/maps.js"
|
|
26
|
+
},
|
|
22
27
|
"./shared.js": "./.server/client/javascripts/shared.js",
|
|
23
28
|
"./shared.min.js": "./.public/javascripts/shared.min.js",
|
|
24
29
|
"./shared.min.js.map": "./.public/javascripts/shared.min.js.map",
|
|
@@ -82,14 +87,14 @@
|
|
|
82
87
|
"react-router": "^5.3.4"
|
|
83
88
|
},
|
|
84
89
|
"engines": {
|
|
85
|
-
"node": "
|
|
86
|
-
"npm": "
|
|
90
|
+
"node": "^24.19.0",
|
|
91
|
+
"npm": "^11.17.0 || >=12.0.2"
|
|
87
92
|
},
|
|
88
93
|
"license": "SEE LICENSE IN LICENSE",
|
|
89
94
|
"dependencies": {
|
|
90
|
-
"@defra/forms-model": "^3.0.
|
|
95
|
+
"@defra/forms-model": "^3.0.704",
|
|
91
96
|
"@defra/hapi-tracing": "^1.29.0",
|
|
92
|
-
"@defra/interactive-map": "
|
|
97
|
+
"@defra/interactive-map": "0.0.33-alpha",
|
|
93
98
|
"@elastic/ecs-pino-format": "^1.5.0",
|
|
94
99
|
"@hapi/boom": "^10.0.1",
|
|
95
100
|
"@hapi/bourne": "^3.0.0",
|
|
@@ -107,6 +112,7 @@
|
|
|
107
112
|
"@turf/bbox": "^7.3.4",
|
|
108
113
|
"@turf/boolean-within": "^7.3.5",
|
|
109
114
|
"@turf/centroid": "^7.3.4",
|
|
115
|
+
"@turf/helpers": "^7.3.5",
|
|
110
116
|
"@types/humanize-duration": "^3.27.4",
|
|
111
117
|
"accessible-autocomplete": "^3.0.1",
|
|
112
118
|
"atob": "^2.1.2",
|
|
@@ -131,6 +137,7 @@
|
|
|
131
137
|
"joi": "^17.13.3",
|
|
132
138
|
"liquidjs": "^10.24.0",
|
|
133
139
|
"lodash": "^4.17.21",
|
|
140
|
+
"lru-cache": "^11.5.1",
|
|
134
141
|
"maplibre-gl": "^5.24.0",
|
|
135
142
|
"marked": "^15.0.12",
|
|
136
143
|
"nunjucks": "^3.2.4",
|
|
@@ -225,5 +232,13 @@
|
|
|
225
232
|
"webpack": "^5.102.1",
|
|
226
233
|
"webpack-assets-manifest": "^6.4.0",
|
|
227
234
|
"webpack-cli": "^6.0.1"
|
|
235
|
+
},
|
|
236
|
+
"allowScripts": {
|
|
237
|
+
"@defra/hapi-tracing@1.30.0": true,
|
|
238
|
+
"@parcel/watcher@2.5.6": true,
|
|
239
|
+
"core-js": true,
|
|
240
|
+
"esbuild": true,
|
|
241
|
+
"unrs-resolver": true,
|
|
242
|
+
"fsevents": true
|
|
228
243
|
}
|
|
229
244
|
}
|
|
@@ -305,17 +305,19 @@ function pollUploadStatus(uploadId) {
|
|
|
305
305
|
* @param {HTMLButtonElement} uploadButton - The upload button
|
|
306
306
|
* @param {HTMLButtonElement} continueButton - The continue button
|
|
307
307
|
* @param {File[]} selectedFiles - The selected files
|
|
308
|
+
* @param {string} uploadingLabel - The text to display while uploading (can be multiple languages)
|
|
308
309
|
*/
|
|
309
310
|
function handleStandardFormSubmission(
|
|
310
311
|
formElement,
|
|
311
312
|
fileInput,
|
|
312
313
|
uploadButton,
|
|
313
314
|
continueButton,
|
|
314
|
-
selectedFiles
|
|
315
|
+
selectedFiles,
|
|
316
|
+
uploadingLabel
|
|
315
317
|
) {
|
|
316
318
|
// Render in reverse so first file ends up at the top of the summary list
|
|
317
319
|
for (let i = selectedFiles.length - 1; i >= 0; i--) {
|
|
318
|
-
renderSummary(selectedFiles[i],
|
|
320
|
+
renderSummary(selectedFiles[i], uploadingLabel, formElement)
|
|
319
321
|
}
|
|
320
322
|
|
|
321
323
|
fileInput.focus()
|
|
@@ -405,6 +407,10 @@ function initUpload() {
|
|
|
405
407
|
return
|
|
406
408
|
}
|
|
407
409
|
|
|
410
|
+
const uploadingLabel =
|
|
411
|
+
document.getElementById('uploadedFilesContainer')?.dataset.uploadinglabel ??
|
|
412
|
+
'Uploading…'
|
|
413
|
+
|
|
408
414
|
const formElement = /** @type {HTMLFormElement} */ (form)
|
|
409
415
|
/** @type {File[]} */
|
|
410
416
|
let selectedFiles = []
|
|
@@ -418,6 +424,7 @@ function initUpload() {
|
|
|
418
424
|
|
|
419
425
|
if (fileInput.files && fileInput.files.length > 0) {
|
|
420
426
|
selectedFiles = Array.from(fileInput.files)
|
|
427
|
+
uploadButton.click()
|
|
421
428
|
}
|
|
422
429
|
})
|
|
423
430
|
|
|
@@ -445,7 +452,8 @@ function initUpload() {
|
|
|
445
452
|
fileInput,
|
|
446
453
|
uploadButton,
|
|
447
454
|
continueButton,
|
|
448
|
-
selectedFiles
|
|
455
|
+
selectedFiles,
|
|
456
|
+
uploadingLabel
|
|
449
457
|
)
|
|
450
458
|
|
|
451
459
|
handleAjaxFormSubmission(
|