@defra/forms-engine-plugin 2.1.5 → 2.1.7
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/.server/server/plugins/engine/components/ComponentBase.d.ts +2 -2
- package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.d.ts +2 -2
- package/.server/server/plugins/engine/components/ComponentCollection.js +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/TelephoneNumberField.js +1 -1
- package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/YesNoField.js +1 -1
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
- package/.server/server/plugins/engine/components/{helpers.d.ts → helpers/components.d.ts} +3 -10
- package/.server/server/plugins/engine/components/{helpers.js → helpers/components.js} +16 -29
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -0
- package/.server/server/plugins/engine/components/helpers/index.d.ts +11 -0
- package/.server/server/plugins/engine/components/helpers/index.js +15 -0
- package/.server/server/plugins/engine/components/helpers/index.js.map +1 -0
- package/.server/server/plugins/engine/helpers.d.ts +1 -1
- package/.server/server/plugins/engine/helpers.js +1 -1
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.d.ts +2 -2
- package/.server/server/plugins/engine/models/FormModel.js +2 -2
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.js +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/models/types.d.ts +2 -2
- package/.server/server/plugins/engine/models/types.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +1 -1
- 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/v1.js +1 -1
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/index.d.ts +9 -0
- package/.server/server/plugins/engine/pageControllers/helpers/index.js +15 -0
- package/.server/server/plugins/engine/pageControllers/helpers/index.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/{helpers.d.ts → helpers/pages.d.ts} +1 -10
- package/.server/server/plugins/engine/pageControllers/{helpers.js → helpers/pages.js} +2 -17
- package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -0
- package/.server/server/plugins/engine/routes/index.d.ts +1 -1
- package/.server/server/plugins/engine/routes/index.js.map +1 -1
- package/.server/server/plugins/engine/routes/questions.js.map +1 -1
- package/.server/server/plugins/engine/services/notifyService.js +1 -1
- package/.server/server/plugins/engine/services/notifyService.js.map +1 -1
- package/.server/server/plugins/engine/types/enums.d.ts +13 -0
- package/.server/server/plugins/engine/types/enums.js +17 -0
- package/.server/server/plugins/engine/types/enums.js.map +1 -0
- package/.server/server/plugins/engine/types/index.d.ts +2 -1
- package/.server/server/plugins/engine/types/index.js +2 -1
- package/.server/server/plugins/engine/types/index.js.map +1 -1
- package/.server/server/plugins/engine/types/schema.js +1 -1
- package/.server/server/plugins/engine/types/schema.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +5 -17
- package/.server/server/plugins/engine/types.js +1 -16
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.js +2 -2
- package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.test.js +2 -2
- package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
- package/package.json +1 -1
- package/src/server/plugins/engine/components/AutocompleteField.test.ts +1 -1
- package/src/server/plugins/engine/components/CheckboxesField.test.ts +1 -1
- package/src/server/plugins/engine/components/ComponentBase.ts +2 -2
- package/src/server/plugins/engine/components/ComponentCollection.ts +2 -2
- package/src/server/plugins/engine/components/DatePartsField.test.ts +1 -1
- package/src/server/plugins/engine/components/Details.test.ts +1 -1
- package/src/server/plugins/engine/components/EmailAddressField.test.ts +1 -1
- package/src/server/plugins/engine/components/FileUploadField.test.ts +2 -2
- package/src/server/plugins/engine/components/Html.test.ts +1 -1
- package/src/server/plugins/engine/components/InsetText.test.ts +1 -1
- package/src/server/plugins/engine/components/List.test.ts +1 -1
- package/src/server/plugins/engine/components/Markdown.test.ts +1 -1
- package/src/server/plugins/engine/components/MonthYearField.test.ts +1 -1
- package/src/server/plugins/engine/components/MultilineTextField.test.ts +1 -1
- package/src/server/plugins/engine/components/NumberField.test.ts +1 -1
- package/src/server/plugins/engine/components/RadiosField.test.ts +1 -1
- package/src/server/plugins/engine/components/SelectField.test.ts +1 -1
- package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +1 -1
- package/src/server/plugins/engine/components/TelephoneNumberField.ts +1 -1
- package/src/server/plugins/engine/components/TextField.test.ts +1 -1
- package/src/server/plugins/engine/components/UkAddressField.test.ts +1 -1
- package/src/server/plugins/engine/components/YesNoField.test.ts +1 -1
- package/src/server/plugins/engine/components/YesNoField.ts +1 -1
- package/src/server/plugins/engine/components/{helpers.ts → helpers/components.ts} +41 -77
- package/src/server/plugins/engine/components/{helpers.test.ts → helpers/helpers.test.ts} +1 -1
- package/src/server/plugins/engine/components/helpers/index.ts +38 -0
- package/src/server/plugins/engine/helpers.test.ts +1 -1
- package/src/server/plugins/engine/helpers.ts +2 -2
- package/src/server/plugins/engine/models/FormModel.ts +2 -2
- package/src/server/plugins/engine/models/SummaryViewModel.test.ts +1 -1
- package/src/server/plugins/engine/models/SummaryViewModel.ts +2 -2
- package/src/server/plugins/engine/models/types.ts +4 -4
- package/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +2 -2
- package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +1 -1
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -4
- package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +1 -1
- package/src/server/plugins/engine/outputFormatters/machine/v1.ts +1 -1
- package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +1 -1
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +1 -1
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +1 -1
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +1 -1
- package/src/server/plugins/engine/pageControllers/{helpers.test.ts → helpers/helpers.test.ts} +2 -2
- package/src/server/plugins/engine/pageControllers/helpers/index.ts +20 -0
- package/src/server/plugins/engine/pageControllers/{helpers.ts → helpers/pages.ts} +1 -22
- package/src/server/plugins/engine/routes/index.ts +1 -1
- package/src/server/plugins/engine/routes/questions.test.ts +1 -1
- package/src/server/plugins/engine/routes/questions.ts +1 -1
- package/src/server/plugins/engine/services/notifyService.test.ts +1 -1
- package/src/server/plugins/engine/services/notifyService.ts +1 -1
- package/src/server/plugins/engine/types/enums.ts +15 -0
- package/src/server/plugins/engine/types/index.ts +2 -5
- package/src/server/plugins/engine/types/schema.test.ts +1 -1
- package/src/server/plugins/engine/types/schema.ts +1 -1
- package/src/server/plugins/engine/types.ts +12 -18
- package/src/server/plugins/nunjucks/filters/answer.js +2 -2
- package/src/server/plugins/nunjucks/filters/answer.test.js +7 -4
- package/.server/server/plugins/engine/components/helpers.js.map +0 -1
- package/.server/server/plugins/engine/pageControllers/helpers.js.map +0 -1
|
@@ -9,7 +9,7 @@ import { serverWithSaveAndReturn } from '~/src/server/plugins/engine/pageControl
|
|
|
9
9
|
import {
|
|
10
10
|
createPage,
|
|
11
11
|
type PageControllerClass
|
|
12
|
-
} from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
12
|
+
} from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
13
13
|
import {
|
|
14
14
|
type FormContext,
|
|
15
15
|
type FormContextRequest,
|
|
@@ -3,7 +3,7 @@ import { type Section } from '@defra/forms-model'
|
|
|
3
3
|
import {
|
|
4
4
|
getAnswer,
|
|
5
5
|
type Field
|
|
6
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
6
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
7
7
|
import {
|
|
8
8
|
type BackLink,
|
|
9
9
|
type ComponentViewModel
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
type DetailItemRepeat
|
|
21
21
|
} from '~/src/server/plugins/engine/models/types.js'
|
|
22
22
|
import { RepeatPageController } from '~/src/server/plugins/engine/pageControllers/RepeatPageController.js'
|
|
23
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
23
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
24
24
|
import { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
|
|
25
25
|
import {
|
|
26
26
|
type CheckAnswers,
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
import { type Expression } from 'expr-eval'
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
type
|
|
11
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
9
|
+
getAnswer,
|
|
10
|
+
type Field
|
|
11
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
12
12
|
import { type RepeatPageController } from '~/src/server/plugins/engine/pageControllers/RepeatPageController.js'
|
|
13
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
13
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
14
14
|
import {
|
|
15
15
|
type FormState,
|
|
16
16
|
type FormSubmissionError
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type FormMetadata } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { FileUploadField } from '~/src/server/plugins/engine/components/FileUploadField.js'
|
|
4
|
-
import { type Field } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { type Field } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
6
6
|
import {
|
|
7
7
|
type DetailItem,
|
|
@@ -10,9 +10,9 @@ import {
|
|
|
10
10
|
} from '~/src/server/plugins/engine/models/types.js'
|
|
11
11
|
import { format } from '~/src/server/plugins/engine/outputFormatters/adapter/v1.js'
|
|
12
12
|
import { buildFormContextRequest } from '~/src/server/plugins/engine/pageControllers/__stubs__/request.js'
|
|
13
|
+
import { FormAdapterSubmissionSchemaVersion } from '~/src/server/plugins/engine/types/index.js'
|
|
13
14
|
import {
|
|
14
15
|
FileStatus,
|
|
15
|
-
FormAdapterSubmissionSchemaVersion,
|
|
16
16
|
UploadStatus,
|
|
17
17
|
type FileState,
|
|
18
18
|
type FormAdapterSubmissionMessagePayload
|
|
@@ -7,8 +7,8 @@ import { type checkFormStatus } from '~/src/server/plugins/engine/helpers.js'
|
|
|
7
7
|
import { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
8
8
|
import { type DetailItem } from '~/src/server/plugins/engine/models/types.js'
|
|
9
9
|
import { format as machineV2 } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'
|
|
10
|
+
import { FormAdapterSubmissionSchemaVersion } from '~/src/server/plugins/engine/types/enums.js'
|
|
10
11
|
import {
|
|
11
|
-
FormAdapterSubmissionSchemaVersion,
|
|
12
12
|
type FormAdapterSubmissionMessageData,
|
|
13
13
|
type FormAdapterSubmissionMessagePayload,
|
|
14
14
|
type FormContext
|
|
@@ -5,10 +5,8 @@ import {
|
|
|
5
5
|
import { addDays, format as dateFormat } from 'date-fns'
|
|
6
6
|
|
|
7
7
|
import { config } from '~/src/config/index.js'
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
getAnswer
|
|
11
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
8
|
+
import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
9
|
+
import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers/index.js'
|
|
12
10
|
import { type checkFormStatus } from '~/src/server/plugins/engine/helpers.js'
|
|
13
11
|
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
14
12
|
import { type DetailItem } from '~/src/server/plugins/engine/models/types.js'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
2
2
|
|
|
3
3
|
import { FileUploadField } from '~/src/server/plugins/engine/components/FileUploadField.js'
|
|
4
|
-
import { type Field } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { type Field } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
6
6
|
import {
|
|
7
7
|
type DetailItem,
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from '@defra/forms-model'
|
|
5
5
|
|
|
6
6
|
import { config } from '~/src/config/index.js'
|
|
7
|
-
import { getAnswer } from '~/src/server/plugins/engine/components/helpers.js'
|
|
7
|
+
import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
8
8
|
import { FileUploadField } from '~/src/server/plugins/engine/components/index.js'
|
|
9
9
|
import { type checkFormStatus } from '~/src/server/plugins/engine/helpers.js'
|
|
10
10
|
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
2
2
|
|
|
3
3
|
import { FileUploadField } from '~/src/server/plugins/engine/components/FileUploadField.js'
|
|
4
|
-
import { type Field } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { type Field } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
6
6
|
import {
|
|
7
7
|
type DetailItem,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from '~/src/server/plugins/engine/pageControllers/FileUploadPageController.js'
|
|
16
16
|
import { QuestionPageController } from '~/src/server/plugins/engine/pageControllers/QuestionPageController.js'
|
|
17
17
|
import { serverWithSaveAndReturn } from '~/src/server/plugins/engine/pageControllers/__stubs__/server.js'
|
|
18
|
-
import * as pageHelpers from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
18
|
+
import * as pageHelpers from '~/src/server/plugins/engine/pageControllers/helpers/index.js'
|
|
19
19
|
import * as uploadService from '~/src/server/plugins/engine/services/uploadService.js'
|
|
20
20
|
import {
|
|
21
21
|
FileStatus,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from '~/src/server/plugins/engine/helpers.js'
|
|
16
16
|
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
17
17
|
import { QuestionPageController } from '~/src/server/plugins/engine/pageControllers/QuestionPageController.js'
|
|
18
|
-
import { getProxyUrlForLocalDevelopment } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
18
|
+
import { getProxyUrlForLocalDevelopment } from '~/src/server/plugins/engine/pageControllers/helpers/index.js'
|
|
19
19
|
import {
|
|
20
20
|
getUploadStatus,
|
|
21
21
|
initiateUpload
|
|
@@ -9,7 +9,7 @@ import { type ResponseToolkit, type RouteOptions } from '@hapi/hapi'
|
|
|
9
9
|
|
|
10
10
|
import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
|
|
11
11
|
import { FileUploadField } from '~/src/server/plugins/engine/components/FileUploadField.js'
|
|
12
|
-
import { getAnswer } from '~/src/server/plugins/engine/components/helpers.js'
|
|
12
|
+
import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
13
13
|
import {
|
|
14
14
|
checkEmailAddressForLiveFormSubmission,
|
|
15
15
|
checkFormStatus,
|
package/src/server/plugins/engine/pageControllers/{helpers.test.ts → helpers/helpers.test.ts}
RENAMED
|
@@ -8,12 +8,12 @@ import {
|
|
|
8
8
|
|
|
9
9
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
10
10
|
import { PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'
|
|
11
|
+
import { getProxyUrlForLocalDevelopment } from '~/src/server/plugins/engine/pageControllers/helpers/index.js'
|
|
11
12
|
import {
|
|
12
13
|
createPage,
|
|
13
|
-
getProxyUrlForLocalDevelopment,
|
|
14
14
|
isPageController,
|
|
15
15
|
type PageControllerType
|
|
16
|
-
} from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
16
|
+
} from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
17
17
|
import {
|
|
18
18
|
FileUploadPageController,
|
|
19
19
|
QuestionPageController,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In local development environments, we sometimes need to rewrite the
|
|
3
|
+
* CDP upload URL to work with CSP/CORS restrictions.
|
|
4
|
+
* This helper function rewrites localhost URLs to use the sslip.io proxy
|
|
5
|
+
* This is only used when running locally with a development proxy.
|
|
6
|
+
* In non-local environments, this function returns null
|
|
7
|
+
* @param uploadUrl - The original upload URL from CDP
|
|
8
|
+
*/
|
|
9
|
+
export function getProxyUrlForLocalDevelopment(
|
|
10
|
+
uploadUrl?: string
|
|
11
|
+
): string | null {
|
|
12
|
+
if (!uploadUrl?.includes('localhost:7337')) {
|
|
13
|
+
return null
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return uploadUrl.replace(
|
|
17
|
+
/localhost:7337/g,
|
|
18
|
+
'uploader.127.0.0.1.sslip.io:7300'
|
|
19
|
+
)
|
|
20
|
+
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
type Page
|
|
6
6
|
} from '@defra/forms-model'
|
|
7
7
|
|
|
8
|
-
import { type FormModel } from '~/src/server/plugins/engine/models/
|
|
8
|
+
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
9
9
|
import * as PageControllers from '~/src/server/plugins/engine/pageControllers/index.js'
|
|
10
10
|
|
|
11
11
|
export function isPageController(
|
|
@@ -78,24 +78,3 @@ export function createPage(model: FormModel, pageDef: Page) {
|
|
|
78
78
|
|
|
79
79
|
return controller
|
|
80
80
|
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* In local development environments, we sometimes need to rewrite the
|
|
84
|
-
* CDP upload URL to work with CSP/CORS restrictions.
|
|
85
|
-
* This helper function rewrites localhost URLs to use the sslip.io proxy
|
|
86
|
-
* This is only used when running locally with a development proxy.
|
|
87
|
-
* In non-local environments, this function returns null
|
|
88
|
-
* @param uploadUrl - The original upload URL from CDP
|
|
89
|
-
*/
|
|
90
|
-
export function getProxyUrlForLocalDevelopment(
|
|
91
|
-
uploadUrl?: string
|
|
92
|
-
): string | null {
|
|
93
|
-
if (!uploadUrl?.includes('localhost:7337')) {
|
|
94
|
-
return null
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return uploadUrl.replace(
|
|
98
|
-
/localhost:7337/g,
|
|
99
|
-
'uploader.127.0.0.1.sslip.io:7300'
|
|
100
|
-
)
|
|
101
|
-
}
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
proceed
|
|
18
18
|
} from '~/src/server/plugins/engine/helpers.js'
|
|
19
19
|
import { FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
20
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
20
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
21
21
|
import { generateUniqueReference } from '~/src/server/plugins/engine/referenceNumbers.js'
|
|
22
22
|
import * as defaultServices from '~/src/server/plugins/engine/services/index.js'
|
|
23
23
|
import {
|
|
@@ -4,7 +4,7 @@ import { type ResponseObject, type ResponseToolkit } from '@hapi/hapi'
|
|
|
4
4
|
import nock from 'nock'
|
|
5
5
|
|
|
6
6
|
import { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
7
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
7
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
8
8
|
import { redirectOrMakeHandler } from '~/src/server/plugins/engine/routes/index.js'
|
|
9
9
|
import {
|
|
10
10
|
makeGetHandler,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from '~/src/server/plugins/engine/models/index.js'
|
|
20
20
|
import { format } from '~/src/server/plugins/engine/outputFormatters/machine/v1.js'
|
|
21
21
|
import { getFormSubmissionData } from '~/src/server/plugins/engine/pageControllers/SummaryPageController.js'
|
|
22
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
22
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
23
23
|
import {
|
|
24
24
|
dispatchHandler,
|
|
25
25
|
redirectOrMakeHandler
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type FormMetadata } from '@defra/forms-model'
|
|
2
2
|
|
|
3
|
-
import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers.js'
|
|
3
|
+
import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers/index.js'
|
|
4
4
|
import { checkFormStatus } from '~/src/server/plugins/engine/helpers.js'
|
|
5
5
|
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
6
6
|
import { type DetailItem } from '~/src/server/plugins/engine/models/types.js'
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from '@defra/forms-model'
|
|
6
6
|
|
|
7
7
|
import { config } from '~/src/config/index.js'
|
|
8
|
-
import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers.js'
|
|
8
|
+
import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers/index.js'
|
|
9
9
|
import { checkFormStatus } from '~/src/server/plugins/engine/helpers.js'
|
|
10
10
|
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
11
11
|
import { type DetailItem } from '~/src/server/plugins/engine/models/types.js'
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export enum UploadStatus {
|
|
2
|
+
initiated = 'initiated',
|
|
3
|
+
pending = 'pending',
|
|
4
|
+
ready = 'ready'
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export enum FileStatus {
|
|
8
|
+
complete = 'complete',
|
|
9
|
+
rejected = 'rejected',
|
|
10
|
+
pending = 'pending'
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export enum FormAdapterSubmissionSchemaVersion {
|
|
14
|
+
V1 = 1
|
|
15
|
+
}
|
|
@@ -41,11 +41,7 @@ export type {
|
|
|
41
41
|
UploadStatusResponse
|
|
42
42
|
} from '~/src/server/plugins/engine/types.js'
|
|
43
43
|
|
|
44
|
-
export {
|
|
45
|
-
FileStatus,
|
|
46
|
-
FormAdapterSubmissionSchemaVersion,
|
|
47
|
-
UploadStatus
|
|
48
|
-
} from '~/src/server/plugins/engine/types.js'
|
|
44
|
+
export { FileStatus, UploadStatus } from '~/src/server/plugins/engine/types.js'
|
|
49
45
|
|
|
50
46
|
export type {
|
|
51
47
|
Detail,
|
|
@@ -94,3 +90,4 @@ export type {
|
|
|
94
90
|
export type { RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'
|
|
95
91
|
|
|
96
92
|
export * from '~/src/server/plugins/engine/types/schema.js'
|
|
93
|
+
export { FormAdapterSubmissionSchemaVersion } from '~/src/server/plugins/engine/types/enums.js'
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { FormStatus } from '@defra/forms-model'
|
|
2
2
|
|
|
3
|
+
import { FormAdapterSubmissionSchemaVersion } from '~/src/server/plugins/engine/types/enums.js'
|
|
3
4
|
import {
|
|
4
5
|
formAdapterSubmissionMessageDataSchema,
|
|
5
6
|
formAdapterSubmissionMessageMetaSchema,
|
|
6
7
|
formAdapterSubmissionMessagePayloadSchema
|
|
7
8
|
} from '~/src/server/plugins/engine/types/schema.js'
|
|
8
9
|
import {
|
|
9
|
-
FormAdapterSubmissionSchemaVersion,
|
|
10
10
|
type FormAdapterSubmissionMessageData,
|
|
11
11
|
type FormAdapterSubmissionMessageMeta,
|
|
12
12
|
type FormAdapterSubmissionMessagePayload
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
} from '@defra/forms-model'
|
|
8
8
|
import Joi from 'joi'
|
|
9
9
|
|
|
10
|
+
import { FormAdapterSubmissionSchemaVersion } from '~/src/server/plugins/engine/types/enums.js'
|
|
10
11
|
import {
|
|
11
|
-
FormAdapterSubmissionSchemaVersion,
|
|
12
12
|
type FormAdapterSubmissionMessageData,
|
|
13
13
|
type FormAdapterSubmissionMessageMeta,
|
|
14
14
|
type FormAdapterSubmissionMessagePayload
|
|
@@ -11,7 +11,7 @@ import { type PluginProperties, type Request } from '@hapi/hapi'
|
|
|
11
11
|
import { type JoiExpression, type ValidationErrorItem } from 'joi'
|
|
12
12
|
|
|
13
13
|
import { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'
|
|
14
|
-
import { type Component } from '~/src/server/plugins/engine/components/helpers.js'
|
|
14
|
+
import { type Component } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
15
15
|
import {
|
|
16
16
|
type BackLink,
|
|
17
17
|
type ComponentText,
|
|
@@ -20,7 +20,12 @@ import {
|
|
|
20
20
|
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
21
21
|
import { type RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'
|
|
22
22
|
import { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'
|
|
23
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
23
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
24
|
+
import {
|
|
25
|
+
type FileStatus,
|
|
26
|
+
type FormAdapterSubmissionSchemaVersion,
|
|
27
|
+
type UploadStatus
|
|
28
|
+
} from '~/src/server/plugins/engine/types/enums.js'
|
|
24
29
|
import { type ViewContext } from '~/src/server/plugins/nunjucks/types.js'
|
|
25
30
|
import {
|
|
26
31
|
type FormAction,
|
|
@@ -190,17 +195,10 @@ export interface UploadInitiateResponse {
|
|
|
190
195
|
statusUrl: string
|
|
191
196
|
}
|
|
192
197
|
|
|
193
|
-
export
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
export enum FileStatus {
|
|
200
|
-
complete = 'complete',
|
|
201
|
-
rejected = 'rejected',
|
|
202
|
-
pending = 'pending'
|
|
203
|
-
}
|
|
198
|
+
export {
|
|
199
|
+
FileStatus,
|
|
200
|
+
UploadStatus
|
|
201
|
+
} from '~/src/server/plugins/engine/types/enums.js'
|
|
204
202
|
|
|
205
203
|
export type UploadState = FileState[]
|
|
206
204
|
|
|
@@ -403,7 +401,7 @@ export type FormAdapterSubmissionMessageMetaSerialised = Omit<
|
|
|
403
401
|
FormAdapterSubmissionMessageMeta,
|
|
404
402
|
'schemaVersion' | 'timestamp' | 'status'
|
|
405
403
|
> & {
|
|
406
|
-
schemaVersion:
|
|
404
|
+
schemaVersion: number
|
|
407
405
|
status: string
|
|
408
406
|
timestamp: string
|
|
409
407
|
}
|
|
@@ -414,10 +412,6 @@ export interface FormAdapterSubmissionMessageData {
|
|
|
414
412
|
files: Record<string, Record<string, string>[]>
|
|
415
413
|
}
|
|
416
414
|
|
|
417
|
-
export enum FormAdapterSubmissionSchemaVersion {
|
|
418
|
-
V1 = 1
|
|
419
|
-
}
|
|
420
|
-
|
|
421
415
|
export interface FormAdapterSubmissionMessagePayload {
|
|
422
416
|
meta: FormAdapterSubmissionMessageMeta
|
|
423
417
|
data: FormAdapterSubmissionMessageData
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getAnswer } from '~/src/server/plugins/engine/components/helpers.js'
|
|
1
|
+
import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Nunjucks filter to get the answer for a component
|
|
@@ -23,5 +23,5 @@ export function answer(name) {
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'
|
|
26
|
-
* @import { Field } from '~/src/server/plugins/engine/components/helpers.js'
|
|
26
|
+
* @import { Field } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
27
27
|
*/
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { getAnswer } from '~/src/server/plugins/engine/components/helpers.js'
|
|
1
|
+
import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
2
2
|
import { answer } from '~/src/server/plugins/nunjucks/filters/answer.js'
|
|
3
3
|
|
|
4
|
-
jest.mock(
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
jest.mock(
|
|
5
|
+
'~/src/server/plugins/engine/components/helpers/components.ts',
|
|
6
|
+
() => ({
|
|
7
|
+
getAnswer: jest.fn()
|
|
8
|
+
})
|
|
9
|
+
)
|
|
7
10
|
|
|
8
11
|
describe('answer Nunjucks filter', () => {
|
|
9
12
|
/** @type { NunjucksContext } */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["ComponentType","Marked","config","ListFormComponent","Components","designerUrl","get","markdown","breaks","gfm","extensions","name","renderer","tokens","text","parser","parseInline","length","walkTokens","token","includes","type","hasListFormField","field","isListFieldType","allowedTypes","AutocompleteField","CheckboxesField","RadiosField","SelectField","YesNoField","createComponent","def","options","component","DatePartsField","Details","EmailAddressField","Html","InsetText","List","Markdown","MultilineTextField","NumberField","TelephoneNumberField","TextField","UkAddressField","MonthYearField","FileUploadField","Error","getAnswer","state","format","getAnswerMarkdown","context","getContextValueFromState","toString","parse","async","trim","getDisplayStringFromState","answer","answerEscaped","escapeMarkdown","files","getFormValueFromState","map","status","file","form","filename","fileId","join","values","flat","items","filter","value","item","label","line","toLowerCase","split","concat","punctuation","character","replaceAll","addClassOptionIfNone","className","classes"],"sources":["../../../../../src/server/plugins/engine/components/helpers.ts"],"sourcesContent":["import { ComponentType, type ComponentDef } from '@defra/forms-model'\nimport { Marked, type Token } from 'marked'\n\nimport { config } from '~/src/config/index.js'\nimport { type ComponentBase } from '~/src/server/plugins/engine/components/ComponentBase.js'\nimport { ListFormComponent } from '~/src/server/plugins/engine/components/ListFormComponent.js'\nimport * as Components from '~/src/server/plugins/engine/components/index.js'\nimport { type FormState } from '~/src/server/plugins/engine/types.js'\n\nconst designerUrl = config.get('designerUrl')\n\nconst markdown = new Marked({\n breaks: true,\n gfm: true,\n\n /**\n * Render paragraphs without `<p>` wrappers\n * for check answers summary list `<dd>`\n */\n extensions: [\n {\n name: 'paragraph',\n renderer({ tokens = [] }) {\n const text = this.parser.parseInline(tokens)\n return tokens.length > 1 ? `${text}<br>` : text\n }\n }\n ],\n\n /**\n * Restrict allowed Markdown tokens\n */\n walkTokens(token) {\n const tokens: Token['type'][] = [\n 'br',\n 'escape',\n 'list',\n 'list_item',\n 'paragraph',\n 'space',\n 'text'\n ]\n\n if (!tokens.includes(token.type)) {\n token.type = 'text'\n }\n }\n})\n\n// All component instances\nexport type Component = InstanceType<\n (typeof Components)[keyof typeof Components]\n>\n\n// Field component instances only\nexport type Field = InstanceType<\n | typeof Components.AutocompleteField\n | typeof Components.RadiosField\n | typeof Components.YesNoField\n | typeof Components.CheckboxesField\n | typeof Components.DatePartsField\n | typeof Components.EmailAddressField\n | typeof Components.MonthYearField\n | typeof Components.MultilineTextField\n | typeof Components.NumberField\n | typeof Components.SelectField\n | typeof Components.TelephoneNumberField\n | typeof Components.TextField\n | typeof Components.UkAddressField\n | typeof Components.FileUploadField\n>\n\n// Guidance component instances only\nexport type Guidance = InstanceType<\n | typeof Components.Details\n | typeof Components.Html\n | typeof Components.Markdown\n | typeof Components.InsetText\n | typeof Components.List\n>\n\n// List component instances only\nexport type ListField = InstanceType<\n | typeof Components.AutocompleteField\n | typeof Components.CheckboxesField\n | typeof Components.RadiosField\n | typeof Components.SelectField\n | typeof Components.YesNoField\n>\n\n/**\n * Filter known components with lists\n */\nexport function hasListFormField(\n field?: Partial<Component>\n): field is ListFormComponent {\n return !!field && isListFieldType(field.type)\n}\n\nexport function isListFieldType(\n type?: ComponentType\n): type is ListField['type'] {\n const allowedTypes = [\n ComponentType.AutocompleteField,\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.SelectField,\n ComponentType.YesNoField\n ]\n\n return !!type && allowedTypes.includes(type)\n}\n\n/**\n * Create field instance for each {@link ComponentDef} type\n */\nexport function createComponent(\n def: ComponentDef,\n options: ConstructorParameters<typeof ComponentBase>[1]\n): Component {\n let component: Component | undefined\n\n switch (def.type) {\n case ComponentType.AutocompleteField:\n component = new Components.AutocompleteField(def, options)\n break\n\n case ComponentType.CheckboxesField:\n component = new Components.CheckboxesField(def, options)\n break\n\n case ComponentType.DatePartsField:\n component = new Components.DatePartsField(def, options)\n break\n\n case ComponentType.Details:\n component = new Components.Details(def, options)\n break\n\n case ComponentType.EmailAddressField:\n component = new Components.EmailAddressField(def, options)\n break\n\n case ComponentType.Html:\n component = new Components.Html(def, options)\n break\n\n case ComponentType.InsetText:\n component = new Components.InsetText(def, options)\n break\n\n case ComponentType.List:\n component = new Components.List(def, options)\n break\n\n case ComponentType.Markdown:\n component = new Components.Markdown(def, options)\n break\n\n case ComponentType.MultilineTextField:\n component = new Components.MultilineTextField(def, options)\n break\n\n case ComponentType.NumberField:\n component = new Components.NumberField(def, options)\n break\n\n case ComponentType.RadiosField:\n component = new Components.RadiosField(def, options)\n break\n\n case ComponentType.SelectField:\n component = new Components.SelectField(def, options)\n break\n\n case ComponentType.TelephoneNumberField:\n component = new Components.TelephoneNumberField(def, options)\n break\n\n case ComponentType.TextField:\n component = new Components.TextField(def, options)\n break\n\n case ComponentType.UkAddressField:\n component = new Components.UkAddressField(def, options)\n break\n\n case ComponentType.YesNoField:\n component = new Components.YesNoField(def, options)\n break\n\n case ComponentType.MonthYearField:\n component = new Components.MonthYearField(def, options)\n break\n\n case ComponentType.FileUploadField:\n component = new Components.FileUploadField(def, options)\n break\n }\n\n if (typeof component === 'undefined') {\n throw new Error(`Component type ${def.type} does not exist`)\n }\n\n return component\n}\n\n/**\n * Get formatted answer for a field\n */\nexport function getAnswer(\n field: Field,\n state: FormState,\n options: {\n format:\n | 'data' // Submission data\n | 'email' // GOV.UK Notify emails\n | 'summary' // Check answers summary\n } = { format: 'summary' }\n) {\n // Use escaped display text for GOV.UK Notify emails\n if (options.format === 'email') {\n return getAnswerMarkdown(field, state, { format: 'email' })\n }\n\n // Use context value for submission data\n if (options.format === 'data') {\n const context = field.getContextValueFromState(state)\n return context?.toString() ?? ''\n }\n\n // Use display HTML for check answers summary (multi line)\n if (\n field instanceof ListFormComponent ||\n field instanceof Components.MultilineTextField ||\n field instanceof Components.UkAddressField\n ) {\n return markdown\n .parse(getAnswerMarkdown(field, state), { async: false })\n .trim()\n }\n\n // Use display text for check answers summary (single line)\n return field.getDisplayStringFromState(state)\n}\n\n/**\n * Get formatted answer for a field (Markdown only)\n */\nexport function getAnswerMarkdown(\n field: Field,\n state: FormState,\n options: {\n format:\n | 'email' // GOV.UK Notify emails\n | 'summary' // Check answers summary\n } = { format: 'summary' }\n) {\n const answer = field.getDisplayStringFromState(state)\n\n // Use escaped display text\n let answerEscaped = `${escapeMarkdown(answer)}\\n`\n\n if (field instanceof Components.FileUploadField) {\n const files = field.getFormValueFromState(state)\n\n // Skip empty files\n if (!files?.length) {\n return answerEscaped\n }\n\n answerEscaped = `${escapeMarkdown(answer)}:\\n\\n`\n\n // Append bullet points\n answerEscaped += files\n .map(({ status }) => {\n const { file } = status.form\n const filename = escapeMarkdown(file.filename)\n return `* [${filename}](${designerUrl}/file-download/${file.fileId})\\n`\n })\n .join('')\n } else if (field instanceof ListFormComponent) {\n const values = [field.getContextValueFromState(state)].flat()\n const items = field.items.filter(({ value }) => values.includes(value))\n\n // Skip empty values\n if (!items.length) {\n return answerEscaped\n }\n\n answerEscaped = ''\n\n // Append bullet points\n answerEscaped += items\n .map((item) => {\n const label = escapeMarkdown(item.text)\n const value = escapeMarkdown(`(${item.value})`)\n\n let line = label\n\n // Prepend bullet points for checkboxes only\n if (field instanceof Components.CheckboxesField) {\n line = `* ${line}`\n }\n\n // Append raw values in parentheses\n // e.g. `* None of the above (false)`\n return options.format === 'email' &&\n `${item.value}`.toLowerCase() !== item.text.toLowerCase()\n ? `${line} ${value}\\n`\n : `${line}\\n`\n })\n .join('')\n } else if (field instanceof Components.MultilineTextField) {\n // Preserve Multiline text new lines\n answerEscaped = answer\n .split(/\\r?\\n/)\n .map(escapeMarkdown)\n .join('\\n')\n .concat('\\n')\n } else if (field instanceof Components.UkAddressField) {\n // Format UK addresses into new lines\n answerEscaped = (field.getContextValueFromState(state) ?? [])\n .map(escapeMarkdown)\n .join('\\n')\n .concat('\\n')\n }\n\n return answerEscaped\n}\n\n/**\n * Prevent Markdown formatting\n * @see {@link https://pandoc.org/chunkedhtml-demo/8.11-backslash-escapes.html}\n */\nexport function escapeMarkdown(answer: string) {\n const punctuation = [\n '`',\n \"'\",\n '*',\n '_',\n '{',\n '}',\n '[',\n ']',\n '(',\n ')',\n '#',\n '+',\n '-',\n '.',\n '!'\n ]\n\n for (const character of punctuation) {\n answer = answer.toString().replaceAll(character, `\\\\${character}`)\n }\n\n return answer\n}\n\nexport const addClassOptionIfNone = (\n options: Extract<ComponentDef, { options: { classes?: string } }>['options'],\n className: string\n) => {\n options.classes ??= className\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["ControllerType","controllerNameFromPath","isControllerName","PageControllers","isPageController","controllerName","createPage","model","pageDef","controller","QuestionPageController","Start","StartPageController","Page","Terminal","TerminalPageController","Summary","SummaryPageController","Status","StatusPageController","FileUpload","FileUploadPageController","Repeat","RepeatPageController","controllers","Ctrl","Error","getProxyUrlForLocalDevelopment","uploadUrl","includes","replace"],"sources":["../../../../../src/server/plugins/engine/pageControllers/helpers.ts"],"sourcesContent":["import {\n ControllerType,\n controllerNameFromPath,\n isControllerName,\n type Page\n} from '@defra/forms-model'\n\nimport { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'\nimport * as PageControllers from '~/src/server/plugins/engine/pageControllers/index.js'\n\nexport function isPageController(\n controllerName?: string | ControllerType\n): controllerName is keyof typeof PageControllers {\n return isControllerName(controllerName) && controllerName in PageControllers\n}\n\nexport type PageControllerClass = InstanceType<PageControllerType>\nexport type PageControllerType =\n (typeof PageControllers)[keyof typeof PageControllers]\n\n/**\n * Creates page instance for each {@link Page} type\n */\nexport function createPage(model: FormModel, pageDef: Page) {\n const controllerName = controllerNameFromPath(pageDef.controller)\n\n if (!pageDef.controller) {\n return new PageControllers.QuestionPageController(model, pageDef)\n }\n\n // Patch legacy controllers\n if (controllerName && pageDef.controller !== controllerName) {\n pageDef.controller = controllerName\n }\n\n let controller: PageControllerClass | undefined\n\n switch (pageDef.controller) {\n case ControllerType.Start:\n controller = new PageControllers.StartPageController(model, pageDef)\n break\n\n case ControllerType.Page:\n controller = new PageControllers.QuestionPageController(model, pageDef)\n break\n\n case ControllerType.Terminal:\n controller = new PageControllers.TerminalPageController(model, pageDef)\n break\n\n case ControllerType.Summary:\n controller = new PageControllers.SummaryPageController(model, pageDef)\n break\n\n case ControllerType.Status:\n controller = new PageControllers.StatusPageController(model, pageDef)\n break\n\n case ControllerType.FileUpload:\n controller = new PageControllers.FileUploadPageController(model, pageDef)\n break\n\n case ControllerType.Repeat:\n controller = new PageControllers.RepeatPageController(model, pageDef)\n break\n }\n\n if (typeof controller === 'undefined') {\n if (model.controllers?.[pageDef.controller]) {\n const Ctrl = model.controllers[pageDef.controller]\n controller = new Ctrl(model, pageDef) as unknown as PageControllerClass // type assertion needed because TS can't verify custom controller structure\n }\n }\n\n if (typeof controller === 'undefined') {\n throw new Error(`Page controller ${pageDef.controller} does not exist`)\n }\n\n return controller\n}\n\n/**\n * In local development environments, we sometimes need to rewrite the\n * CDP upload URL to work with CSP/CORS restrictions.\n * This helper function rewrites localhost URLs to use the sslip.io proxy\n * This is only used when running locally with a development proxy.\n * In non-local environments, this function returns null\n * @param uploadUrl - The original upload URL from CDP\n */\nexport function getProxyUrlForLocalDevelopment(\n uploadUrl?: string\n): string | null {\n if (!uploadUrl?.includes('localhost:7337')) {\n return null\n }\n\n return uploadUrl.replace(\n /localhost:7337/g,\n 'uploader.127.0.0.1.sslip.io:7300'\n )\n}\n"],"mappings":"AAAA,SACEA,cAAc,EACdC,sBAAsB,EACtBC,gBAAgB,QAEX,oBAAoB;AAG3B,OAAO,KAAKC,eAAe;AAE3B,OAAO,SAASC,gBAAgBA,CAC9BC,cAAwC,EACQ;EAChD,OAAOH,gBAAgB,CAACG,cAAc,CAAC,IAAIA,cAAc,IAAIF,eAAe;AAC9E;AAMA;AACA;AACA;AACA,OAAO,SAASG,UAAUA,CAACC,KAAgB,EAAEC,OAAa,EAAE;EAC1D,MAAMH,cAAc,GAAGJ,sBAAsB,CAACO,OAAO,CAACC,UAAU,CAAC;EAEjE,IAAI,CAACD,OAAO,CAACC,UAAU,EAAE;IACvB,OAAO,IAAIN,eAAe,CAACO,sBAAsB,CAACH,KAAK,EAAEC,OAAO,CAAC;EACnE;;EAEA;EACA,IAAIH,cAAc,IAAIG,OAAO,CAACC,UAAU,KAAKJ,cAAc,EAAE;IAC3DG,OAAO,CAACC,UAAU,GAAGJ,cAAc;EACrC;EAEA,IAAII,UAA2C;EAE/C,QAAQD,OAAO,CAACC,UAAU;IACxB,KAAKT,cAAc,CAACW,KAAK;MACvBF,UAAU,GAAG,IAAIN,eAAe,CAACS,mBAAmB,CAACL,KAAK,EAAEC,OAAO,CAAC;MACpE;IAEF,KAAKR,cAAc,CAACa,IAAI;MACtBJ,UAAU,GAAG,IAAIN,eAAe,CAACO,sBAAsB,CAACH,KAAK,EAAEC,OAAO,CAAC;MACvE;IAEF,KAAKR,cAAc,CAACc,QAAQ;MAC1BL,UAAU,GAAG,IAAIN,eAAe,CAACY,sBAAsB,CAACR,KAAK,EAAEC,OAAO,CAAC;MACvE;IAEF,KAAKR,cAAc,CAACgB,OAAO;MACzBP,UAAU,GAAG,IAAIN,eAAe,CAACc,qBAAqB,CAACV,KAAK,EAAEC,OAAO,CAAC;MACtE;IAEF,KAAKR,cAAc,CAACkB,MAAM;MACxBT,UAAU,GAAG,IAAIN,eAAe,CAACgB,oBAAoB,CAACZ,KAAK,EAAEC,OAAO,CAAC;MACrE;IAEF,KAAKR,cAAc,CAACoB,UAAU;MAC5BX,UAAU,GAAG,IAAIN,eAAe,CAACkB,wBAAwB,CAACd,KAAK,EAAEC,OAAO,CAAC;MACzE;IAEF,KAAKR,cAAc,CAACsB,MAAM;MACxBb,UAAU,GAAG,IAAIN,eAAe,CAACoB,oBAAoB,CAAChB,KAAK,EAAEC,OAAO,CAAC;MACrE;EACJ;EAEA,IAAI,OAAOC,UAAU,KAAK,WAAW,EAAE;IACrC,IAAIF,KAAK,CAACiB,WAAW,GAAGhB,OAAO,CAACC,UAAU,CAAC,EAAE;MAC3C,MAAMgB,IAAI,GAAGlB,KAAK,CAACiB,WAAW,CAAChB,OAAO,CAACC,UAAU,CAAC;MAClDA,UAAU,GAAG,IAAIgB,IAAI,CAAClB,KAAK,EAAEC,OAAO,CAAmC,EAAC;IAC1E;EACF;EAEA,IAAI,OAAOC,UAAU,KAAK,WAAW,EAAE;IACrC,MAAM,IAAIiB,KAAK,CAAC,mBAAmBlB,OAAO,CAACC,UAAU,iBAAiB,CAAC;EACzE;EAEA,OAAOA,UAAU;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASkB,8BAA8BA,CAC5CC,SAAkB,EACH;EACf,IAAI,CAACA,SAAS,EAAEC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;IAC1C,OAAO,IAAI;EACb;EAEA,OAAOD,SAAS,CAACE,OAAO,CACtB,iBAAiB,EACjB,kCACF,CAAC;AACH","ignoreList":[]}
|