hof 22.1.0-timeout-warning-sign-in-beta.3 → 22.2.0-time-mixin-beta

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.
Files changed (45) hide show
  1. package/.github/workflows/automate-publish.yml +4 -4
  2. package/.github/workflows/automate-tag.yml +16 -16
  3. package/.nyc_output/34671fe1-441d-41ed-b012-ece4e3964dbb.json +1 -0
  4. package/.nyc_output/processinfo/34671fe1-441d-41ed-b012-ece4e3964dbb.json +1 -0
  5. package/.nyc_output/processinfo/index.json +1 -1
  6. package/CHANGELOG.md +20 -19
  7. package/README.md +44 -7
  8. package/components/emailer/transports/smtp.js +1 -1
  9. package/components/index.js +1 -0
  10. package/components/session-timeout-warning/index.js +11 -0
  11. package/components/time/fields.js +12 -0
  12. package/components/time/index.js +168 -0
  13. package/components/time/templates/time.html +20 -0
  14. package/config/hof-defaults.js +2 -0
  15. package/controller/controller.js +9 -0
  16. package/controller/validation/validators.js +13 -0
  17. package/frontend/template-mixins/mixins/template-mixins.js +45 -1
  18. package/frontend/template-mixins/partials/forms/input-text-time.html +37 -0
  19. package/frontend/template-partials/translations/src/en/save-and-exit.json +4 -0
  20. package/frontend/template-partials/views/partials/head.html +4 -1
  21. package/frontend/template-partials/views/partials/session-timeout-warning.html +7 -6
  22. package/frontend/template-partials/views/save-and-exit.html +1 -3
  23. package/frontend/themes/gov-uk/styles/_time-input.scss +5 -0
  24. package/frontend/themes/gov-uk/styles/govuk.scss +1 -0
  25. package/frontend/toolkit/assets/javascript/form-focus.js +4 -0
  26. package/index.js +3 -0
  27. package/lib/deindex.js +18 -0
  28. package/lib/router.js +2 -0
  29. package/package.json +1 -2
  30. package/{pull-request-template.md → pull_request_template.md} +1 -1
  31. package/sandbox/.env +2 -2
  32. package/sandbox/apps/sandbox/fields.js +9 -0
  33. package/sandbox/apps/sandbox/index.js +4 -0
  34. package/sandbox/apps/sandbox/sections/summary-data-sections.js +7 -0
  35. package/sandbox/apps/sandbox/translations/en/default.json +12 -2
  36. package/sandbox/apps/sandbox/translations/src/en/fields.json +4 -0
  37. package/sandbox/apps/sandbox/translations/src/en/pages.json +5 -2
  38. package/sandbox/apps/sandbox/translations/src/en/validation.json +3 -0
  39. package/sandbox/apps/sandbox/views/save-and-exit.html +19 -0
  40. package/sandbox/public/css/app.css +40 -34
  41. package/sandbox/public/js/bundle.js +4 -0
  42. package/utilities/autofill/inputs.js +6 -1
  43. package/wizard/index.js +2 -0
  44. package/.nyc_output/9376679c-295d-4483-8c62-60e08528311a.json +0 -1
  45. package/.nyc_output/processinfo/9376679c-295d-4483-8c62-60e08528311a.json +0 -1
