From 61e6b2f9cfb97b0992a129809e83484c26dbb042 Mon Sep 17 00:00:00 2001 From: Jez Barnsley Date: Thu, 23 Jul 2026 10:16:13 +0100 Subject: [PATCH 1/3] Stash --- src/server/constants.js | 1 + .../outputFormatters/adapter/v1.test.ts | 33 ++----------------- .../engine/outputFormatters/adapter/v1.ts | 8 ++--- .../pageControllers/SummaryPageController.ts | 4 ++- .../engine/services/notifyService.test.ts | 17 +++++++--- .../plugins/engine/services/notifyService.ts | 1 + src/server/types.ts | 1 + test/form/govuk-notify.test.js | 5 +-- test/form/journey-basic.test.js | 3 +- test/form/persist-files.test.js | 5 +-- test/form/repeat.test.js | 5 +-- 11 files changed, 34 insertions(+), 49 deletions(-) diff --git a/src/server/constants.js b/src/server/constants.js index bdc1a941c..3c63d9f5c 100644 --- a/src/server/constants.js +++ b/src/server/constants.js @@ -5,3 +5,4 @@ export const EXTERNAL_STATE_PAYLOAD = 'EXTERNAL_STATE_PAYLOAD' export const EXTERNAL_STATE_APPENDAGE = 'EXTERNAL_STATE_APPENDAGE' export const COMPONENT_STATE_ERROR = 'COMPONENT_STATE_ERROR' export const PAYMENT_EXPIRED_NOTIFICATION = 'PAYMENT_EXPIRED_NOTIFICATION' +export const EN_GB = 'en-GB' diff --git a/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts b/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts index 937f47528..7bd103e25 100644 --- a/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +++ b/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts @@ -3,6 +3,7 @@ import { type SubmitResponsePayload } from '@defra/forms-model' +import { EN_GB } from '~/src/server/constants.js' import { FileUploadField } from '~/src/server/plugins/engine/components/FileUploadField.js' import { type Field } from '~/src/server/plugins/engine/components/helpers/components.js' import { FormModel } from '~/src/server/plugins/engine/models/index.js' @@ -238,7 +239,8 @@ describe('Adapter v1 formatter', () => { formSlug: 'test-form', status: FormStatus.Live, isPreview: false, - notificationEmail: 'test@example.com' + notificationEmail: 'test@example.com', + language: EN_GB }) expect(parsedBody.data).toEqual({ @@ -868,33 +870,4 @@ describe('Adapter v1 formatter', () => { expect(parsedBody.meta.versionMetadata).toBeUndefined() }) }) - - describe('meta.language', () => { - const formStatus = { isPreview: false, state: FormStatus.Live } - - it('includes meta.language when the form definition specifies a language', () => { - const welshModel = new FormModel( - { ...definition, metadata: { language: 'cy' } }, - { basePath: 'test' } - ) - - const body = format( - context, - items, - welshModel, - submitResponse, - formStatus - ) - const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload - - expect(parsedBody.meta.language).toBe('cy') - }) - - it('omits meta.language when the form definition has no language set', () => { - const body = format(context, items, model, submitResponse, formStatus) - const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload - - expect(parsedBody.meta.language).toBeUndefined() - }) - }) }) diff --git a/src/server/plugins/engine/outputFormatters/adapter/v1.ts b/src/server/plugins/engine/outputFormatters/adapter/v1.ts index 772cc0e7c..2ffad6316 100644 --- a/src/server/plugins/engine/outputFormatters/adapter/v1.ts +++ b/src/server/plugins/engine/outputFormatters/adapter/v1.ts @@ -42,18 +42,14 @@ export function format( formSlug: formMetadata?.slug ?? '', status: formStatus.state, isPreview: formStatus.isPreview, - notificationEmail: formMetadata?.notificationEmail ?? '' + notificationEmail: formMetadata?.notificationEmail ?? '', + language: context.translator?.language ?? 'en-GB' } if (versionMetadata) { meta.versionMetadata = versionMetadata } - const definitionLanguage = model.def.metadata?.language - if (typeof definitionLanguage === 'string') { - meta.language = definitionLanguage - } - const main = Object.fromEntries( Object.entries(v2Main).map(([key, value]) => { if (value === undefined) { diff --git a/src/server/plugins/engine/pageControllers/SummaryPageController.ts b/src/server/plugins/engine/pageControllers/SummaryPageController.ts index e8c13716a..3bde80f35 100644 --- a/src/server/plugins/engine/pageControllers/SummaryPageController.ts +++ b/src/server/plugins/engine/pageControllers/SummaryPageController.ts @@ -481,6 +481,7 @@ export async function submitForm( emailAddress, items, submitResponse, + translator.language, formMetadata ) } catch (err) { @@ -557,7 +558,8 @@ function submitData( retrievalKey, referenceNumber, main: buildMainRecords(items, translator), - repeaters: buildRepeaterRecords(items, translator) + repeaters: buildRepeaterRecords(items, translator), + language: translator.language } return submit(payload) } diff --git a/src/server/plugins/engine/services/notifyService.test.ts b/src/server/plugins/engine/services/notifyService.test.ts index 1a9caf79f..b4c80e9e3 100644 --- a/src/server/plugins/engine/services/notifyService.test.ts +++ b/src/server/plugins/engine/services/notifyService.test.ts @@ -1,5 +1,6 @@ import { type FormMetadata } from '@defra/forms-model' +import { EN_GB } from '~/src/server/constants.js' import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers/index.js' import { checkFormStatus } from '~/src/server/plugins/engine/helpers.js' import { type FormModel } from '~/src/server/plugins/engine/models/index.js' @@ -72,7 +73,8 @@ describe('notifyService', () => { model, 'test@defra.gov.uk', items, - submitResponse + submitResponse, + EN_GB ) expect(sendNotificationMock).toHaveBeenCalledWith( @@ -108,7 +110,8 @@ describe('notifyService', () => { model, 'test@defra.gov.uk', items, - submitResponse + submitResponse, + EN_GB ) expect(sendNotificationMock).toHaveBeenCalledWith( @@ -146,7 +149,8 @@ describe('notifyService', () => { model, 'test@defra.gov.uk', items, - submitResponse + submitResponse, + EN_GB ) expect(sendNotificationMock).toHaveBeenCalledWith( @@ -193,6 +197,7 @@ describe('notifyService', () => { 'test@defra.gov.uk', items, submitResponse, + EN_GB, formMetadata ) @@ -244,7 +249,8 @@ describe('notifyService', () => { model, 'test@defra.gov.uk', items, - submitResponse + submitResponse, + EN_GB ) expect(getFormatter).toHaveBeenCalledWith('machine', '2') @@ -296,7 +302,8 @@ describe('notifyService', () => { model, 'test@defra.gov.uk', items, - submitResponse + submitResponse, + EN_GB ) ).rejects.toThrow('Notification service unavailable') diff --git a/src/server/plugins/engine/services/notifyService.ts b/src/server/plugins/engine/services/notifyService.ts index e6bd3ee0a..a3bbaf06d 100644 --- a/src/server/plugins/engine/services/notifyService.ts +++ b/src/server/plugins/engine/services/notifyService.ts @@ -28,6 +28,7 @@ export async function submit( emailAddress: string, items: DetailItem[], submitResponse: SubmitResponsePayload, + _language: string, formMetadata?: FormMetadata ) { if (!templateId) { diff --git a/src/server/types.ts b/src/server/types.ts index 02c30599a..ace3b0639 100644 --- a/src/server/types.ts +++ b/src/server/types.ts @@ -71,6 +71,7 @@ export interface OutputService { emailAddress: string, items: DetailItem[], submitResponse: SubmitResponsePayload, + language: string, formMetadata?: FormMetadata ) => Promise } diff --git a/test/form/govuk-notify.test.js b/test/form/govuk-notify.test.js index 49fa0ff5c..d244ae218 100644 --- a/test/form/govuk-notify.test.js +++ b/test/form/govuk-notify.test.js @@ -3,7 +3,7 @@ import { join } from 'node:path' import { StatusCodes } from 'http-status-codes' import { outdent } from 'outdent' -import { FORM_PREFIX } from '~/src/server/constants.js' +import { EN_GB, FORM_PREFIX } from '~/src/server/constants.js' import { createServer } from '~/src/server/index.js' import { persistFiles, @@ -341,7 +341,8 @@ describe('Submission journey test', () => { repeaters: [], retrievalKey: 'enrique.chase@defra.gov.uk', sessionId: expect.any(String), - referenceNumber: expect.any(String) + referenceNumber: expect.any(String), + language: EN_GB }) // Status page diff --git a/test/form/journey-basic.test.js b/test/form/journey-basic.test.js index f3adfb418..cc3d055e9 100644 --- a/test/form/journey-basic.test.js +++ b/test/form/journey-basic.test.js @@ -416,7 +416,8 @@ describe('Form journey', () => { repeaters: [], retrievalKey: 'enrique.chase@defra.gov.uk', sessionId: expect.any(String), - referenceNumber: expect.any(String) + referenceNumber: expect.any(String), + language: 'en-GB' }) expect(response.statusCode).toBe(StatusCodes.SEE_OTHER) diff --git a/test/form/persist-files.test.js b/test/form/persist-files.test.js index 1a1762597..4bc5bb384 100644 --- a/test/form/persist-files.test.js +++ b/test/form/persist-files.test.js @@ -2,7 +2,7 @@ import { join } from 'node:path' import { StatusCodes } from 'http-status-codes' -import { FORM_PREFIX } from '~/src/server/constants.js' +import { EN_GB, FORM_PREFIX } from '~/src/server/constants.js' import { createServer } from '~/src/server/index.js' import { persistFiles, @@ -196,7 +196,8 @@ describe('Submission journey test', () => { repeaters: [], retrievalKey: 'enrique.chase@defra.gov.uk', sessionId: expect.any(String), - referenceNumber: expect.any(String) + referenceNumber: expect.any(String), + language: EN_GB }) expect(submitRes.statusCode).toBe(StatusCodes.SEE_OTHER) diff --git a/test/form/repeat.test.js b/test/form/repeat.test.js index 8ad25e163..189efbd1c 100644 --- a/test/form/repeat.test.js +++ b/test/form/repeat.test.js @@ -5,7 +5,7 @@ import { hasRepeater } from '@defra/forms-model' import { within } from '@testing-library/dom' import { StatusCodes } from 'http-status-codes' -import { FORM_PREFIX } from '~/src/server/constants.js' +import { EN_GB, FORM_PREFIX } from '~/src/server/constants.js' import { createServer } from '~/src/server/index.js' import { isRepeatState } from '~/src/server/plugins/engine/components/FormComponent.js' import { getCacheService } from '~/src/server/plugins/engine/helpers.js' @@ -631,7 +631,8 @@ describe('Repeat POST tests', () => { ], retrievalKey: 'enrique.chase@defra.gov.uk', sessionId: expect.any(String), - referenceNumber: expect.any(String) + referenceNumber: expect.any(String), + language: EN_GB }) }) From 4b489e37dfb73e9e48f312cb795ae42824a067fc Mon Sep 17 00:00:00 2001 From: Jez Barnsley Date: Thu, 23 Jul 2026 13:41:08 +0100 Subject: [PATCH 2/3] Fix to translated repeater name in mini-summary and CYA --- src/server/plugins/engine/models/SummaryViewModel.ts | 8 ++++---- .../engine/pageControllers/RepeatPageController.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/plugins/engine/models/SummaryViewModel.ts b/src/server/plugins/engine/models/SummaryViewModel.ts index 846336301..a7645efbf 100644 --- a/src/server/plugins/engine/models/SummaryViewModel.ts +++ b/src/server/plugins/engine/models/SummaryViewModel.ts @@ -212,12 +212,12 @@ function ItemRepeat( translator: Translator ): DetailItemRepeat { const { collection, repeat } = page - const { name, title } = repeat.options - + const { name } = repeat.options + const { t, tPage } = translator + const title = tPage(page.pageDef, 'repeatTitle') || repeat.options.title const values = page.getListFromState(state) const count = values.length - const value = - count === 0 ? '' : translator.t('pages.repeater.pageTitle', { count }) + const value = count === 0 ? '' : t('pages.repeater.pageTitle', { count }) return { name, diff --git a/src/server/plugins/engine/pageControllers/RepeatPageController.ts b/src/server/plugins/engine/pageControllers/RepeatPageController.ts index b660dd532..1a482e968 100644 --- a/src/server/plugins/engine/pageControllers/RepeatPageController.ts +++ b/src/server/plugins/engine/pageControllers/RepeatPageController.ts @@ -406,9 +406,9 @@ export class RepeatPageController extends QuestionPageController { const { query } = request const { isForceAccess, errors } = context - const { t } = translator + const { t, tPage } = translator - const { title } = repeat.options + const title = tPage(this.pageDef, 'repeatTitle') || repeat.options.title const summaryList: SummaryList = { classes: 'govuk-summary-list--long-actions', From bb89df1dbdcfec7a7eb2c29e3ad3ddd770f4b319 Mon Sep 17 00:00:00 2001 From: Jez Barnsley Date: Thu, 23 Jul 2026 15:17:32 +0100 Subject: [PATCH 3/3] Model bump --- package-lock.json | 148 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3dd26f1bb..c1352184c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { - "@defra/forms-model": "^3.0.687", + "@defra/forms-model": "^3.0.689", "@defra/hapi-tracing": "^1.29.0", "@defra/interactive-map": "^0.0.33-alpha", "@elastic/ecs-pino-format": "^1.5.0", @@ -3669,9 +3669,9 @@ } }, "node_modules/@defra/forms-model": { - "version": "3.0.687", - "resolved": "https://registry.npmjs.org/@defra/forms-model/-/forms-model-3.0.687.tgz", - "integrity": "sha512-hQSy4ZqFXkvhzsGEA2n/Xh4Qw3JZwreVNh1/bO1oToY2Qzutwyd8txOb5dpXjnX+0o7sClIVwSF8VBYU1fD7Lw==", + "version": "3.0.689", + "resolved": "https://registry.npmjs.org/@defra/forms-model/-/forms-model-3.0.689.tgz", + "integrity": "sha512-cDFE/2sVFIxt7CzVGw9EYv+jxmFuMsR1QS9zGlK5RHedyf13jNSch0uHFcENhk+YRan1kwa7AeQyOeyxwtbopg==", "license": "OGL-UK-3.0", "dependencies": { "@joi/date": "^2.1.1", @@ -4592,9 +4592,9 @@ } }, "node_modules/@docusaurus/bundler/node_modules/svgo": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", - "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.4.tgz", + "integrity": "sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==", "dev": true, "license": "MIT", "dependencies": { @@ -6375,9 +6375,9 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -6733,9 +6733,9 @@ } }, "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", "dev": true, "license": "MIT", "dependencies": { @@ -12066,16 +12066,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz", + "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { @@ -13473,9 +13473,9 @@ } }, "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", "dev": true, "license": "MIT", "dependencies": { @@ -13741,9 +13741,9 @@ "license": "BSD-3-Clause" }, "node_modules/body-parser": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", - "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", + "version": "1.20.6", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz", + "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==", "dev": true, "license": "MIT", "dependencies": { @@ -13847,9 +13847,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, "license": "MIT", "dependencies": { @@ -14826,15 +14826,15 @@ "license": "MIT" }, "node_modules/concurrently": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.3.tgz", - "integrity": "sha512-ihjs0E2SxvDgq/MK418hX6YycQgKhsqxpbZuZbHo0yKfqDWdymWMjWYIpCIzqDDLLKClHlXev8whW/8WXmJ0BA==", + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.4.tgz", + "integrity": "sha512-TZ0CEhyzvFjgtAvHTusDMgj7wNdihCh7LLLrzdUOXIhdlnL2JBBGA9eJxR24rtqgmdjh3OA3hrN1rCHj6HM8qA==", "dev": true, "license": "MIT", "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", - "shell-quote": "1.8.4", + "shell-quote": "1.9.0", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" @@ -15879,9 +15879,9 @@ } }, "node_modules/css-minimizer-webpack-plugin/node_modules/svgo": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", - "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.4.tgz", + "integrity": "sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==", "dev": true, "license": "MIT", "dependencies": { @@ -16606,9 +16606,9 @@ } }, "node_modules/cssnano-preset-advanced/node_modules/svgo": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", - "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.4.tgz", + "integrity": "sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==", "dev": true, "license": "MIT", "dependencies": { @@ -18215,16 +18215,16 @@ } }, "node_modules/eslint-plugin-import-x/node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz", + "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/eslint-plugin-import-x/node_modules/minimatch": { @@ -18966,9 +18966,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", "dev": true, "funding": [ { @@ -20049,9 +20049,9 @@ } }, "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -21000,9 +21000,9 @@ "license": "MIT" }, "node_modules/immutable": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", - "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", "dev": true, "license": "MIT" }, @@ -22370,9 +22370,9 @@ } }, "node_modules/jest-config/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", "dev": true, "license": "MIT", "dependencies": { @@ -23078,9 +23078,9 @@ } }, "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", "dev": true, "license": "MIT", "dependencies": { @@ -23493,9 +23493,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", - "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", "dev": true, "funding": [ { @@ -28582,9 +28582,9 @@ } }, "node_modules/polygon-splitter/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -32792,9 +32792,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", - "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz", + "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==", "dev": true, "license": "MIT", "engines": { @@ -34020,9 +34020,9 @@ "dev": true }, "node_modules/svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", - "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz", + "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==", "dev": true, "license": "MIT", "dependencies": { @@ -35859,9 +35859,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.5.tgz", - "integrity": "sha512-4wZtCquSuv9CKX8oybo+mqxtxZqWz47uM1Ch94lxowBztOhWCbhqvRbfC/mODOwxgV2brY+JGZpHq58/SuVFYg==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.6.tgz", + "integrity": "sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw==", "dev": true, "license": "MIT", "dependencies": { @@ -35883,7 +35883,7 @@ "graceful-fs": "^4.2.6", "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", + "launch-editor": "^2.14.1", "open": "^10.0.3", "p-retry": "^6.2.0", "schema-utils": "^4.2.0", @@ -36049,9 +36049,9 @@ } }, "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.5.tgz", + "integrity": "sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 9816045c8..ae9e6481e 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ }, "license": "SEE LICENSE IN LICENSE", "dependencies": { - "@defra/forms-model": "^3.0.687", + "@defra/forms-model": "^3.0.689", "@defra/hapi-tracing": "^1.29.0", "@defra/interactive-map": "^0.0.33-alpha", "@elastic/ecs-pino-format": "^1.5.0",