@defra/forms-engine-plugin 2.1.5 → 2.1.6

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 (105) hide show
  1. package/.server/server/plugins/engine/components/ComponentBase.d.ts +2 -2
  2. package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
  3. package/.server/server/plugins/engine/components/ComponentCollection.d.ts +2 -2
  4. package/.server/server/plugins/engine/components/ComponentCollection.js +1 -1
  5. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  6. package/.server/server/plugins/engine/components/TelephoneNumberField.js +1 -1
  7. package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
  8. package/.server/server/plugins/engine/components/YesNoField.js +1 -1
  9. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  10. package/.server/server/plugins/engine/components/{helpers.d.ts → helpers/components.d.ts} +3 -10
  11. package/.server/server/plugins/engine/components/{helpers.js → helpers/components.js} +16 -29
  12. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -0
  13. package/.server/server/plugins/engine/components/helpers/index.d.ts +11 -0
  14. package/.server/server/plugins/engine/components/helpers/index.js +15 -0
  15. package/.server/server/plugins/engine/components/helpers/index.js.map +1 -0
  16. package/.server/server/plugins/engine/helpers.d.ts +1 -1
  17. package/.server/server/plugins/engine/helpers.js +1 -1
  18. package/.server/server/plugins/engine/helpers.js.map +1 -1
  19. package/.server/server/plugins/engine/models/FormModel.d.ts +2 -2
  20. package/.server/server/plugins/engine/models/FormModel.js +2 -2
  21. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  22. package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +1 -1
  23. package/.server/server/plugins/engine/models/SummaryViewModel.js +1 -1
  24. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  25. package/.server/server/plugins/engine/models/types.d.ts +2 -2
  26. package/.server/server/plugins/engine/models/types.js.map +1 -1
  27. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  28. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  29. package/.server/server/plugins/engine/outputFormatters/machine/v1.js +1 -1
  30. package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
  31. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +1 -1
  32. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  33. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +1 -1
  34. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  35. package/.server/server/plugins/engine/pageControllers/helpers/index.d.ts +9 -0
  36. package/.server/server/plugins/engine/pageControllers/helpers/index.js +15 -0
  37. package/.server/server/plugins/engine/pageControllers/helpers/index.js.map +1 -0
  38. package/.server/server/plugins/engine/pageControllers/{helpers.d.ts → helpers/pages.d.ts} +1 -10
  39. package/.server/server/plugins/engine/pageControllers/{helpers.js → helpers/pages.js} +2 -17
  40. package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -0
  41. package/.server/server/plugins/engine/routes/index.d.ts +1 -1
  42. package/.server/server/plugins/engine/routes/index.js.map +1 -1
  43. package/.server/server/plugins/engine/routes/questions.js.map +1 -1
  44. package/.server/server/plugins/engine/services/notifyService.js +1 -1
  45. package/.server/server/plugins/engine/services/notifyService.js.map +1 -1
  46. package/.server/server/plugins/engine/types.d.ts +3 -3
  47. package/.server/server/plugins/engine/types.js.map +1 -1
  48. package/.server/server/plugins/nunjucks/filters/answer.js +2 -2
  49. package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
  50. package/.server/server/plugins/nunjucks/filters/answer.test.js +2 -2
  51. package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
  52. package/package.json +1 -1
  53. package/src/server/plugins/engine/components/AutocompleteField.test.ts +1 -1
  54. package/src/server/plugins/engine/components/CheckboxesField.test.ts +1 -1
  55. package/src/server/plugins/engine/components/ComponentBase.ts +2 -2
  56. package/src/server/plugins/engine/components/ComponentCollection.ts +2 -2
  57. package/src/server/plugins/engine/components/DatePartsField.test.ts +1 -1
  58. package/src/server/plugins/engine/components/Details.test.ts +1 -1
  59. package/src/server/plugins/engine/components/EmailAddressField.test.ts +1 -1
  60. package/src/server/plugins/engine/components/FileUploadField.test.ts +2 -2
  61. package/src/server/plugins/engine/components/Html.test.ts +1 -1
  62. package/src/server/plugins/engine/components/InsetText.test.ts +1 -1
  63. package/src/server/plugins/engine/components/List.test.ts +1 -1
  64. package/src/server/plugins/engine/components/Markdown.test.ts +1 -1
  65. package/src/server/plugins/engine/components/MonthYearField.test.ts +1 -1
  66. package/src/server/plugins/engine/components/MultilineTextField.test.ts +1 -1
  67. package/src/server/plugins/engine/components/NumberField.test.ts +1 -1
  68. package/src/server/plugins/engine/components/RadiosField.test.ts +1 -1
  69. package/src/server/plugins/engine/components/SelectField.test.ts +1 -1
  70. package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +1 -1
  71. package/src/server/plugins/engine/components/TelephoneNumberField.ts +1 -1
  72. package/src/server/plugins/engine/components/TextField.test.ts +1 -1
  73. package/src/server/plugins/engine/components/UkAddressField.test.ts +1 -1
  74. package/src/server/plugins/engine/components/YesNoField.test.ts +1 -1
  75. package/src/server/plugins/engine/components/YesNoField.ts +1 -1
  76. package/src/server/plugins/engine/components/{helpers.ts → helpers/components.ts} +41 -77
  77. package/src/server/plugins/engine/components/{helpers.test.ts → helpers/helpers.test.ts} +1 -1
  78. package/src/server/plugins/engine/components/helpers/index.ts +38 -0
  79. package/src/server/plugins/engine/helpers.test.ts +1 -1
  80. package/src/server/plugins/engine/helpers.ts +2 -2
  81. package/src/server/plugins/engine/models/FormModel.ts +2 -2
  82. package/src/server/plugins/engine/models/SummaryViewModel.test.ts +1 -1
  83. package/src/server/plugins/engine/models/SummaryViewModel.ts +2 -2
  84. package/src/server/plugins/engine/models/types.ts +4 -4
  85. package/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +1 -1
  86. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -4
  87. package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +1 -1
  88. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +1 -1
  89. package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +1 -1
  90. package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +1 -1
  91. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +1 -1
  92. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +1 -1
  93. package/src/server/plugins/engine/pageControllers/{helpers.test.ts → helpers/helpers.test.ts} +2 -2
  94. package/src/server/plugins/engine/pageControllers/helpers/index.ts +20 -0
  95. package/src/server/plugins/engine/pageControllers/{helpers.ts → helpers/pages.ts} +1 -22
  96. package/src/server/plugins/engine/routes/index.ts +1 -1
  97. package/src/server/plugins/engine/routes/questions.test.ts +1 -1
  98. package/src/server/plugins/engine/routes/questions.ts +1 -1
  99. package/src/server/plugins/engine/services/notifyService.test.ts +1 -1
  100. package/src/server/plugins/engine/services/notifyService.ts +1 -1
  101. package/src/server/plugins/engine/types.ts +3 -3
  102. package/src/server/plugins/nunjucks/filters/answer.js +2 -2
  103. package/src/server/plugins/nunjucks/filters/answer.test.js +7 -4
  104. package/.server/server/plugins/engine/components/helpers.js.map +0 -1
  105. package/.server/server/plugins/engine/pageControllers/helpers.js.map +0 -1