@@ -0,0 +1 @@
1
+ {"parent":null,"pid":21200,"argv":["/Users/user/.nvm/versions/node/v20.17.0/bin/node","/Users/user/Documents/HO/HOF/hof/node_modules/.bin/_mocha","test/**/*.spec.js","sandbox/test/**/*.spec.js"],"execArgv":[],"cwd":"/Users/user/Documents/HO/HOF/hof","time":1738933012389,"ppid":21195,"coverageFilename":"/Users/user/Documents/HO/HOF/hof/.nyc_output/34671fe1-441d-41ed-b012-ece4e3964dbb.json","externalId":"","uuid":"34671fe1-441d-41ed-b012-ece4e3964dbb","files":["/Users/user/Documents/HO/HOF/hof/model/index.js","/Users/user/Documents/HO/HOF/hof/model/apis/axios-settings.js","/Users/user/Documents/HO/HOF/hof/components/index.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/index.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/default-model.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/defaults.js","/Users/user/Documents/HO/HOF/hof/components/clear-session/index.js","/Users/user/Documents/HO/HOF/hof/components/combine-and-loop-fields/index.js","/Users/user/Documents/HO/HOF/hof/components/date/index.js","/Users/user/Documents/HO/HOF/hof/components/date/fields.js","/Users/user/Documents/HO/HOF/hof/components/time/index.js","/Users/user/Documents/HO/HOF/hof/components/time/fields.js","/Users/user/Documents/HO/HOF/hof/components/emailer/index.js","/Users/user/Documents/HO/HOF/hof/components/emailer/email-service.js","/Users/user/Documents/HO/HOF/hof/components/emailer/emailer.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/index.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/smtp.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/ses.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/stub.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/debug.js","/Users/user/Documents/HO/HOF/hof/components/homeoffice-countries/index.js","/Users/user/Documents/HO/HOF/hof/config/component-defaults.js","/Users/user/Documents/HO/HOF/hof/components/notify/index.js","/Users/user/Documents/HO/HOF/hof/components/notify/notify.js","/Users/user/Documents/HO/HOF/hof/components/summary/index.js","/Users/user/Documents/HO/HOF/hof/config/rate-limits.js","/Users/user/Documents/HO/HOF/hof/middleware/rate-limiter.js","/Users/user/Documents/HO/HOF/hof/config/hof-defaults.js","/Users/user/Documents/HO/HOF/hof/components/session-timeout-warning/index.js","/Users/user/Documents/HO/HOF/hof/lib/logger.js","/Users/user/Documents/HO/HOF/hof/controller/base-controller.js","/Users/user/Documents/HO/HOF/hof/controller/formatting/index.js","/Users/user/Documents/HO/HOF/hof/controller/validation/index.js","/Users/user/Documents/HO/HOF/hof/controller/validation/validators.js","/Users/user/Documents/HO/HOF/hof/controller/validation/email.js","/Users/user/Documents/HO/HOF/hof/controller/validation-error.js","/Users/user/Documents/HO/HOF/hof/utilities/index.js","/Users/user/Documents/HO/HOF/hof/utilities/autofill/index.js","/Users/user/Documents/HO/HOF/hof/utilities/autofill/inputs.js","/Users/user/Documents/HO/HOF/hof/utilities/test-data/index.js","/Users/user/Documents/HO/HOF/hof/utilities/countries.js","/Users/user/Documents/HO/HOF/hof/utilities/helpers/index.js","/Users/user/Documents/HO/HOF/hof/utilities/reqres/index.js","/Users/user/Documents/HO/HOF/hof/config/sanitisation-rules.js","/Users/user/Documents/HO/HOF/hof/controller/formatting/formatters.js","/Users/user/Documents/HO/HOF/hof/controller/index.js","/Users/user/Documents/HO/HOF/hof/controller/behaviour-session.js","/Users/user/Documents/HO/HOF/hof/controller/behaviour-hooks.js","/Users/user/Documents/HO/HOF/hof/controller/controller.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/country-select.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/index.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/template-mixins.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/render.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/helpers.js","/Users/user/Documents/HO/HOF/hof/index.js","/Users/user/Documents/HO/HOF/hof/frontend/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/config.js","/Users/user/Documents/HO/HOF/hof/frontend/template-partials/index.js","/Users/user/Documents/HO/HOF/hof/frontend/template-partials/translations/index.js","/Users/user/Documents/HO/HOF/hof/frontend/themes/index.js","/Users/user/Documents/HO/HOF/hof/frontend/themes/gov-uk/index.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/index.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/helpers.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/form-focus.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/progressive-reveal.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/validation.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/character-count.js","/Users/user/Documents/HO/HOF/hof/middleware/index.js","/Users/user/Documents/HO/HOF/hof/middleware/cookies.js","/Users/user/Documents/HO/HOF/hof/middleware/errors.js","/Users/user/Documents/HO/HOF/hof/middleware/not-found.js","/Users/user/Documents/HO/HOF/hof/middleware/deep-translate.js","/Users/user/Documents/HO/HOF/hof/lib/markdown.js","/Users/user/Documents/HO/HOF/hof/lib/router.js","/Users/user/Documents/HO/HOF/hof/wizard/index.js","/Users/user/Documents/HO/HOF/hof/wizard/behaviours/index.js","/Users/user/Documents/HO/HOF/hof/wizard/behaviours/complete.js","/Users/user/Documents/HO/HOF/hof/wizard/util/constants.js","/Users/user/Documents/HO/HOF/hof/lib/helpers.js","/Users/user/Documents/HO/HOF/hof/lib/health.js","/Users/user/Documents/HO/HOF/hof/lib/serve-static.js","/Users/user/Documents/HO/HOF/hof/lib/ga-tag.js","/Users/user/Documents/HO/HOF/hof/lib/deindex.js","/Users/user/Documents/HO/HOF/hof/lib/sessions.js","/Users/user/Documents/HO/HOF/hof/lib/settings.js","/Users/user/Documents/HO/HOF/hof/build/index.js","/Users/user/Documents/HO/HOF/hof/config/builder-defaults.js","/Users/user/Documents/HO/HOF/hof/transpiler/index.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/compile.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/build.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/expand-dirs.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/aggregate.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/write-files.js","/Users/user/Documents/HO/HOF/hof/model/apis/index.js","/Users/user/Documents/HO/HOF/hof/model/apis/html-to-pdf-converter.js","/Users/user/Documents/HO/HOF/hof/wizard/model.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/back-links.js","/Users/user/Documents/HO/HOF/hof/wizard/util/helpers.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-complete.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-progress.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-session.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/csrf.js","/Users/user/Documents/HO/HOF/hof/sandbox/test/_unit/example_app/sections/summary-data-sections.spec.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/sections/summary-data-sections.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/lib/staticAppealStages.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/fields.js","/Users/user/Documents/HO/HOF/hof/sandbox/test/helpers/utilities.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/international-number.js","/Users/user/Documents/HO/HOF/hof/lib/encryption.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/session.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/session-model.js"]}
@@ -1 +1 @@
1
- {"processes":{"9376679c-295d-4483-8c62-60e08528311a":{"parent":null,"children":[]}},"files":{"/Users/user/Documents/HO/HOF/hof/model/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/model/apis/axios-settings.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/default-model.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/defaults.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/clear-session/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/combine-and-loop-fields/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/date/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/date/fields.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/emailer/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/emailer/email-service.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/emailer/emailer.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/smtp.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/ses.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/stub.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/debug.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/homeoffice-countries/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/config/component-defaults.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/notify/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/notify/notify.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/summary/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/config/rate-limits.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/middleware/rate-limiter.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/config/hof-defaults.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/components/session-timeout-warning/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/logger.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/base-controller.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/formatting/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/validation/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/validation/validators.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/validation/email.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/validation-error.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/utilities/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/utilities/autofill/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/utilities/autofill/inputs.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/utilities/test-data/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/utilities/countries.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/utilities/helpers/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/utilities/reqres/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/config/sanitisation-rules.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/formatting/formatters.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/behaviour-session.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/behaviour-hooks.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/controller/controller.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/country-select.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/template-mixins.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/render.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/helpers.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/config.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/template-partials/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/template-partials/translations/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/themes/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/themes/gov-uk/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/helpers.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/form-focus.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/progressive-reveal.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/validation.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/character-count.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/middleware/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/middleware/cookies.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/middleware/errors.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/middleware/not-found.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/middleware/deep-translate.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/markdown.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/router.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/behaviours/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/behaviours/complete.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/util/constants.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/helpers.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/health.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/serve-static.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/ga-tag.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/sessions.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/settings.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/build/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/config/builder-defaults.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/transpiler/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/compile.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/build.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/expand-dirs.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/aggregate.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/write-files.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/model/apis/index.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/model/apis/html-to-pdf-converter.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/model.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/back-links.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/util/helpers.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-complete.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-progress.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-session.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/csrf.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/sandbox/test/_unit/example_app/sections/summary-data-sections.spec.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/sections/summary-data-sections.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/lib/staticAppealStages.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/fields.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/sandbox/test/helpers/utilities.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/international-number.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/lib/encryption.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/session.js":["9376679c-295d-4483-8c62-60e08528311a"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/session-model.js":["9376679c-295d-4483-8c62-60e08528311a"]},"externalIds":{}}
1
+ {"processes":{"34671fe1-441d-41ed-b012-ece4e3964dbb":{"parent":null,"children":[]}},"files":{"/Users/user/Documents/HO/HOF/hof/model/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/model/apis/axios-settings.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/default-model.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/defaults.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/clear-session/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/combine-and-loop-fields/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/date/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/date/fields.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/time/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/time/fields.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/emailer/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/emailer/email-service.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/emailer/emailer.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/smtp.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/ses.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/stub.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/debug.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/homeoffice-countries/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/config/component-defaults.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/notify/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/notify/notify.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/summary/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/config/rate-limits.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/middleware/rate-limiter.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/config/hof-defaults.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/components/session-timeout-warning/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/logger.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/base-controller.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/formatting/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/validation/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/validation/validators.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/validation/email.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/validation-error.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/utilities/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/utilities/autofill/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/utilities/autofill/inputs.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/utilities/test-data/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/utilities/countries.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/utilities/helpers/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/utilities/reqres/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/config/sanitisation-rules.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/formatting/formatters.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/behaviour-session.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/behaviour-hooks.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/controller/controller.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/country-select.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/template-mixins.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/render.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/helpers.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/config.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/template-partials/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/template-partials/translations/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/themes/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/themes/gov-uk/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/helpers.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/form-focus.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/progressive-reveal.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/validation.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/character-count.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/middleware/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/middleware/cookies.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/middleware/errors.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/middleware/not-found.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/middleware/deep-translate.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/markdown.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/router.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/behaviours/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/behaviours/complete.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/util/constants.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/helpers.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/health.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/serve-static.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/ga-tag.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/deindex.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/sessions.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/settings.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/build/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/config/builder-defaults.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/transpiler/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/compile.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/build.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/expand-dirs.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/aggregate.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/write-files.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/model/apis/index.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/model/apis/html-to-pdf-converter.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/model.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/back-links.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/util/helpers.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-complete.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-progress.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-session.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/csrf.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/sandbox/test/_unit/example_app/sections/summary-data-sections.spec.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/sections/summary-data-sections.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/lib/staticAppealStages.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/fields.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/sandbox/test/helpers/utilities.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/international-number.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/lib/encryption.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/session.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/session-model.js":["34671fe1-441d-41ed-b012-ece4e3964dbb"]},"externalIds":{}}
package/CHANGELOG.md CHANGED
@@ -1,17 +1,18 @@
1
- ## 2024, Version 22.1.0, @Rhodine-orleans-lindsay
2
- * Adds session timeout warning content for save and exit forms
3
- - user can stay signed in page or save and exit form
4
- - adds default save-and-exit html
5
- * Fixes accessibility issues
6
- * Sandbox area for testing hof changes
7
- * Updates patch and minor dependency versions
1
+ ## 2025-01-24, Version 22.1.0 (Stable), @sulthan-ahmed
2
+ * ⛓️‍💥 **BREAKING CHANGE** : removed `nodemailer-smtp-transport` replaced with `nodemailer`.
3
+ - The nodemailer-smtp-transport package has been removed due to a critical vulnerability, and its functionality has been consolidated under nodemailer.
4
+ - 👊 Impact : Any functions or configurations relying on nodemailer-smtp-transport must be updated to use nodemailer.
5
+ - 🎬 Action: Rewrite code to utilize nodemailer as the replacement, ensuring compatibility and security.
8
6
 
9
- ## 2024, Version 22.0.0, @Rhodine-orleans-lindsay
7
+ ## 2025-01-17, Version 22.0.0 (Stable), @Rhodine-orleans-lindsay
10
8
  * Adds session timeout warning
11
- - user can stay on page or exit form
12
- - adds exit html
13
- - updates confirmation html to a static page
14
- - allows for customisation of session timeout warning dialog content and exit page content
9
+ - user can stay on page or exit form
10
+ - adds exit html
11
+ - user can stay signed in or save and exit the form if the form is a save and exit form
12
+ - adds default save-and-exit html
13
+ - updates confirmation html to a static page
14
+ - allows for customisation of session timeout warning dialog content, exit and save-and-exit page content, and exit and save-and-exit steps
15
+ - Potential **_breaking change_**: Static pages should use the `{{<layout}}...{{/layout}}` tags instead of the `{{<partials-page}}...{{/partials-page}}` tags if the timeout warning should not be displayed.
15
16
  * Fixes accessibility issues
16
17
  * Sandbox area for testing hof changes
17
18
  * Updates patch and minor dependency versions
@@ -19,23 +20,23 @@
19
20
  ## 2024-07-22, Version 21.0.0 (Stable), @Rhodine-orleans-lindsay
20
21
  * Replaces deprecated request module with axios
21
22
  - refactors the hof model and apis to use axios instead of request
22
- * Updates patch and minor dependency versions
23
+ * Updates patch and minor dependency versions
23
24
 
24
25
  ## 2024-04-24, Version 20.5.0 (Stable), @mislam987
25
26
  * Add hint property to checkboxes to align with govuk design guidelines
26
27
 
27
28
  ## 2024-02-29, Version 20.4.0 (Stable), @sulthan-ahmed
28
29
  * Update version of govuk-frontend to 3.15
29
- - this adds the new crown for the King
30
- - this supports a lot of changes from the govuk design system
30
+ - this adds the new crown for the King
31
+ - this supports a lot of changes from the govuk design system
31
32
  * Adds support for Google tag manager
32
33
  * Fixes accessibility issues
33
34
  * Sandbox area for testing hof changes
34
35
  * Updates patch and minor versions including
35
- - libphonenumber to 1.9.44
36
- - nodemailer to 6.9.9
37
- - ip to 1.1.9
38
- - es5-ext to 0.10.63
36
+ - libphonenumber to 1.9.44
37
+ - nodemailer to 6.9.9
38
+ - ip to 1.1.9
39
+ - es5-ext to 0.10.63
39
40
 
40
41
  ## 2020-06-02, Version 16.0.0 (Stable), @andymoody
41
42
  * Update version of helmet to 3.22.0
package/README.md CHANGED
@@ -1205,7 +1205,7 @@ The following transport options are available:
1205
1205
 
1206
1206
  #### `smtp`
1207
1207
 
1208
- [nodemailer-smtp-transport](https://github.com/andris9/nodemailer-smtp-transport)
1208
+ [nodemailer](https://github.com/nodemailer/nodemailer)
1209
1209
 
1210
1210
  ##### Options
1211
1211
 
@@ -1261,7 +1261,7 @@ This feature allows you to customise the content related to the session timeout
1261
1261
 
1262
1262
  ### Usage
1263
1263
 
1264
- To enable and customize the session timeout behavior, you need to set the component in your project's `hof.settings.json` file:
1264
+ To enable and customise the session timeout behavior, you need to set the component in your project's `hof.settings.json` file:
1265
1265
  ```js
1266
1266
  "behaviours": [
1267
1267
  "hof/components/session-timeout-warning"
@@ -1274,12 +1274,13 @@ By default, the framework uses the standard content provided by HOF. If you wish
1274
1274
  behaviours: [
1275
1275
  require('../').components.sessionTimeoutWarning
1276
1276
  ],
1277
- sessionTimeoutWarningContent: true,
1278
- exitFormContent: true
1277
+ sessionTimeoutWarningContent: true, // allows you to customise the content in the session timeout dialog box
1278
+ exitFormContent: true // allows you to customise the content on the exit page
1279
+ saveExitFormContent: true // allows you to customise the content on the save-and-exit page
1279
1280
  ```
1280
1281
 
1281
1282
  ### Customising content in `pages.json`
1282
- Once the variables are set, you can customize the session timeout warning and exit messages in your project's pages.json:
1283
+ Once the variables are set, you can customise the session timeout warning and exit messages in your project's pages.json:
1283
1284
 
1284
1285
  ```json
1285
1286
  "exit": {
@@ -1291,10 +1292,13 @@ Once the variables are set, you can customize the session timeout warning and ex
1291
1292
  "timeout-continue-button": "Stay on this page",
1292
1293
  "dialog-exit-link": "Exit this form"
1293
1294
  }
1295
+ "save-and-exit": {
1296
+ "message": "Any answers you saved have not been affected. You can sign back in to your application at any time by returning to the start page."
1297
+ },
1294
1298
  ```
1295
1299
 
1296
- ### Editing content on the Exit Page Header and Title
1297
- To edit the exit page's header and title, create an `exit.json` file in your project and set the desired content:
1300
+ ### Editing content on the Exit and Save-and-exit Page Header and Title
1301
+ To edit the exit or save-and-exit pages' header and title, create an `exit.json` or `save-and-exit.json` file in your project and set the desired content:
1298
1302
  ```json
1299
1303
  {
1300
1304
  "header": "You have left this form",
@@ -1302,6 +1306,39 @@ To edit the exit page's header and title, create an `exit.json` file in your pro
1302
1306
  }
1303
1307
  ```
1304
1308
 
1309
+ ### Customising exit and save-and-exit steps
1310
+ You can customise the `exit` and `save-and-exit` steps by setting the `exitStep` or `saveAndExitStep` properties in the `apps/<app_name>/index.js` to the desired path name:
1311
+
1312
+ ```js
1313
+ // customising exit step name
1314
+ module.exports = {
1315
+ name: 'sandbox',
1316
+ exitStep: '/leave',
1317
+ steps: {
1318
+ ...
1319
+ '/leave': {
1320
+ template: 'exit'
1321
+ }
1322
+ }
1323
+ ...
1324
+ }
1325
+ ```
1326
+
1327
+ ```js
1328
+ // customising save-and-exit step name
1329
+ module.exports = {
1330
+ name: 'sandbox',
1331
+ saveAndExitStep: '/sign-out',
1332
+ steps: {
1333
+ ...
1334
+ '/sign-out': {
1335
+ template: 'save-and-exit'
1336
+ }
1337
+ }
1338
+ ...
1339
+ }
1340
+ ```
1341
+
1305
1342
  # UTILITIES
1306
1343
 
1307
1344
  # Autofill Utility
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const smtp = require('nodemailer-smtp-transport');
3
+ const smtp = require('nodemailer');
4
4
 
5
5
  module.exports = options => {
6
6
  if (!options.host) {
@@ -5,6 +5,7 @@ module.exports = {
5
5
  clearSession: require('./clear-session'),
6
6
  combineAndLoopFields: require('./combine-and-loop-fields'),
7
7
  date: require('./date'),
8
+ time: require('./time'),
8
9
  emailer: require('./emailer'),
9
10
  homeOfficeCountries: require('./homeoffice-countries'),
10
11
  notify: require('./notify'),
@@ -51,6 +51,17 @@ module.exports = superclass => class extends superclass {
51
51
  superLocals.message = req.translate('exit.message');
52
52
  return superLocals;
53
53
  }
54
+
55
+ // set the content on /save-and-exit page
56
+ if (req.form.options.route === '/save-and-exit' && config.saveExitFormContent === true) {
57
+ superLocals.saveExitFormContent = true;
58
+ return superLocals;
59
+ } else if (req.form.options.route === '/save-and-exit' && config.saveExitFormContent === false) {
60
+ superLocals.header = req.translate('save-and-exit.header');
61
+ superLocals.title = req.translate('save-and-exit.title');
62
+ superLocals.message = req.translate('save-and-exit.message');
63
+ return superLocals;
64
+ }
54
65
  return superLocals;
55
66
  }
56
67
  };
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ module.exports = key => ({
4
+ [`${key}-hour`]: {
5
+ label: 'Hour',
6
+ autocomplete: 'time-hour'
7
+ },
8
+ [`${key}-minute`]: {
9
+ label: 'Minute',
10
+ autocomplete: 'time-minute'
11
+ }
12
+ });
@@ -0,0 +1,168 @@
1
+ 'use strict';
2
+
3
+ const _ = require('lodash');
4
+ const path = require('path');
5
+ const getFields = require('./fields');
6
+
7
+ const TEMPLATE = path.resolve(__dirname, './templates/time.html');
8
+
9
+ // utility function taking the req.body, fields and key,
10
+ // returns a map of values in the format:
11
+ // {
12
+ // hour: '12',
13
+ // minute: '01',
14
+ // }
15
+
16
+ const getParts = (body, fields, key) =>
17
+ _.mapKeys(_.pick(body, Object.keys(fields)), (value, fieldKey) =>
18
+ fieldKey.replace(`${key}-`, '')
19
+ );
20
+
21
+ // accepts a time value in the format kk-mm and fields config,
22
+ // returns a map of key: value pairs for the intermedate fields
23
+ const getPartsFromTime = (time, fields) =>
24
+ time.split(':')
25
+ .slice()
26
+ .reduce((obj, value, index) => Object.assign({}, obj, {
27
+ [fields[index]]: value
28
+ }), {});
29
+
30
+ // preprend '0' if number is only a single digit
31
+ const pad = num => num !== '' && num.length < 2 ? `0${num}` : num;
32
+
33
+ const conditionalTranslate = (key, translate) => {
34
+ let result = translate(key);
35
+ if (result === key) {
36
+ result = null;
37
+ }
38
+ return result;
39
+ };
40
+
41
+ const getLegendClassName = field => field && field.legend && field.legend.className || '';
42
+ const getIsPageHeading = field => field && field.isPageHeading || '';
43
+
44
+ module.exports = (key, opts) => {
45
+ if (!key) {
46
+ throw new Error('Key must be passed to time component');
47
+ }
48
+ const options = opts || {};
49
+ const template = options.template ?
50
+ path.resolve(__dirname, options.template) :
51
+ TEMPLATE;
52
+ const fields = getFields(key);
53
+
54
+ options.validate = _.uniq(options.validate ? ['time'].concat(options.validate) : ['time']);
55
+
56
+ let hourOptional = !!options.hourOptional;
57
+ const minuteOptional = !!options.minuteOptional;
58
+
59
+ if (minuteOptional) {
60
+ hourOptional = true;
61
+ }
62
+
63
+ // take the 2 time parts, padding or defaulting
64
+ // if applicable, then create a time value in the
65
+ // format kk:mm. Save to req.body for processing
66
+ const preProcess = (req, res, next) => {
67
+ const parts = getParts(req.body, fields, key);
68
+ if (_.some(parts, part => part !== '')) {
69
+ if (hourOptional && parts.hour === '') {
70
+ parts.hour = '01';
71
+ } else {
72
+ parts.hour = pad(parts.hour);
73
+ }
74
+ if (minuteOptional && parts.minute === '') {
75
+ parts.minute = '00';
76
+ } else {
77
+ parts.minute = pad(parts.minute);
78
+ }
79
+ req.body[key] = `${parts.hour}:${parts.minute}`;
80
+ }
81
+ next();
82
+ };
83
+
84
+ const postProcess = (req, res, next) => {
85
+ const value = req.form.values[key];
86
+ if (value) {
87
+ req.form.values[key] = req.body[key];
88
+ }
89
+ next();
90
+ };
91
+ // if time field is included in errorValues, extend
92
+ // errorValues with the individual components
93
+ const preGetErrors = (req, res, next) => {
94
+ const errorValues = req.sessionModel.get('errorValues');
95
+ if (errorValues && errorValues[key]) {
96
+ req.sessionModel.set('errorValues',
97
+ Object.assign({}, errorValues, getPartsFromTime(errorValues[key], Object.keys(fields)))
98
+ );
99
+ }
100
+ next();
101
+ };
102
+
103
+ // if time field has any validation error, also add errors
104
+ // for the two child components. null type as we don't want to show
105
+ // duplicate messages
106
+ const postGetErrors = (req, res, next) => {
107
+ const errors = req.sessionModel.get('errors');
108
+ if (errors && errors[key]) {
109
+ Object.assign(req.form.errors, Object.keys(fields).reduce((obj, field) =>
110
+ Object.assign({}, obj, { [field]: { type: null } })
111
+ , {}));
112
+ }
113
+ next();
114
+ };
115
+
116
+ // if time value is set, split its parts and assign to req.form.values.
117
+ // This is extended with errorValues if they are present
118
+ const postGetValues = (req, res, next) => {
119
+ const time = req.form.values[key];
120
+ if (time) {
121
+ Object.assign(
122
+ req.form.values,
123
+ getPartsFromTime(time, Object.keys(fields)),
124
+ req.sessionModel.get('errorValues') || {}
125
+ );
126
+ }
127
+ next();
128
+ };
129
+
130
+ // render the template to a string, assign the html output
131
+ // to the time field in res.locals.fields
132
+ const preRender = (req, res, next) => {
133
+ Object.assign(req.form.options.fields, _.mapValues(fields, (v, k) => {
134
+ const rawKey = k.replace(`${key}-`, '');
135
+ const labelKey = `fields.${key}.parts.${rawKey}`;
136
+ const label = req.translate(labelKey);
137
+ return Object.assign({}, v, {
138
+ label: label === labelKey ? v.label : label
139
+ });
140
+ }));
141
+ const legend = conditionalTranslate(`fields.${key}.legend`, req.translate);
142
+ const hint = conditionalTranslate(`fields.${key}.hint`, req.translate);
143
+ const legendClassName = getLegendClassName(options);
144
+ const isPageHeading = getIsPageHeading(options);
145
+ const error = req.form.errors && req.form.errors[key];
146
+ res.render(template, { key, legend, legendClassName, isPageHeading, hint, error }, (err, html) => {
147
+ if (err) {
148
+ next(err);
149
+ } else {
150
+ const field = res.locals.fields.find(f => f.key === key);
151
+ Object.assign(field, { html });
152
+ next();
153
+ }
154
+ });
155
+ };
156
+
157
+ // return config extended with hooks
158
+ return Object.assign({}, options, {
159
+ hooks: {
160
+ 'pre-process': preProcess,
161
+ 'post-process': postProcess,
162
+ 'pre-getErrors': preGetErrors,
163
+ 'post-getErrors': postGetErrors,
164
+ 'post-getValues': postGetValues,
165
+ 'pre-render': preRender
166
+ }
167
+ });
168
+ };
@@ -0,0 +1,20 @@
1
+ <div class="govuk-form-group {{#error}}govuk-form-group--error{{/error}}">
2
+ <fieldset id="{{key}}-group" class="govuk-fieldset{{#className}} {{className}}{{/className}}" role="group">
3
+ <legend class="govuk-fieldset__legend {{#isPageHeading}}govuk-fieldset__legend--l{{/isPageHeading}}{{#legendClassName}} {{legendClassName}}{{/legendClassName}}">
4
+ {{#isPageHeading}}<h1 class="govuk-fieldset__heading">{{/isPageHeading}}
5
+ {{legend}}
6
+ {{#isPageHeading}}</h1>{{/isPageHeading}}
7
+ </legend>
8
+ {{#hint}}
9
+ <span id="{{key}}-hint" class="govuk-hint">{{hint}}</span>
10
+ {{/hint}}
11
+ {{#error}}
12
+ <p id="{{key}}-error" class="govuk-error-message">
13
+ <span class="govuk-visually-hidden">Error:</span> {{error.message}}
14
+ </p>
15
+ {{/error}}
16
+ <div>
17
+ {{#input-time}}{{key}}{{/input-time}}
18
+ </div>
19
+ </fieldset>
20
+ </div>
@@ -16,6 +16,7 @@ const defaults = {
16
16
  getAccessibility: false,
17
17
  sessionTimeoutWarningContent: false,
18
18
  exitFormContent: false,
19
+ saveExitFormContent: false,
19
20
  viewEngine: 'html',
20
21
  protocol: process.env.PROTOCOL || 'http',
21
22
  noCache: process.env.NO_CACHE || false,
@@ -32,6 +33,7 @@ const defaults = {
32
33
  return convertPage(page);
33
34
  }
34
35
  },
36
+ deIndexForm: process.env.DEINDEX_FORM || 'false',
35
37
  gaCrossDomainTrackingTagId: process.env.GDS_CROSS_DOMAIN_GA_TAG,
36
38
  loglevel: process.env.LOG_LEVEL || 'info',
37
39
  ignoreMiddlewareLogs: ['/healthz'],
@@ -109,10 +109,14 @@ module.exports = class Controller extends BaseController {
109
109
  // only include fields that aren't dependents to mitigate duplicate fields on the page
110
110
  fields = fields.filter(field => !req.form.options.fields[field.key].dependent);
111
111
 
112
+ const exitStep = req.form.options.exitStep || '/exit';
113
+ const saveAndExitStep = req.form.options.saveAndExitStep || '/save-and-exit';
112
114
  return _.extend({}, locals, {
113
115
  fields,
114
116
  route,
115
117
  baseUrl: req.baseUrl,
118
+ exitStep,
119
+ saveAndExitStep,
116
120
  skipToMain: this.getFirstFormItem(req.form.options.fields),
117
121
  title: this.getTitle(route, lookup, req.form.options.fields, res.locals),
118
122
  journeyHeaderURL: this.getJourneyHeaderURL(req.baseUrl),
@@ -188,6 +192,11 @@ module.exports = class Controller extends BaseController {
188
192
  }
189
193
  // eslint-disable-next-line brace-style
190
194
  }
195
+ // get first field for time input control
196
+ else if (field && field.mixin === 'input-time') {
197
+ req.form.errors[key].errorLinkId = key + '-hour';
198
+ // eslint-disable-next-line brace-style
199
+ }
191
200
  // get first field for date input control
192
201
  else if (field && field.mixin === 'input-date') {
193
202
  req.form.errors[key].errorLinkId = key + '-day';
@@ -9,6 +9,7 @@ const emailValidator = require('./email');
9
9
  // validator methods should return false (or falsy value) for *invalid* input
10
10
  // and true (or truthy value) for *valid* input.
11
11
  const dateFormat = 'YYYY-MM-DD';
12
+ const timeFormat = 'kk:mm';
12
13
  let Validators;
13
14
 
14
15
  module.exports = Validators = {
@@ -128,6 +129,18 @@ module.exports = Validators = {
128
129
  return Validators.regex(value, /^\d{2}$/) && parseInt(value, 10) > 0 && parseInt(value, 10) < 32;
129
130
  },
130
131
 
132
+ time(value) {
133
+ return value === '' || Validators.regex(value, /\d{2}\:\d{2}/) && moment(value, timeFormat).isValid();
134
+ },
135
+
136
+ 'time-hour'(value) {
137
+ return Validators.regex(value, /^\d{2}$/) && parseInt(value, 10) >= 0 && parseInt(value, 10) < 24;
138
+ },
139
+
140
+ 'time-minute'(value) {
141
+ return Validators.regex(value, /^\d{2}$/) && parseInt(value, 10) >= 0 && parseInt(value, 10) < 59;
142
+ },
143
+
131
144
  // eslint-disable-next-line no-inline-comments, spaced-comment
132
145
  before(value, date) {
133
146
  // validator can also do before(value, [diff, unit][, diff, unit])