@defra/forms-engine-plugin 2.1.4 → 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 (135) 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/adapter/v1.d.ts +6 -0
  28. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +23 -0
  29. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -0
  30. package/.server/server/plugins/engine/outputFormatters/human/v1.d.ts +2 -2
  31. package/.server/server/plugins/engine/outputFormatters/human/v1.js +3 -2
  32. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  33. package/.server/server/plugins/engine/outputFormatters/index.d.ts +4 -3
  34. package/.server/server/plugins/engine/outputFormatters/index.js +4 -0
  35. package/.server/server/plugins/engine/outputFormatters/index.js.map +1 -1
  36. package/.server/server/plugins/engine/outputFormatters/machine/v1.d.ts +2 -2
  37. package/.server/server/plugins/engine/outputFormatters/machine/v1.js +2 -2
  38. package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
  39. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +4 -1
  40. package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
  41. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +1 -1
  42. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  43. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +6 -5
  44. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  45. package/.server/server/plugins/engine/pageControllers/helpers/index.d.ts +9 -0
  46. package/.server/server/plugins/engine/pageControllers/helpers/index.js +15 -0
  47. package/.server/server/plugins/engine/pageControllers/helpers/index.js.map +1 -0
  48. package/.server/server/plugins/engine/pageControllers/{helpers.d.ts → helpers/pages.d.ts} +1 -10
  49. package/.server/server/plugins/engine/pageControllers/{helpers.js → helpers/pages.js} +2 -17
  50. package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -0
  51. package/.server/server/plugins/engine/routes/index.d.ts +1 -1
  52. package/.server/server/plugins/engine/routes/index.js.map +1 -1
  53. package/.server/server/plugins/engine/routes/questions.js.map +1 -1
  54. package/.server/server/plugins/engine/services/localFormsService.d.ts +1 -1
  55. package/.server/server/plugins/engine/services/notifyService.d.ts +7 -2
  56. package/.server/server/plugins/engine/services/notifyService.js +12 -3
  57. package/.server/server/plugins/engine/services/notifyService.js.map +1 -1
  58. package/.server/server/plugins/engine/types/index.d.ts +10 -0
  59. package/.server/server/plugins/engine/types/index.js +4 -0
  60. package/.server/server/plugins/engine/types/index.js.map +1 -0
  61. package/.server/server/plugins/engine/types/schema.d.ts +5 -0
  62. package/.server/server/plugins/engine/types/schema.js +24 -0
  63. package/.server/server/plugins/engine/types/schema.js.map +1 -0
  64. package/.server/server/plugins/engine/types.d.ts +39 -3
  65. package/.server/server/plugins/engine/types.js +4 -0
  66. package/.server/server/plugins/engine/types.js.map +1 -1
  67. package/.server/server/plugins/nunjucks/filters/answer.js +2 -2
  68. package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
  69. package/.server/server/plugins/nunjucks/filters/answer.test.js +2 -2
  70. package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
  71. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  72. package/.server/server/plugins/nunjucks/filters/page.d.ts +1 -1
  73. package/.server/server/types.d.ts +1 -1
  74. package/.server/server/types.js.map +1 -1
  75. package/package.json +6 -1
  76. package/src/server/plugins/engine/components/AutocompleteField.test.ts +1 -1
  77. package/src/server/plugins/engine/components/CheckboxesField.test.ts +1 -1
  78. package/src/server/plugins/engine/components/ComponentBase.ts +2 -2
  79. package/src/server/plugins/engine/components/ComponentCollection.ts +2 -2
  80. package/src/server/plugins/engine/components/DatePartsField.test.ts +1 -1
  81. package/src/server/plugins/engine/components/Details.test.ts +1 -1
  82. package/src/server/plugins/engine/components/EmailAddressField.test.ts +1 -1
  83. package/src/server/plugins/engine/components/FileUploadField.test.ts +2 -2
  84. package/src/server/plugins/engine/components/Html.test.ts +1 -1
  85. package/src/server/plugins/engine/components/InsetText.test.ts +1 -1
  86. package/src/server/plugins/engine/components/List.test.ts +1 -1
  87. package/src/server/plugins/engine/components/Markdown.test.ts +1 -1
  88. package/src/server/plugins/engine/components/MonthYearField.test.ts +1 -1
  89. package/src/server/plugins/engine/components/MultilineTextField.test.ts +1 -1
  90. package/src/server/plugins/engine/components/NumberField.test.ts +1 -1
  91. package/src/server/plugins/engine/components/RadiosField.test.ts +1 -1
  92. package/src/server/plugins/engine/components/SelectField.test.ts +1 -1
  93. package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +1 -1
  94. package/src/server/plugins/engine/components/TelephoneNumberField.ts +1 -1
  95. package/src/server/plugins/engine/components/TextField.test.ts +1 -1
  96. package/src/server/plugins/engine/components/UkAddressField.test.ts +1 -1
  97. package/src/server/plugins/engine/components/YesNoField.test.ts +1 -1
  98. package/src/server/plugins/engine/components/YesNoField.ts +1 -1
  99. package/src/server/plugins/engine/components/{helpers.ts → helpers/components.ts} +41 -77
  100. package/src/server/plugins/engine/components/{helpers.test.ts → helpers/helpers.test.ts} +1 -1
  101. package/src/server/plugins/engine/components/helpers/index.ts +38 -0
  102. package/src/server/plugins/engine/helpers.test.ts +1 -1
  103. package/src/server/plugins/engine/helpers.ts +2 -2
  104. package/src/server/plugins/engine/models/FormModel.ts +2 -2
  105. package/src/server/plugins/engine/models/SummaryViewModel.test.ts +1 -1
  106. package/src/server/plugins/engine/models/SummaryViewModel.ts +2 -2
  107. package/src/server/plugins/engine/models/types.ts +4 -4
  108. package/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +506 -0
  109. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +53 -0
  110. package/src/server/plugins/engine/outputFormatters/human/v1.ts +8 -6
  111. package/src/server/plugins/engine/outputFormatters/index.ts +11 -3
  112. package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +1 -1
  113. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +7 -3
  114. package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +1 -1
  115. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +1 -1
  116. package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +1 -1
  117. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +1 -1
  118. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +16 -5
  119. package/src/server/plugins/engine/pageControllers/{helpers.test.ts → helpers/helpers.test.ts} +2 -2
  120. package/src/server/plugins/engine/pageControllers/helpers/index.ts +20 -0
  121. package/src/server/plugins/engine/pageControllers/{helpers.ts → helpers/pages.ts} +1 -22
  122. package/src/server/plugins/engine/routes/index.ts +1 -1
  123. package/src/server/plugins/engine/routes/questions.test.ts +1 -1
  124. package/src/server/plugins/engine/routes/questions.ts +1 -1
  125. package/src/server/plugins/engine/services/notifyService.test.ts +156 -1
  126. package/src/server/plugins/engine/services/notifyService.ts +25 -4
  127. package/src/server/plugins/engine/types/index.ts +96 -0
  128. package/src/server/plugins/engine/types/schema.test.ts +152 -0
  129. package/src/server/plugins/engine/types/schema.ts +45 -0
  130. package/src/server/plugins/engine/types.ts +53 -3
  131. package/src/server/plugins/nunjucks/filters/answer.js +2 -2
  132. package/src/server/plugins/nunjucks/filters/answer.test.js +7 -4
  133. package/src/server/types.ts +2 -1
  134. package/.server/server/plugins/engine/components/helpers.js.map +0 -1
  135. package/.server/server/plugins/engine/pageControllers/helpers.js.map +0 -1
@@ -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