@@ -5,7 +5,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
5
5
  import {
6
6
  getAnswer,
7
7
  type Field
8
- } from '~/src/server/plugins/engine/components/helpers.js'
8
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
9
9
  import { type DateInputItem } from '~/src/server/plugins/engine/components/types.js'
10
10
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
11
11
  import {
@@ -1,7 +1,7 @@
1
1
  import { ComponentType, type DetailsComponent } from '@defra/forms-model'
2
2
 
3
3
  import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
4
- import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
4
+ import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
5
5
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
6
6
  import definition from '~/test/form/definitions/basic.js'
7
7
 
@@ -7,7 +7,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
7
7
  import {
8
8
  getAnswer,
9
9
  type Field
10
- } from '~/src/server/plugins/engine/components/helpers.js'
10
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
11
11
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
12
12
  import definition from '~/test/form/definitions/blank.js'
13
13
  import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
@@ -8,12 +8,12 @@ import { tempItemSchema } from '~/src/server/plugins/engine/components/FileUploa
8
8
  import {
9
9
  getAnswer,
10
10
  type Field
11
- } from '~/src/server/plugins/engine/components/helpers.js'
11
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
12
12
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
13
13
  import {
14
14
  createPage,
15
15
  type PageControllerClass
16
- } from '~/src/server/plugins/engine/pageControllers/helpers.js'
16
+ } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
17
17
  import { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
18
18
  import {
19
19
  FileStatus,
@@ -1,7 +1,7 @@
1
1
  import { ComponentType, type HtmlComponent } from '@defra/forms-model'
2
2
 
3
3
  import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
4
- import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
4
+ import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
5
5
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
6
6
  import definition from '~/test/form/definitions/basic.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { ComponentType, type InsetTextComponent } from '@defra/forms-model'
2
2
 
3
3
  import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
4
- import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
4
+ import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
5
5
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
6
6
  import definition from '~/test/form/definitions/basic.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { ComponentType, type ListComponent } from '@defra/forms-model'
2
2
 
3
3
  import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
4
- import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
4
+ import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
5
5
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
6
6
  import definition from '~/test/form/definitions/basic.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { ComponentType, type MarkdownComponent } from '@defra/forms-model'
2
2
 
3
3
  import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
4
- import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
4
+ import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
5
5
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
6
6
  import definition from '~/test/form/definitions/basic.js'
7
7
 
@@ -5,7 +5,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
5
5
  import {
6
6
  getAnswer,
7
7
  type Field
8
- } from '~/src/server/plugins/engine/components/helpers.js'
8
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
9
9
  import { type DateInputItem } from '~/src/server/plugins/engine/components/types.js'
10
10
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
11
11
  import {
@@ -8,7 +8,7 @@ import { MultilineTextField } from '~/src/server/plugins/engine/components/Multi
8
8
  import {
9
9
  getAnswer,
10
10
  type Field
11
- } from '~/src/server/plugins/engine/components/helpers.js'
11
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
12
12
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
13
13
  import definition from '~/test/form/definitions/blank.js'
14
14
  import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
@@ -5,7 +5,7 @@ import { NumberField } from '~/src/server/plugins/engine/components/NumberField.
5
5
  import {
6
6
  getAnswer,
7
7
  type Field
8
- } from '~/src/server/plugins/engine/components/helpers.js'
8
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
9
9
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
10
10
  import definition from '~/test/form/definitions/blank.js'
11
11
  import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
@@ -6,7 +6,7 @@ import { RadiosField } from '~/src/server/plugins/engine/components/RadiosField.
6
6
  import {
7
7
  getAnswer,
8
8
  type Field
9
- } from '~/src/server/plugins/engine/components/helpers.js'
9
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
10
10
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
11
11
  import {
12
12
  listNumber,
@@ -6,7 +6,7 @@ import { SelectField } from '~/src/server/plugins/engine/components/SelectField.
6
6
  import {
7
7
  getAnswer,
8
8
  type Field
9
- } from '~/src/server/plugins/engine/components/helpers.js'
9
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
10
10
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
11
11
  import {
12
12
  listNumber,
@@ -7,7 +7,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
7
7
  import {
8
8
  getAnswer,
9
9
  type Field
10
- } from '~/src/server/plugins/engine/components/helpers.js'
10
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
11
11
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
12
12
  import definition from '~/test/form/definitions/blank.js'
13
13
  import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
@@ -2,7 +2,7 @@ import { type TelephoneNumberFieldComponent } from '@defra/forms-model'
2
2
  import joi, { type StringSchema } from 'joi'
3
3
 
4
4
  import { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'
5
- import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers.js'
5
+ import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'
6
6
  import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
7
7
  import {
8
8
  type ErrorMessageTemplateList,
@@ -4,7 +4,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
4
4
  import {
5
5
  getAnswer,
6
6
  type Field
7
- } from '~/src/server/plugins/engine/components/helpers.js'
7
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
8
8
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
9
9
  import definition from '~/test/form/definitions/blank.js'
10
10
  import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
@@ -9,7 +9,7 @@ import { UkAddressField } from '~/src/server/plugins/engine/components/UkAddress
9
9
  import {
10
10
  getAnswer,
11
11
  type Field
12
- } from '~/src/server/plugins/engine/components/helpers.js'
12
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
13
13
  import { type ViewModel } from '~/src/server/plugins/engine/components/types.js'
14
14
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
15
15
  import {
@@ -4,7 +4,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
4
4
  import {
5
5
  getAnswer,
6
6
  type Field
7
- } from '~/src/server/plugins/engine/components/helpers.js'
7
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
8
8
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
9
9
  import { listYesNoExamples } from '~/test/fixtures/list.js'
10
10
  import definition from '~/test/form/definitions/blank.js'
@@ -6,7 +6,7 @@ import {
6
6
  } from '@defra/forms-model'
7
7
 
8
8
  import { SelectionControlField } from '~/src/server/plugins/engine/components/SelectionControlField.js'
9
- import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers.js'
9
+ import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'
10
10
  import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
11
11
  import { type ErrorMessageTemplateList } from '~/src/server/plugins/engine/types.js'
12
12
  import { convertToLanguageMessages } from '~/src/server/utils/type-utils.js'
@@ -4,49 +4,10 @@ import { Marked, type Token } from 'marked'
4
4
  import { config } from '~/src/config/index.js'
5
5
  import { type ComponentBase } from '~/src/server/plugins/engine/components/ComponentBase.js'
6
6
  import { ListFormComponent } from '~/src/server/plugins/engine/components/ListFormComponent.js'
7
+ import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers/index.js'
7
8
  import * as Components from '~/src/server/plugins/engine/components/index.js'
8
9
  import { type FormState } from '~/src/server/plugins/engine/types.js'
9
10
 
10
- const designerUrl = config.get('designerUrl')
11
-
12
- const markdown = new Marked({
13
- breaks: true,
14
- gfm: true,
15
-
16
- /**
17
- * Render paragraphs without `<p>` wrappers
18
- * for check answers summary list `<dd>`
19
- */
20
- extensions: [
21
- {
22
- name: 'paragraph',
23
- renderer({ tokens = [] }) {
24
- const text = this.parser.parseInline(tokens)
25
- return tokens.length > 1 ? `${text}<br>` : text
26
- }
27
- }
28
- ],
29
-
30
- /**
31
- * Restrict allowed Markdown tokens
32
- */
33
- walkTokens(token) {
34
- const tokens: Token['type'][] = [
35
- 'br',
36
- 'escape',
37
- 'list',
38
- 'list_item',
39
- 'paragraph',
40
- 'space',
41
- 'text'
42
- ]
43
-
44
- if (!tokens.includes(token.type)) {
45
- token.type = 'text'
46
- }
47
- }
48
- })
49
-
50
11
  // All component instances
51
12
  export type Component = InstanceType<
52
13
  (typeof Components)[keyof typeof Components]
@@ -88,6 +49,46 @@ export type ListField = InstanceType<
88
49
  | typeof Components.YesNoField
89
50
  >
90
51
 
52
+ export const designerUrl = config.get('designerUrl')
53
+
54
+ export const markdown = new Marked({
55
+ breaks: true,
56
+ gfm: true,
57
+
58
+ /**
59
+ * Render paragraphs without `<p>` wrappers
60
+ * for check answers summary list `<dd>`
61
+ */
62
+ extensions: [
63
+ {
64
+ name: 'paragraph',
65
+ renderer({ tokens = [] }) {
66
+ const text = this.parser.parseInline(tokens)
67
+ return tokens.length > 1 ? `${text}<br>` : text
68
+ }
69
+ }
70
+ ],
71
+
72
+ /**
73
+ * Restrict allowed Markdown tokens
74
+ */
75
+ walkTokens(token) {
76
+ const tokens: Token['type'][] = [
77
+ 'br',
78
+ 'escape',
79
+ 'list',
80
+ 'list_item',
81
+ 'paragraph',
82
+ 'space',
83
+ 'text'
84
+ ]
85
+
86
+ if (!tokens.includes(token.type)) {
87
+ token.type = 'text'
88
+ }
89
+ }
90
+ })
91
+
91
92
  /**
92
93
  * Filter known components with lists
93
94
  */
@@ -328,40 +329,3 @@ export function getAnswerMarkdown(
328
329
 
329
330
  return answerEscaped
330
331
  }
331
-
332
- /**
333
- * Prevent Markdown formatting
334
- * @see {@link https://pandoc.org/chunkedhtml-demo/8.11-backslash-escapes.html}
335
- */
336
- export function escapeMarkdown(answer: string) {
337
- const punctuation = [
338
- '`',
339
- "'",
340
- '*',
341
- '_',
342
- '{',
343
- '}',
344
- '[',
345
- ']',
346
- '(',
347
- ')',
348
- '#',
349
- '+',
350
- '-',
351
- '.',
352
- '!'
353
- ]
354
-
355
- for (const character of punctuation) {
356
- answer = answer.toString().replaceAll(character, `\\${character}`)
357
- }
358
-
359
- return answer
360
- }
361
-
362
- export const addClassOptionIfNone = (
363
- options: Extract<ComponentDef, { options: { classes?: string } }>['options'],
364
- className: string
365
- ) => {
366
- options.classes ??= className
367
- }
@@ -1,7 +1,7 @@
1
1
  import { type ComponentDef } from '@defra/forms-model'
2
2
 
3
3
  import { ComponentBase } from '~/src/server/plugins/engine/components/ComponentBase.js'
4
- import { createComponent } from '~/src/server/plugins/engine/components/helpers.js'
4
+ import { createComponent } from '~/src/server/plugins/engine/components/helpers/components.js'
5
5
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
6
6
  import definition from '~/test/form/definitions/basic.js'
7
7
 
@@ -0,0 +1,38 @@
1
+ import { type ComponentDef } from '@defra/forms-model'
2
+
3
+ /**
4
+ * Prevent Markdown formatting
5
+ * @see {@link https://pandoc.org/chunkedhtml-demo/8.11-backslash-escapes.html}
6
+ */
7
+ export function escapeMarkdown(answer: string) {
8
+ const punctuation = [
9
+ '`',
10
+ "'",
11
+ '*',
12
+ '_',
13
+ '{',
14
+ '}',
15
+ '[',
16
+ ']',
17
+ '(',
18
+ ')',
19
+ '#',
20
+ '+',
21
+ '-',
22
+ '.',
23
+ '!'
24
+ ]
25
+
26
+ for (const character of punctuation) {
27
+ answer = answer.toString().replaceAll(character, `\\${character}`)
28
+ }
29
+
30
+ return answer
31
+ }
32
+
33
+ export const addClassOptionIfNone = (
34
+ options: Extract<ComponentDef, { options: { classes?: string } }>['options'],
35
+ className: string
36
+ ) => {
37
+ options.classes ??= className
38
+ }
@@ -22,7 +22,7 @@ import { buildFormContextRequest } from '~/src/server/plugins/engine/pageControl
22
22
  import {
23
23
  createPage,
24
24
  type PageControllerClass
25
- } from '~/src/server/plugins/engine/pageControllers/helpers.js'
25
+ } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
26
26
  import {
27
27
  type FormContext,
28
28
  type FormContextRequest
@@ -19,9 +19,9 @@ import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
19
19
  import {
20
20
  getAnswer,
21
21
  type Field
22
- } from '~/src/server/plugins/engine/components/helpers.js'
22
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
23
23
  import { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
24
- import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
24
+ import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
25
25
  import {
26
26
  type FormContext,
27
27
  type FormContextRequest,
@@ -33,7 +33,7 @@ import {} from '~/src/server/plugins/engine/components/YesNoField.js'
33
33
  import {
34
34
  hasListFormField,
35
35
  type Component
36
- } from '~/src/server/plugins/engine/components/helpers.js'
36
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
37
37
  import { todayAsDateOnly } from '~/src/server/plugins/engine/date-helper.js'
38
38
  import {
39
39
  findPage,
@@ -46,7 +46,7 @@ import { type PageController } from '~/src/server/plugins/engine/pageControllers
46
46
  import {
47
47
  createPage,
48
48
  type PageControllerClass
49
- } from '~/src/server/plugins/engine/pageControllers/helpers.js'
49
+ } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
50
50
  import { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
51
51
  import * as defaultServices from '~/src/server/plugins/engine/services/index.js'
52
52
  import {
@@ -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
- type Field,
10
- type getAnswer
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,
@@ -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
- escapeMarkdown,
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,
@@ -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/FormModel.js'
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
- }