@defra/forms-engine-plugin 5.0.0-alpha.1 → 5.0.0-alpha.11
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.js +10 -31
- 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.js +11 -2
- package/.server/client/javascripts/location-map.js.map +1 -1
- package/.server/client/javascripts/map.d.ts +6 -0
- package/.server/client/javascripts/map.js +37 -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 -3
- package/.server/client/javascripts/shared.js +1 -3
- 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/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 +4 -1
- package/.server/server/plugins/engine/components/CheckboxesField.js +13 -0
- 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 +29 -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 +12 -0
- package/.server/server/plugins/engine/components/FileUploadField.js +23 -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 +1 -0
- package/.server/server/plugins/engine/components/GeospatialField.js +1 -1
- 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 +28 -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 +18 -5
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +8 -3
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +13 -12
- 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 +2 -1
- package/.server/server/plugins/engine/components/OsGridRefField.js +4 -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 +1 -2
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +3 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.js +32 -0
- 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/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 +3 -0
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js +10 -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 +85 -8
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +55 -6
- package/.server/server/plugins/engine/i18n/types.d.ts +2 -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 +9 -15
- 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/outputFormatters/adapter/v1.js +3 -5
- 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/submission.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js +3 -3
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +23 -2
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
- package/.server/server/plugins/engine/types/schema.js +1 -0
- package/.server/server/plugins/engine/types/schema.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +5 -0
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/views/components/_location-field-base.html +2 -1
- package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -1
- package/.server/server/plugins/engine/views/components/multilinetextfield.html +12 -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/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 +9 -2
- package/src/client/javascripts/file-upload.js +11 -3
- package/src/client/javascripts/geospatial-map.js +7 -34
- package/src/client/javascripts/govuk.js +2 -0
- package/src/client/javascripts/location-map.js +9 -1
- package/src/client/javascripts/map.js +42 -0
- package/src/client/javascripts/maps.js +5 -0
- package/src/client/javascripts/shared.js +1 -3
- 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/components/AutocompleteField.ts +13 -0
- package/src/server/plugins/engine/components/CheckboxesField.ts +13 -1
- 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 +24 -3
- package/src/server/plugins/engine/components/FormComponent.ts +6 -5
- package/src/server/plugins/engine/components/GeospatialField.ts +6 -1
- package/src/server/plugins/engine/components/LatLongField.ts +128 -58
- package/src/server/plugins/engine/components/LocationFieldBase.ts +23 -6
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +20 -13
- 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 +9 -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 +1 -2
- package/src/server/plugins/engine/components/helpers/geospatial.ts +53 -0
- 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/helpers.ts +52 -5
- package/src/server/plugins/engine/i18n/buildValidationMessages.ts +10 -7
- 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 +85 -8
- package/src/server/plugins/engine/i18n/translations/en-GB.json +55 -6
- package/src/server/plugins/engine/i18n/types.ts +2 -0
- package/src/server/plugins/engine/index.ts +7 -0
- package/src/server/plugins/engine/models/FormModel.ts +9 -15
- package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
- package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +3 -6
- 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/submission.ts +6 -3
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +27 -2
- package/src/server/plugins/engine/types/schema.ts +1 -0
- package/src/server/plugins/engine/types.ts +5 -0
- package/src/server/plugins/engine/views/components/_location-field-base.html +2 -1
- package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
- package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -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/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
|
@@ -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":"AAAA,SAASA,UAAU,QAAQ,qBAAqB;AAEhD,SAASC,MAAM;AACf,SACEC,iBAAiB,EACjBC,WAAW,EACXC,UAAU;AAGZC,IAAI,CAACC,IAAI,CAAC,qBAAqB,CAAC;AAEhCC,QAAQ,CAAC,yBAAyB,EAAE,MAAM;EACxCC,EAAE,CAAC,yDAAyD,EAAE,MAAM;IAClEH,IAAI,CAACI,MAAM,CAACT,UAAU,CAAC,CAACU,eAAe,CAAC,aAAa,CAAC;IAEtD,MAAMC,MAAM,GAAGT,iBAAiB,CAAC,CAAC,EAAC;IACnCU,MAAM,CAACD,MAAM,CAAC,CAACE,OAAO,CAAC;MACrB,CAACZ,MAAM,CAACa,GAAG,CAAC,SAAS,CAAC,CAACC,MAAM,GAAG;IAClC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFP,EAAE,CAAC,uDAAuD,EAAE,MAAM;IAChEH,IAAI,CAACI,MAAM,CAACT,UAAU,CAAC,CAACU,eAAe,CAAC,IAAI,CAAC;IAE7C,MAAMC,MAAM,GAAGT,iBAAiB,CAAC,CAAC,EAAC;IACnCU,MAAM,CAACD,MAAM,CAAC,CAACK,aAAa,CAAC,CAAC;EAChC,CAAC,CAAC;EAEFR,EAAE,CAAC,8DAA8D,EAAE,MAAM;IACvEH,IAAI,CAACI,MAAM,CAACT,UAAU,CAAC,CAACU,eAAe,CAAC,aAAa,CAAC;IAEtD,MAAMO,eAAe,GAAG;MAAEC,aAAa,EAAE;IAAe,CAAC;IACzD,MAAMP,MAAM,GAAGT,iBAAiB,CAACe,eAAe,CAAC,EAAC;;IAElDL,MAAM,CAACD,MAAM,CAAC,CAACE,OAAO,CAAC;MACrBK,aAAa,EAAE,cAAc;MAC7B,CAACjB,MAAM,CAACa,GAAG,CAAC,SAAS,CAAC,CAACC,MAAM,GAAG;IAClC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFP,EAAE,CAAC,4EAA4E,EAAE,MAAM;IACrFH,IAAI,CAACI,MAAM,CAACT,UAAU,CAAC,CAACU,eAAe,CAAC,IAAI,CAAC;IAE7C,MAAMO,eAAe,GAAG;MAAEC,aAAa,EAAE;IAAe,CAAC;IACzD,MAAMP,MAAM,GAAGT,iBAAiB,CAACe,eAAe,CAAC,EAAC;;IAElDL,MAAM,CAACD,MAAM,CAAC,CAACE,OAAO,CAAC;MACrBK,aAAa,EAAE;IACjB,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFV,EAAE,CAAC,2EAA2E,EAAE,MAAM;IACpF,MAAMS,eAAe,GAAG;MAAEC,aAAa,EAAE;IAAe,CAAC;IACzD,MAAMP,MAAM,GAAGT,iBAAiB,CAACe,eAAe,EAAE,EAAE,CAAC;IAErDL,MAAM,CAACD,MAAM,CAAC,CAACQ,IAAI,CAACF,eAAe,CAAC;EACtC,CAAC,CAAC;EAEFT,EAAE,CAACY,IAAI,CAAC,CACN;IAAEC,IAAI,EAAE,sCAAsC;IAAEC,KAAK,EAAE;EAAK,CAAC,EAC7D;IAAED,IAAI,EAAE,sCAAsC;IAAEC,KAAK,EAAE;EAAK,CAAC,EAC7D;IAAED,IAAI,EAAE,sCAAsC;IAAEC,KAAK,EAAE;EAAK,CAAC,EAC7D;IAAED,IAAI,EAAE,sCAAsC;IAAEC,KAAK,EAAE;EAAK,CAAC,EAC7D;IAAED,IAAI,EAAE,sCAAsC;IAAEC,KAAK,EAAE;EAAK,CAAC,EAC7D;IAAED,IAAI,EAAE,sCAAsC;IAAEC,KAAK,EAAE;EAAK,CAAC,EAC7D;IAAED,IAAI,EAAE,kCAAkC;IAAEC,KAAK,EAAE;EAAK,CAAC,EACzD;IAAED,IAAI,EAAE,EAAE;IAAEC,KAAK,EAAE;EAAM,CAAC,EAC1B;IAAED,IAAI,EAAE,MAAM;IAAEC,KAAK,EAAE;EAAM,CAAC,EAC9B;IAAED,IAAI,EAAE,sCAAsC;IAAEC,KAAK,EAAE;EAAM,CAAC,CAC/D,CAAC,CAAC,uCAAuC,EAAE,CAAC;IAAED,IAAI;IAAEC;EAAM,CAAC,KAAK;IAC/DV,MAAM,CAACT,WAAW,CAACkB,IAAI,CAAC,CAAC,CAACF,IAAI,CAACG,KAAK,CAAC;EACvC,CAAC,CAAC;EAEFf,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC3BC,EAAE,CAAC,+BAA+B,EAAE,MAAM;MACxCI,MAAM,CAACR,UAAU,CAACmB,SAAS,CAAC,CAAC,CAACJ,IAAI,CAAC,EAAE,CAAC;IACxC,CAAC,CAAC;IACFX,EAAE,CAAC,2BAA2B,EAAE,MAAM;MACpCI,MAAM,CAACR,UAAU,CAAC,EAAE,CAAC,CAAC,CAACe,IAAI,CAAC,EAAE,CAAC;IACjC,CAAC,CAAC;IACFX,EAAE,CAAC,wBAAwB,EAAE,MAAM;MACjCI,MAAM,CAACR,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAACe,IAAI,CAAC,OAAO,CAAC;IAC7C,CAAC,CAAC;IACFX,EAAE,CAAC,yBAAyB,EAAE,MAAM;MAClCI,MAAM,CAACR,UAAU,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAACe,IAAI,CAAC,gBAAgB,CAAC;IAC/D,CAAC,CAAC;IACFX,EAAE,CAAC,2BAA2B,EAAE,MAAM;MACpCI,MAAM,CAACR,UAAU,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAACe,IAAI,CAClD,uBACF,CAAC;IACH,CAAC,CAAC;IACFX,EAAE,CAAC,0CAA0C,EAAE,MAAM;MACnDI,MAAM,CAACR,UAAU,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAACe,IAAI,CACzD,wBACF,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","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.11",
|
|
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",
|
|
@@ -87,7 +92,7 @@
|
|
|
87
92
|
},
|
|
88
93
|
"license": "SEE LICENSE IN LICENSE",
|
|
89
94
|
"dependencies": {
|
|
90
|
-
"@defra/forms-model": "^3.0.
|
|
95
|
+
"@defra/forms-model": "^3.0.693",
|
|
91
96
|
"@defra/hapi-tracing": "^1.29.0",
|
|
92
97
|
"@defra/interactive-map": "^0.0.33-alpha",
|
|
93
98
|
"@elastic/ecs-pino-format": "^1.5.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",
|
|
@@ -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(
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
defaultConfig,
|
|
11
11
|
getCentroidGridRef,
|
|
12
12
|
getCoordinateGridRef,
|
|
13
|
+
getMapCountryLayers,
|
|
13
14
|
getMapLayers
|
|
14
15
|
} from './map.js'
|
|
15
16
|
import sssiDataset from './sssi-dataset.js'
|
|
@@ -174,43 +175,15 @@ export function processGeospatial(config, geospatial, index) {
|
|
|
174
175
|
const plugins = [drawPlugin]
|
|
175
176
|
const country = geospatial.dataset.country
|
|
176
177
|
const mapLayers = getMapLayers(geospatial.dataset.maplayers)
|
|
178
|
+
const datasets = getMapCountryLayers(config.apiPath, country)
|
|
177
179
|
|
|
178
|
-
if (
|
|
179
|
-
|
|
180
|
-
// and provide feedback to the user when they add features outside of the bounds.
|
|
181
|
-
const countriesDatasetPlugin = createDatasetsPlugin({
|
|
182
|
-
datasets: [
|
|
183
|
-
{
|
|
184
|
-
id: 'invalid-area',
|
|
185
|
-
label: 'Invalid areas',
|
|
186
|
-
geojson: `${config.apiPath}/maps/countries.geojson?omit=${country}`,
|
|
187
|
-
showInKey: false,
|
|
188
|
-
showInMenu: false,
|
|
189
|
-
style: {
|
|
190
|
-
stroke: 'gray',
|
|
191
|
-
strokeWidth: 1,
|
|
192
|
-
fill: 'rgba(211,211,211,0.8)'
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
id: 'valid-area',
|
|
197
|
-
label: 'Valid areas',
|
|
198
|
-
geojson: `${config.apiPath}/maps/countries.geojson?only=${country}`,
|
|
199
|
-
showInKey: false,
|
|
200
|
-
showInMenu: false,
|
|
201
|
-
style: {
|
|
202
|
-
stroke: 'rgba(0,112,60,1)',
|
|
203
|
-
strokeWidth: 1
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
]
|
|
207
|
-
})
|
|
208
|
-
|
|
209
|
-
plugins.push(countriesDatasetPlugin)
|
|
180
|
+
if (mapLayers.includes('sssi')) {
|
|
181
|
+
datasets.push(...sssiDataset)
|
|
210
182
|
}
|
|
211
183
|
|
|
212
|
-
if
|
|
213
|
-
|
|
184
|
+
// Create a map dataset plugin if there are any present
|
|
185
|
+
if (datasets.length) {
|
|
186
|
+
plugins.push(createDatasetsPlugin({ datasets }))
|
|
214
187
|
}
|
|
215
188
|
|
|
216
189
|
const initConfig = {
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
CharacterCount,
|
|
4
4
|
Checkboxes,
|
|
5
5
|
ErrorSummary,
|
|
6
|
+
FileUpload,
|
|
6
7
|
Header,
|
|
7
8
|
NotificationBanner,
|
|
8
9
|
Radios,
|
|
@@ -16,6 +17,7 @@ export function initAllGovuk() {
|
|
|
16
17
|
createAll(Checkboxes)
|
|
17
18
|
createAll(ErrorSummary)
|
|
18
19
|
createAll(Header)
|
|
20
|
+
createAll(FileUpload)
|
|
19
21
|
createAll(NotificationBanner)
|
|
20
22
|
createAll(Radios)
|
|
21
23
|
createAll(SkipLink)
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
createMap,
|
|
8
8
|
defaultConfig,
|
|
9
9
|
eastingNorthingToLatLong,
|
|
10
|
+
getMapCountryLayers,
|
|
10
11
|
getMapLayers,
|
|
11
12
|
latLongToEastingNorthing,
|
|
12
13
|
latLongToOsGridRef,
|
|
@@ -423,10 +424,17 @@ export function processLocation(config, location, index) {
|
|
|
423
424
|
|
|
424
425
|
locationInputs.after(mapContainer)
|
|
425
426
|
|
|
427
|
+
const country = location.dataset.country
|
|
426
428
|
const mapLayers = getMapLayers(location.dataset.maplayers)
|
|
429
|
+
const datasets = getMapCountryLayers(config.apiPath, country)
|
|
427
430
|
|
|
428
431
|
if (mapLayers.includes('sssi')) {
|
|
429
|
-
|
|
432
|
+
datasets.push(...sssiDataset)
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Create a map dataset plugin if there are any present
|
|
436
|
+
if (datasets.length) {
|
|
437
|
+
initConfig.plugins = [createDatasetsPlugin({ datasets })]
|
|
430
438
|
}
|
|
431
439
|
|
|
432
440
|
const { map, interactPlugin } = createMap(mapId, initConfig, config)
|
|
@@ -367,6 +367,48 @@ export function getMapLayers(layers) {
|
|
|
367
367
|
return trimmed ? trimmed.split(',') : []
|
|
368
368
|
}
|
|
369
369
|
|
|
370
|
+
/**
|
|
371
|
+
* Adds the country layers to a datasets array
|
|
372
|
+
* @param {string} apiPath
|
|
373
|
+
* @param {string} [country]
|
|
374
|
+
*/
|
|
375
|
+
export function getMapCountryLayers(apiPath, country) {
|
|
376
|
+
/** @type {any[]} */
|
|
377
|
+
const datasets = []
|
|
378
|
+
|
|
379
|
+
if (country) {
|
|
380
|
+
// Add the country bounds to the datasets array to show the valid area on the map
|
|
381
|
+
// and provide feedback to the user when they add features outside of the bounds.
|
|
382
|
+
datasets.push(
|
|
383
|
+
{
|
|
384
|
+
id: 'invalid-area',
|
|
385
|
+
label: 'Invalid areas',
|
|
386
|
+
geojson: `${apiPath}/maps/countries.geojson?omit=${country}`,
|
|
387
|
+
showInKey: false,
|
|
388
|
+
showInMenu: false,
|
|
389
|
+
style: {
|
|
390
|
+
stroke: 'gray',
|
|
391
|
+
strokeWidth: 1,
|
|
392
|
+
fill: 'rgba(211,211,211,0.8)'
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
id: 'valid-area',
|
|
397
|
+
label: 'Valid areas',
|
|
398
|
+
geojson: `${apiPath}/maps/countries.geojson?only=${country}`,
|
|
399
|
+
showInKey: false,
|
|
400
|
+
showInMenu: false,
|
|
401
|
+
style: {
|
|
402
|
+
stroke: 'rgba(0,112,60,1)',
|
|
403
|
+
strokeWidth: 1
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
)
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return datasets
|
|
410
|
+
}
|
|
411
|
+
|
|
370
412
|
/**
|
|
371
413
|
* @typedef {object} InteractiveMap - an instance of a InteractiveMap
|
|
372
414
|
* @property {Function} on - register callback listeners to map events
|
|
@@ -3,9 +3,7 @@ import { initDebounceClick as initDebounceClickImp } from './debounce-click.js'
|
|
|
3
3
|
import { initFileUpload as initFileUploadImp } from './file-upload.js'
|
|
4
4
|
import { initAllGovuk as initAllGovukImp } from './govuk.js'
|
|
5
5
|
import { initPreviewCloseLink as initPreviewCloseLinkImp } from './preview-close-link.js'
|
|
6
|
-
export
|
|
7
|
-
export * as map from './map.js'
|
|
8
|
-
export * as geospatialMap from './geospatial-map.js'
|
|
6
|
+
export * from './maps.js'
|
|
9
7
|
|
|
10
8
|
export const initAllGovuk = initAllGovukImp
|
|
11
9
|
export const initAllAutocomplete = initAllAutocompleteImp
|
|
@@ -49,49 +49,47 @@ export function sssiScotlandRequestTransformer(url, { bbox }) {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
export default
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
transformRequest: sssiEnglandRequestTransformer
|
|
61
|
-
},
|
|
62
|
-
minZoom,
|
|
63
|
-
style,
|
|
64
|
-
showInKey: true,
|
|
65
|
-
showInMenu: false
|
|
52
|
+
export default [
|
|
53
|
+
{
|
|
54
|
+
id: 'sssi-england',
|
|
55
|
+
label: 'Sites of Special Scientific Interest',
|
|
56
|
+
dynamicGeoJSON: {
|
|
57
|
+
url: englandWFS,
|
|
58
|
+
idProperty: 'ref_code',
|
|
59
|
+
transformRequest: sssiEnglandRequestTransformer
|
|
66
60
|
},
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
61
|
+
minZoom,
|
|
62
|
+
style,
|
|
63
|
+
showInKey: true,
|
|
64
|
+
showInMenu: false
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'sssi-wales',
|
|
68
|
+
label: 'SSSI Wales',
|
|
69
|
+
dynamicGeoJSON: {
|
|
70
|
+
url: walesWFS,
|
|
71
|
+
idProperty: 'id',
|
|
72
|
+
transformRequest: sssiWalesRequestTransformer
|
|
79
73
|
},
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
74
|
+
minZoom,
|
|
75
|
+
style,
|
|
76
|
+
showInKey: false,
|
|
77
|
+
showInMenu: false
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: 'sssi-scotland',
|
|
81
|
+
label: 'SSSI Scotland',
|
|
82
|
+
dynamicGeoJSON: {
|
|
83
|
+
url: scotlandWFS,
|
|
84
|
+
idProperty: 'OBJECTID',
|
|
85
|
+
transformRequest: sssiScotlandRequestTransformer
|
|
86
|
+
},
|
|
87
|
+
minZoom,
|
|
88
|
+
style,
|
|
89
|
+
showInKey: false,
|
|
90
|
+
showInMenu: false
|
|
91
|
+
}
|
|
92
|
+
]
|
|
95
93
|
|
|
96
94
|
/**
|
|
97
95
|
* @typedef {object} TransformRequestOptions
|
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
@use "prose";
|
|
4
4
|
@use "summary-list";
|
|
5
5
|
@use "location-fields";
|
|
6
|
-
|
|
7
|
-
@use "@defra/interactive-map/css" as core;
|
|
8
|
-
@use "@defra/interactive-map/plugins/map-styles/css" as mapStyles;
|
|
9
|
-
@use "@defra/interactive-map/plugins/search/css" as search;
|
|
10
|
-
@use "@defra/interactive-map/plugins/scale-bar/css" as scaleBar;
|
|
6
|
+
@use "maps";
|
|
11
7
|
|
|
12
8
|
// Use default GDS Transport font for autocomplete
|
|
13
9
|
.autocomplete__hint,
|
package/src/server/constants.js
CHANGED
|
@@ -5,3 +5,5 @@ export const EXTERNAL_STATE_PAYLOAD = 'EXTERNAL_STATE_PAYLOAD'
|
|
|
5
5
|
export const EXTERNAL_STATE_APPENDAGE = 'EXTERNAL_STATE_APPENDAGE'
|
|
6
6
|
export const COMPONENT_STATE_ERROR = 'COMPONENT_STATE_ERROR'
|
|
7
7
|
export const PAYMENT_EXPIRED_NOTIFICATION = 'PAYMENT_EXPIRED_NOTIFICATION'
|
|
8
|
+
export const EN_GB = 'en-GB' // English language
|
|
9
|
+
export const CY = 'cy' // Welsh language
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { type AutocompleteFieldComponent } from '@defra/forms-model'
|
|
2
|
+
import { type LanguageMessages } from 'joi'
|
|
2
3
|
|
|
3
4
|
import { SelectField } from './SelectField.js'
|
|
4
5
|
import { type RenderContext } from './types.js'
|
|
6
|
+
import { buildValidationMessages } from '../i18n/buildValidationMessages.js'
|
|
5
7
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
8
|
+
import { type Translator } from '../types/index.js'
|
|
6
9
|
|
|
7
10
|
export class AutocompleteField extends SelectField {
|
|
8
11
|
declare options: AutocompleteFieldComponent['options']
|
|
@@ -45,4 +48,14 @@ export class AutocompleteField extends SelectField {
|
|
|
45
48
|
formGroup
|
|
46
49
|
}
|
|
47
50
|
}
|
|
51
|
+
|
|
52
|
+
getValidationMessagesOverride(translator: Translator) {
|
|
53
|
+
const { t } = translator
|
|
54
|
+
return {
|
|
55
|
+
[this.name]: {
|
|
56
|
+
'any.required': buildValidationMessages(t).objectRequired,
|
|
57
|
+
'any.only': buildValidationMessages(t).objectRequired
|
|
58
|
+
} as LanguageMessages
|
|
59
|
+
}
|
|
60
|
+
}
|
|
48
61
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type CheckboxesFieldComponent, type Item } from '@defra/forms-model'
|
|
2
|
-
import joi, { type ArraySchema } from 'joi'
|
|
2
|
+
import joi, { type ArraySchema, type LanguageMessages } from 'joi'
|
|
3
3
|
|
|
4
4
|
import { isFormValue } from './FormComponent.js'
|
|
5
5
|
import { SelectionControlField } from './SelectionControlField.js'
|
|
6
|
+
import { buildValidationMessages } from '../i18n/buildValidationMessages.js'
|
|
6
7
|
import { type Translator } from '../i18n/types.js'
|
|
7
8
|
import { type FormModel } from '../models/FormModel.js'
|
|
8
9
|
import { type QuestionPageController } from '../pageControllers/QuestionPageController.js'
|
|
@@ -133,6 +134,17 @@ export class CheckboxesField extends SelectionControlField {
|
|
|
133
134
|
return this.getContextValueFromFormValue(values)
|
|
134
135
|
}
|
|
135
136
|
|
|
137
|
+
getValidationMessagesOverride(translator: Translator) {
|
|
138
|
+
const { t } = translator
|
|
139
|
+
return {
|
|
140
|
+
[this.name]: {
|
|
141
|
+
'array.min': buildValidationMessages(t).arrayMin,
|
|
142
|
+
'array.max': buildValidationMessages(t).arrayMax,
|
|
143
|
+
'array.length': buildValidationMessages(t).arrayLength
|
|
144
|
+
} as LanguageMessages
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
136
148
|
/**
|
|
137
149
|
* For error preview page that shows all possible errors on a component
|
|
138
150
|
*/
|
|
@@ -28,6 +28,7 @@ export class ComponentBase {
|
|
|
28
28
|
|
|
29
29
|
isFormComponent = false
|
|
30
30
|
model: FormModel
|
|
31
|
+
def: ComponentDef
|
|
31
32
|
|
|
32
33
|
/** joi schemas based on a component defined in the form JSON. This validates a user's answer and is generated from {@link ComponentDef} */
|
|
33
34
|
formSchema: ComponentSchema = joi.string()
|
|
@@ -45,6 +46,7 @@ export class ComponentBase {
|
|
|
45
46
|
this.type = def.type
|
|
46
47
|
this.name = def.name
|
|
47
48
|
this.title = def.title
|
|
49
|
+
this.def = def
|
|
48
50
|
|
|
49
51
|
if ('schema' in def) {
|
|
50
52
|
this.schema = def.schema
|