@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
@@ -0,0 +1,10 @@
1
+ export type { CheckAnswers, ErrorMessageTemplate, ErrorMessageTemplateList, FeaturedFormPageViewModel, FileState, FilterFunction, FormAdapterSubmissionMessage, FormAdapterSubmissionMessageData, FormAdapterSubmissionMessageMeta, FormAdapterSubmissionMessageMetaSerialised, FormAdapterSubmissionMessagePayload, FormAdapterSubmissionService, FormContext, FormContextRequest, FormPageViewModel, FormPayload, FormPayloadParams, FormState, FormStateValue, FormSubmissionError, FormSubmissionState, FormValidationResult, FormValue, GlobalFunction, ItemDeletePageViewModel, OnRequestCallback, PageViewModel, PageViewModelBase, PluginOptions, PreparePageEventRequestOptions, RepeatItemState, RepeatListState, RepeaterSummaryPageViewModel, SummaryList, SummaryListAction, SummaryListRow, TempFileState, UploadInitiateResponse, UploadStatusFileResponse, UploadStatusResponse } from '~/src/server/plugins/engine/types.js';
2
+ export { FileStatus, FormAdapterSubmissionSchemaVersion, UploadStatus } from '~/src/server/plugins/engine/types.js';
3
+ export type { Detail, DetailItem, DetailItemBase, DetailItemField, DetailItemRepeat, ExecutableCondition } from '~/src/server/plugins/engine/models/types.js';
4
+ export type { BackLink, ComponentText, ComponentViewModel, Content, DateInputItem, DatePartsState, Label, ListItem, ListItemLabel, MonthYearState, ViewModel } from '~/src/server/plugins/engine/components/types.js';
5
+ export type { UkAddressState } from '~/src/server/plugins/engine/components/UkAddressField.js';
6
+ export type { FormParams, FormQuery, FormRequest, FormRequestPayload, FormRequestPayloadRefs, FormRequestRefs } from '~/src/server/routes/types.js';
7
+ export { FormAction, FormStatus } from '~/src/server/routes/types.js';
8
+ export type { FormSubmissionService, FormsService, OutputService, RouteConfig, Services } from '~/src/server/types.js';
9
+ export type { RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js';
10
+ export * from '~/src/server/plugins/engine/types/schema.js';
@@ -0,0 +1,4 @@
1
+ export { FileStatus, FormAdapterSubmissionSchemaVersion, UploadStatus } from "../types.js";
2
+ export { FormAction, FormStatus } from "../../../routes/types.js";
3
+ export * from "./schema.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["FileStatus","FormAdapterSubmissionSchemaVersion","UploadStatus","FormAction","FormStatus"],"sources":["../../../../../src/server/plugins/engine/types/index.ts"],"sourcesContent":["export type {\n CheckAnswers,\n ErrorMessageTemplate,\n ErrorMessageTemplateList,\n FeaturedFormPageViewModel,\n FileState,\n FilterFunction,\n FormAdapterSubmissionMessage,\n FormAdapterSubmissionMessageData,\n FormAdapterSubmissionMessageMeta,\n FormAdapterSubmissionMessageMetaSerialised,\n FormAdapterSubmissionMessagePayload,\n FormAdapterSubmissionService,\n FormContext,\n FormContextRequest,\n FormPageViewModel,\n FormPayload,\n FormPayloadParams,\n FormState,\n FormStateValue,\n FormSubmissionError,\n FormSubmissionState,\n FormValidationResult,\n FormValue,\n GlobalFunction,\n ItemDeletePageViewModel,\n OnRequestCallback,\n PageViewModel,\n PageViewModelBase,\n PluginOptions,\n PreparePageEventRequestOptions,\n RepeatItemState,\n RepeatListState,\n RepeaterSummaryPageViewModel,\n SummaryList,\n SummaryListAction,\n SummaryListRow,\n TempFileState,\n UploadInitiateResponse,\n UploadStatusFileResponse,\n UploadStatusResponse\n} from '~/src/server/plugins/engine/types.js'\n\nexport {\n FileStatus,\n FormAdapterSubmissionSchemaVersion,\n UploadStatus\n} from '~/src/server/plugins/engine/types.js'\n\nexport type {\n Detail,\n DetailItem,\n DetailItemBase,\n DetailItemField,\n DetailItemRepeat,\n ExecutableCondition\n} from '~/src/server/plugins/engine/models/types.js'\n\nexport type {\n BackLink,\n ComponentText,\n ComponentViewModel,\n Content,\n DateInputItem,\n DatePartsState,\n Label,\n ListItem,\n ListItemLabel,\n MonthYearState,\n ViewModel\n} from '~/src/server/plugins/engine/components/types.js'\n\nexport type { UkAddressState } from '~/src/server/plugins/engine/components/UkAddressField.js'\n\nexport type {\n FormParams,\n FormQuery,\n FormRequest,\n FormRequestPayload,\n FormRequestPayloadRefs,\n FormRequestRefs\n} from '~/src/server/routes/types.js'\n\nexport { FormAction, FormStatus } from '~/src/server/routes/types.js'\n\nexport type {\n FormSubmissionService,\n FormsService,\n OutputService,\n RouteConfig,\n Services\n} from '~/src/server/types.js'\n\nexport type { RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'\n\nexport * from '~/src/server/plugins/engine/types/schema.js'\n"],"mappings":"AA2CA,SACEA,UAAU,EACVC,kCAAkC,EAClCC,YAAY;AAqCd,SAASC,UAAU,EAAEC,UAAU;AAY/B","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import Joi from 'joi';
2
+ import { type FormAdapterSubmissionMessageData, type FormAdapterSubmissionMessageMeta, type FormAdapterSubmissionMessagePayload } from '~/src/server/plugins/engine/types.js';
3
+ export declare const formAdapterSubmissionMessageMetaSchema: Joi.ObjectSchema<FormAdapterSubmissionMessageMeta>;
4
+ export declare const formAdapterSubmissionMessageDataSchema: Joi.ObjectSchema<FormAdapterSubmissionMessageData>;
5
+ export declare const formAdapterSubmissionMessagePayloadSchema: Joi.ObjectSchema<FormAdapterSubmissionMessagePayload>;
@@ -0,0 +1,24 @@
1
+ import { FormStatus, idSchema, notificationEmailAddressSchema, slugSchema, titleSchema } from '@defra/forms-model';
2
+ import Joi from 'joi';
3
+ import { FormAdapterSubmissionSchemaVersion } from "../types.js";
4
+ export const formAdapterSubmissionMessageMetaSchema = Joi.object().keys({
5
+ schemaVersion: Joi.string().valid(...Object.values(FormAdapterSubmissionSchemaVersion)),
6
+ timestamp: Joi.date().required(),
7
+ referenceNumber: Joi.string().required(),
8
+ formName: titleSchema,
9
+ formId: idSchema,
10
+ formSlug: slugSchema,
11
+ status: Joi.string().valid(...Object.values(FormStatus)).required(),
12
+ isPreview: Joi.boolean().required(),
13
+ notificationEmail: notificationEmailAddressSchema.required()
14
+ });
15
+ export const formAdapterSubmissionMessageDataSchema = Joi.object().keys({
16
+ main: Joi.object(),
17
+ repeaters: Joi.object(),
18
+ files: Joi.object()
19
+ });
20
+ export const formAdapterSubmissionMessagePayloadSchema = Joi.object().keys({
21
+ meta: formAdapterSubmissionMessageMetaSchema.required(),
22
+ data: formAdapterSubmissionMessageDataSchema.required()
23
+ });
24
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","names":["FormStatus","idSchema","notificationEmailAddressSchema","slugSchema","titleSchema","Joi","FormAdapterSubmissionSchemaVersion","formAdapterSubmissionMessageMetaSchema","object","keys","schemaVersion","string","valid","Object","values","timestamp","date","required","referenceNumber","formName","formId","formSlug","status","isPreview","boolean","notificationEmail","formAdapterSubmissionMessageDataSchema","main","repeaters","files","formAdapterSubmissionMessagePayloadSchema","meta","data"],"sources":["../../../../../src/server/plugins/engine/types/schema.ts"],"sourcesContent":["import {\n FormStatus,\n idSchema,\n notificationEmailAddressSchema,\n slugSchema,\n titleSchema\n} from '@defra/forms-model'\nimport Joi from 'joi'\n\nimport {\n FormAdapterSubmissionSchemaVersion,\n type FormAdapterSubmissionMessageData,\n type FormAdapterSubmissionMessageMeta,\n type FormAdapterSubmissionMessagePayload\n} from '~/src/server/plugins/engine/types.js'\n\nexport const formAdapterSubmissionMessageMetaSchema =\n Joi.object<FormAdapterSubmissionMessageMeta>().keys({\n schemaVersion: Joi.string().valid(\n ...Object.values(FormAdapterSubmissionSchemaVersion)\n ),\n timestamp: Joi.date().required(),\n referenceNumber: Joi.string().required(),\n formName: titleSchema,\n formId: idSchema,\n formSlug: slugSchema,\n status: Joi.string()\n .valid(...Object.values(FormStatus))\n .required(),\n isPreview: Joi.boolean().required(),\n notificationEmail: notificationEmailAddressSchema.required()\n })\n\nexport const formAdapterSubmissionMessageDataSchema =\n Joi.object<FormAdapterSubmissionMessageData>().keys({\n main: Joi.object(),\n repeaters: Joi.object(),\n files: Joi.object()\n })\n\nexport const formAdapterSubmissionMessagePayloadSchema =\n Joi.object<FormAdapterSubmissionMessagePayload>().keys({\n meta: formAdapterSubmissionMessageMetaSchema.required(),\n data: formAdapterSubmissionMessageDataSchema.required()\n })\n"],"mappings":"AAAA,SACEA,UAAU,EACVC,QAAQ,EACRC,8BAA8B,EAC9BC,UAAU,EACVC,WAAW,QACN,oBAAoB;AAC3B,OAAOC,GAAG,MAAM,KAAK;AAErB,SACEC,kCAAkC;AAMpC,OAAO,MAAMC,sCAAsC,GACjDF,GAAG,CAACG,MAAM,CAAmC,CAAC,CAACC,IAAI,CAAC;EAClDC,aAAa,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,KAAK,CAC/B,GAAGC,MAAM,CAACC,MAAM,CAACR,kCAAkC,CACrD,CAAC;EACDS,SAAS,EAAEV,GAAG,CAACW,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAChCC,eAAe,EAAEb,GAAG,CAACM,MAAM,CAAC,CAAC,CAACM,QAAQ,CAAC,CAAC;EACxCE,QAAQ,EAAEf,WAAW;EACrBgB,MAAM,EAAEnB,QAAQ;EAChBoB,QAAQ,EAAElB,UAAU;EACpBmB,MAAM,EAAEjB,GAAG,CAACM,MAAM,CAAC,CAAC,CACjBC,KAAK,CAAC,GAAGC,MAAM,CAACC,MAAM,CAACd,UAAU,CAAC,CAAC,CACnCiB,QAAQ,CAAC,CAAC;EACbM,SAAS,EAAElB,GAAG,CAACmB,OAAO,CAAC,CAAC,CAACP,QAAQ,CAAC,CAAC;EACnCQ,iBAAiB,EAAEvB,8BAA8B,CAACe,QAAQ,CAAC;AAC7D,CAAC,CAAC;AAEJ,OAAO,MAAMS,sCAAsC,GACjDrB,GAAG,CAACG,MAAM,CAAmC,CAAC,CAACC,IAAI,CAAC;EAClDkB,IAAI,EAAEtB,GAAG,CAACG,MAAM,CAAC,CAAC;EAClBoB,SAAS,EAAEvB,GAAG,CAACG,MAAM,CAAC,CAAC;EACvBqB,KAAK,EAAExB,GAAG,CAACG,MAAM,CAAC;AACpB,CAAC,CAAC;AAEJ,OAAO,MAAMsB,yCAAyC,GACpDzB,GAAG,CAACG,MAAM,CAAsC,CAAC,CAACC,IAAI,CAAC;EACrDsB,IAAI,EAAExB,sCAAsC,CAACU,QAAQ,CAAC,CAAC;EACvDe,IAAI,EAAEN,sCAAsC,CAACT,QAAQ,CAAC;AACxD,CAAC,CAAC","ignoreList":[]}
@@ -1,13 +1,14 @@
1
1
  import { type ComponentDef, type Event, type FormDefinition, type FormMetadata, type Item, type List, type Page } from '@defra/forms-model';
2
2
  import { type PluginProperties, type Request } from '@hapi/hapi';
3
3
  import { type JoiExpression, type ValidationErrorItem } from 'joi';
4
- import { type Component } from '~/src/server/plugins/engine/components/helpers.js';
4
+ import { type Component } from '~/src/server/plugins/engine/components/helpers/components.js';
5
5
  import { type BackLink, type ComponentText, type ComponentViewModel } from '~/src/server/plugins/engine/components/types.js';
6
6
  import { type FormModel } from '~/src/server/plugins/engine/models/index.js';
7
+ import { type RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js';
7
8
  import { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js';
8
- import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js';
9
+ import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js';
9
10
  import { type ViewContext } from '~/src/server/plugins/nunjucks/types.js';
10
- import { type FormAction, type FormParams, type FormRequest, type FormRequestPayload } from '~/src/server/routes/types.js';
11
+ import { type FormAction, type FormParams, type FormRequest, type FormRequestPayload, type FormStatus } from '~/src/server/routes/types.js';
11
12
  import { type RequestOptions } from '~/src/server/services/httpService.js';
12
13
  import { type Services } from '~/src/server/types.js';
13
14
  type RequestType = Request | FormRequest | FormRequestPayload;
@@ -285,4 +286,39 @@ export interface PluginOptions {
285
286
  onRequest?: OnRequestCallback;
286
287
  baseUrl: string;
287
288
  }
289
+ export interface FormAdapterSubmissionMessageMeta {
290
+ schemaVersion: FormAdapterSubmissionSchemaVersion;
291
+ timestamp: Date;
292
+ referenceNumber: string;
293
+ formName: string;
294
+ formId: string;
295
+ formSlug: string;
296
+ status: FormStatus;
297
+ isPreview: boolean;
298
+ notificationEmail: string;
299
+ }
300
+ export type FormAdapterSubmissionMessageMetaSerialised = Omit<FormAdapterSubmissionMessageMeta, 'schemaVersion' | 'timestamp' | 'status'> & {
301
+ schemaVersion: number;
302
+ status: string;
303
+ timestamp: string;
304
+ };
305
+ export interface FormAdapterSubmissionMessageData {
306
+ main: Record<string, RichFormValue>;
307
+ repeaters: Record<string, Record<string, RichFormValue>[]>;
308
+ files: Record<string, Record<string, string>[]>;
309
+ }
310
+ export declare enum FormAdapterSubmissionSchemaVersion {
311
+ V1 = 1
312
+ }
313
+ export interface FormAdapterSubmissionMessagePayload {
314
+ meta: FormAdapterSubmissionMessageMeta;
315
+ data: FormAdapterSubmissionMessageData;
316
+ }
317
+ export interface FormAdapterSubmissionMessage extends FormAdapterSubmissionMessagePayload {
318
+ messageId: string;
319
+ recordCreatedAt: Date;
320
+ }
321
+ export interface FormAdapterSubmissionService {
322
+ handleFormSubmission: (submissionMessage: FormAdapterSubmissionMessage) => unknown;
323
+ }
288
324
  export {};
@@ -50,4 +50,8 @@ export let FileStatus = /*#__PURE__*/function (FileStatus) {
50
50
  FileStatus["pending"] = "pending";
51
51
  return FileStatus;
52
52
  }({});
53
+ export let FormAdapterSubmissionSchemaVersion = /*#__PURE__*/function (FormAdapterSubmissionSchemaVersion) {
54
+ FormAdapterSubmissionSchemaVersion[FormAdapterSubmissionSchemaVersion["V1"] = 1] = "V1";
55
+ return FormAdapterSubmissionSchemaVersion;
56
+ }({});
53
57
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["UploadStatus","FileStatus"],"sources":["../../../../src/server/plugins/engine/types.ts"],"sourcesContent":["import {\n type ComponentDef,\n type Event,\n type FormDefinition,\n type FormMetadata,\n type Item,\n type List,\n type Page\n} from '@defra/forms-model'\nimport { type PluginProperties, type Request } from '@hapi/hapi'\nimport { type JoiExpression, type ValidationErrorItem } from 'joi'\n\nimport { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { type Component } from '~/src/server/plugins/engine/components/helpers.js'\nimport {\n type BackLink,\n type ComponentText,\n type ComponentViewModel\n} from '~/src/server/plugins/engine/components/types.js'\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'\nimport { type ViewContext } from '~/src/server/plugins/nunjucks/types.js'\nimport {\n type FormAction,\n type FormParams,\n type FormRequest,\n type FormRequestPayload\n} from '~/src/server/routes/types.js'\nimport { type RequestOptions } from '~/src/server/services/httpService.js'\nimport { type Services } from '~/src/server/types.js'\n\ntype RequestType = Request | FormRequest | FormRequestPayload\n\n/**\n * Form submission state stores the following in Redis:\n * Props containing user's submitted values as `{ [inputId]: value }` or as `{ [sectionName]: { [inputName]: value } }`\n * a) . e.g:\n * ```ts\n * {\n * _C9PRHmsgt: 'Ben',\n * WfLk9McjzX: 'Music',\n * IK7jkUFCBL: 'Royal Academy of Music'\n * }\n * ```\n *\n * b)\n * ```ts\n * {\n * checkBeforeYouStart: { ukPassport: true },\n * applicantDetails: {\n * numberOfApplicants: 1,\n * phoneNumber: '77777777',\n * emailAddress: 'aaa@aaa.com'\n * },\n * applicantOneDetails: {\n * firstName: 'a',\n * middleName: 'a',\n * lastName: 'a',\n * address: { addressLine1: 'a', addressLine2: 'a', town: 'a', postcode: 'a' }\n * }\n * }\n * ```\n */\n\n/**\n * Form submission state\n */\nexport type FormSubmissionState = {\n upload?: Record<string, TempFileState>\n} & FormState\n\nexport interface FormSubmissionError\n extends Pick<ValidationErrorItem, 'context' | 'path'> {\n href: string // e.g: '#dateField__day'\n name: string // e.g: 'dateField__day'\n text: string // e.g: 'Date field must be a real date'\n}\n\nexport interface FormPayloadParams {\n action?: FormAction\n confirm?: true\n crumb?: string\n itemId?: string\n}\n\n/**\n * Form POST for question pages\n * (after Joi has converted value types)\n */\nexport type FormPayload = FormPayloadParams & Partial<Record<string, FormValue>>\n\nexport type FormValue =\n | Item['value']\n | Item['value'][]\n | UploadState\n | RepeatListState\n | undefined\n\nexport type FormState = Partial<Record<string, FormStateValue>>\nexport type FormStateValue = Exclude<FormValue, undefined> | null\n\nexport interface FormValidationResult<\n ValueType extends FormPayload | FormSubmissionState\n> {\n value: ValueType\n errors: FormSubmissionError[] | undefined\n}\n\nexport interface FormContext {\n /**\n * Evaluation form state only (filtered by visited paths),\n * with values formatted for condition evaluation using\n * {@link FormComponent.getContextValueFromState}\n */\n evaluationState: FormState\n\n /**\n * Relevant form state only (filtered by visited paths)\n */\n relevantState: FormState\n\n /**\n * Relevant pages only (filtered by visited paths)\n */\n relevantPages: PageControllerClass[]\n\n /**\n * Form submission payload (single page)\n */\n payload: FormPayload\n\n /**\n * Form submission state (entire form)\n */\n state: FormSubmissionState\n\n /**\n * Validation errors (entire form)\n */\n errors?: FormSubmissionError[]\n\n /**\n * Visited paths evaluated from form state\n */\n paths: string[]\n\n /**\n * Preview URL direct access is allowed\n */\n isForceAccess: boolean\n\n /**\n * Miscellaneous extra data from event responses\n */\n data: object\n\n pageDefMap: Map<string, Page>\n listDefMap: Map<string, List>\n componentDefMap: Map<string, ComponentDef>\n pageMap: Map<string, PageControllerClass>\n componentMap: Map<string, Component>\n referenceNumber: string\n}\n\nexport type FormContextRequest = (\n | {\n method: 'get'\n payload?: undefined\n }\n | {\n method: 'post'\n payload: FormPayload\n }\n | {\n method: FormRequest['method']\n payload?: object | undefined\n }\n) &\n Pick<\n FormRequest,\n 'app' | 'method' | 'params' | 'path' | 'query' | 'url' | 'server'\n >\n\nexport interface UploadInitiateResponse {\n uploadId: string\n uploadUrl: string\n statusUrl: string\n}\n\nexport enum UploadStatus {\n initiated = 'initiated',\n pending = 'pending',\n ready = 'ready'\n}\n\nexport enum FileStatus {\n complete = 'complete',\n rejected = 'rejected',\n pending = 'pending'\n}\n\nexport type UploadState = FileState[]\n\nexport type FileUpload = {\n fileId: string\n filename: string\n contentLength: number\n} & (\n | {\n fileStatus: FileStatus.complete | FileStatus.rejected | FileStatus.pending\n errorMessage?: string\n }\n | {\n fileStatus: FileStatus.complete\n errorMessage?: undefined\n }\n)\n\nexport interface FileUploadMetadata {\n retrievalKey: string\n}\n\nexport type UploadStatusResponse =\n | {\n uploadStatus: UploadStatus.initiated\n metadata: FileUploadMetadata\n form: { file?: undefined }\n }\n | {\n uploadStatus: UploadStatus.pending | UploadStatus.ready\n metadata: FileUploadMetadata\n form: { file: FileUpload }\n numberOfRejectedFiles?: number\n }\n | {\n uploadStatus: UploadStatus.ready\n metadata: FileUploadMetadata\n form: { file: FileUpload }\n numberOfRejectedFiles: 0\n }\n\nexport type UploadStatusFileResponse = Exclude<\n UploadStatusResponse,\n { uploadStatus: UploadStatus.initiated }\n>\n\nexport interface FileState {\n uploadId: string\n status: UploadStatusFileResponse\n}\n\nexport interface TempFileState {\n upload?: UploadInitiateResponse\n files: UploadState\n}\n\nexport interface RepeatItemState extends FormPayload {\n itemId: string\n}\n\nexport type RepeatListState = RepeatItemState[]\n\nexport interface CheckAnswers {\n title?: ComponentText\n summaryList: SummaryList\n}\n\nexport interface SummaryList {\n classes?: string\n rows: SummaryListRow[]\n}\n\nexport interface SummaryListRow {\n key: ComponentText\n value: ComponentText\n actions?: { items: SummaryListAction[] }\n}\n\nexport type SummaryListAction = ComponentText & {\n href: string\n visuallyHiddenText: string\n}\n\nexport interface PageViewModelBase extends Partial<ViewContext> {\n page: PageController\n name?: string\n pageTitle: string\n sectionTitle?: string\n showTitle: boolean\n isStartPage: boolean\n backLink?: BackLink\n feedbackLink?: string\n serviceUrl: string\n phaseTag?: string\n}\n\nexport interface ItemDeletePageViewModel extends PageViewModelBase {\n context: FormContext\n itemTitle: string\n confirmation?: ComponentText\n buttonConfirm: ComponentText\n buttonCancel: ComponentText\n}\n\nexport interface FormPageViewModel extends PageViewModelBase {\n components: ComponentViewModel[]\n context: FormContext\n errors?: FormSubmissionError[]\n hasMissingNotificationEmail?: boolean\n allowSaveAndReturn: boolean\n}\n\nexport interface RepeaterSummaryPageViewModel extends PageViewModelBase {\n context: FormContext\n errors?: FormSubmissionError[]\n checkAnswers: CheckAnswers[]\n repeatTitle: string\n}\n\nexport interface FeaturedFormPageViewModel extends FormPageViewModel {\n formAction?: string\n formComponent: ComponentViewModel\n componentsBefore: ComponentViewModel[]\n uploadId: string | undefined\n proxyUrl: string | null\n}\n\nexport type PageViewModel =\n | PageViewModelBase\n | ItemDeletePageViewModel\n | FormPageViewModel\n | RepeaterSummaryPageViewModel\n | FeaturedFormPageViewModel\n\nexport type GlobalFunction = (value: unknown) => unknown\nexport type FilterFunction = (value: unknown) => unknown\nexport interface ErrorMessageTemplate {\n type: string\n template: JoiExpression\n}\n\nexport interface ErrorMessageTemplateList {\n baseErrors: ErrorMessageTemplate[]\n advancedSettingsErrors: ErrorMessageTemplate[]\n}\n\nexport type PreparePageEventRequestOptions = (\n options: RequestOptions,\n event: Event,\n page: PageControllerClass,\n context: FormContext\n) => void\n\nexport type OnRequestCallback = (\n request: FormRequest | FormRequestPayload,\n params: FormParams,\n definition: FormDefinition,\n metadata: FormMetadata\n) => void\n\nexport interface PluginOptions {\n model?: FormModel\n services?: Services\n controllers?: Record<string, typeof PageController>\n cacheName?: string\n globals?: Record<string, GlobalFunction>\n filters?: Record<string, FilterFunction>\n saveAndReturn?: {\n keyGenerator: (request: RequestType) => string\n sessionHydrator: (request: RequestType) => Promise<FormSubmissionState>\n sessionPersister: (\n state: FormSubmissionState,\n request: RequestType\n ) => Promise<void>\n }\n pluginPath?: string\n nunjucks: {\n baseLayoutPath: string\n paths: string[]\n }\n viewContext: PluginProperties['forms-engine-plugin']['viewContext']\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n baseUrl: string // base URL of the application, protocol and hostname e.g. \"https://myapp.com\"\n}\n"],"mappings":"AAkCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAmBA;AACA;AACA;AACA;;AAqGA,WAAYA,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAMxB,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":["UploadStatus","FileStatus","FormAdapterSubmissionSchemaVersion"],"sources":["../../../../src/server/plugins/engine/types.ts"],"sourcesContent":["import {\n type ComponentDef,\n type Event,\n type FormDefinition,\n type FormMetadata,\n type Item,\n type List,\n type Page\n} from '@defra/forms-model'\nimport { type PluginProperties, type Request } from '@hapi/hapi'\nimport { type JoiExpression, type ValidationErrorItem } from 'joi'\n\nimport { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { type Component } from '~/src/server/plugins/engine/components/helpers/components.js'\nimport {\n type BackLink,\n type ComponentText,\n type ComponentViewModel\n} from '~/src/server/plugins/engine/components/types.js'\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'\nimport { type ViewContext } from '~/src/server/plugins/nunjucks/types.js'\nimport {\n type FormAction,\n type FormParams,\n type FormRequest,\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\nimport { type RequestOptions } from '~/src/server/services/httpService.js'\nimport { type Services } from '~/src/server/types.js'\n\ntype RequestType = Request | FormRequest | FormRequestPayload\n\n/**\n * Form submission state stores the following in Redis:\n * Props containing user's submitted values as `{ [inputId]: value }` or as `{ [sectionName]: { [inputName]: value } }`\n * a) . e.g:\n * ```ts\n * {\n * _C9PRHmsgt: 'Ben',\n * WfLk9McjzX: 'Music',\n * IK7jkUFCBL: 'Royal Academy of Music'\n * }\n * ```\n *\n * b)\n * ```ts\n * {\n * checkBeforeYouStart: { ukPassport: true },\n * applicantDetails: {\n * numberOfApplicants: 1,\n * phoneNumber: '77777777',\n * emailAddress: 'aaa@aaa.com'\n * },\n * applicantOneDetails: {\n * firstName: 'a',\n * middleName: 'a',\n * lastName: 'a',\n * address: { addressLine1: 'a', addressLine2: 'a', town: 'a', postcode: 'a' }\n * }\n * }\n * ```\n */\n\n/**\n * Form submission state\n */\nexport type FormSubmissionState = {\n upload?: Record<string, TempFileState>\n} & FormState\n\nexport interface FormSubmissionError\n extends Pick<ValidationErrorItem, 'context' | 'path'> {\n href: string // e.g: '#dateField__day'\n name: string // e.g: 'dateField__day'\n text: string // e.g: 'Date field must be a real date'\n}\n\nexport interface FormPayloadParams {\n action?: FormAction\n confirm?: true\n crumb?: string\n itemId?: string\n}\n\n/**\n * Form POST for question pages\n * (after Joi has converted value types)\n */\nexport type FormPayload = FormPayloadParams & Partial<Record<string, FormValue>>\n\nexport type FormValue =\n | Item['value']\n | Item['value'][]\n | UploadState\n | RepeatListState\n | undefined\n\nexport type FormState = Partial<Record<string, FormStateValue>>\nexport type FormStateValue = Exclude<FormValue, undefined> | null\n\nexport interface FormValidationResult<\n ValueType extends FormPayload | FormSubmissionState\n> {\n value: ValueType\n errors: FormSubmissionError[] | undefined\n}\n\nexport interface FormContext {\n /**\n * Evaluation form state only (filtered by visited paths),\n * with values formatted for condition evaluation using\n * {@link FormComponent.getContextValueFromState}\n */\n evaluationState: FormState\n\n /**\n * Relevant form state only (filtered by visited paths)\n */\n relevantState: FormState\n\n /**\n * Relevant pages only (filtered by visited paths)\n */\n relevantPages: PageControllerClass[]\n\n /**\n * Form submission payload (single page)\n */\n payload: FormPayload\n\n /**\n * Form submission state (entire form)\n */\n state: FormSubmissionState\n\n /**\n * Validation errors (entire form)\n */\n errors?: FormSubmissionError[]\n\n /**\n * Visited paths evaluated from form state\n */\n paths: string[]\n\n /**\n * Preview URL direct access is allowed\n */\n isForceAccess: boolean\n\n /**\n * Miscellaneous extra data from event responses\n */\n data: object\n\n pageDefMap: Map<string, Page>\n listDefMap: Map<string, List>\n componentDefMap: Map<string, ComponentDef>\n pageMap: Map<string, PageControllerClass>\n componentMap: Map<string, Component>\n referenceNumber: string\n}\n\nexport type FormContextRequest = (\n | {\n method: 'get'\n payload?: undefined\n }\n | {\n method: 'post'\n payload: FormPayload\n }\n | {\n method: FormRequest['method']\n payload?: object | undefined\n }\n) &\n Pick<\n FormRequest,\n 'app' | 'method' | 'params' | 'path' | 'query' | 'url' | 'server'\n >\n\nexport interface UploadInitiateResponse {\n uploadId: string\n uploadUrl: string\n statusUrl: string\n}\n\nexport enum UploadStatus {\n initiated = 'initiated',\n pending = 'pending',\n ready = 'ready'\n}\n\nexport enum FileStatus {\n complete = 'complete',\n rejected = 'rejected',\n pending = 'pending'\n}\n\nexport type UploadState = FileState[]\n\nexport type FileUpload = {\n fileId: string\n filename: string\n contentLength: number\n} & (\n | {\n fileStatus: FileStatus.complete | FileStatus.rejected | FileStatus.pending\n errorMessage?: string\n }\n | {\n fileStatus: FileStatus.complete\n errorMessage?: undefined\n }\n)\n\nexport interface FileUploadMetadata {\n retrievalKey: string\n}\n\nexport type UploadStatusResponse =\n | {\n uploadStatus: UploadStatus.initiated\n metadata: FileUploadMetadata\n form: { file?: undefined }\n }\n | {\n uploadStatus: UploadStatus.pending | UploadStatus.ready\n metadata: FileUploadMetadata\n form: { file: FileUpload }\n numberOfRejectedFiles?: number\n }\n | {\n uploadStatus: UploadStatus.ready\n metadata: FileUploadMetadata\n form: { file: FileUpload }\n numberOfRejectedFiles: 0\n }\n\nexport type UploadStatusFileResponse = Exclude<\n UploadStatusResponse,\n { uploadStatus: UploadStatus.initiated }\n>\n\nexport interface FileState {\n uploadId: string\n status: UploadStatusFileResponse\n}\n\nexport interface TempFileState {\n upload?: UploadInitiateResponse\n files: UploadState\n}\n\nexport interface RepeatItemState extends FormPayload {\n itemId: string\n}\n\nexport type RepeatListState = RepeatItemState[]\n\nexport interface CheckAnswers {\n title?: ComponentText\n summaryList: SummaryList\n}\n\nexport interface SummaryList {\n classes?: string\n rows: SummaryListRow[]\n}\n\nexport interface SummaryListRow {\n key: ComponentText\n value: ComponentText\n actions?: { items: SummaryListAction[] }\n}\n\nexport type SummaryListAction = ComponentText & {\n href: string\n visuallyHiddenText: string\n}\n\nexport interface PageViewModelBase extends Partial<ViewContext> {\n page: PageController\n name?: string\n pageTitle: string\n sectionTitle?: string\n showTitle: boolean\n isStartPage: boolean\n backLink?: BackLink\n feedbackLink?: string\n serviceUrl: string\n phaseTag?: string\n}\n\nexport interface ItemDeletePageViewModel extends PageViewModelBase {\n context: FormContext\n itemTitle: string\n confirmation?: ComponentText\n buttonConfirm: ComponentText\n buttonCancel: ComponentText\n}\n\nexport interface FormPageViewModel extends PageViewModelBase {\n components: ComponentViewModel[]\n context: FormContext\n errors?: FormSubmissionError[]\n hasMissingNotificationEmail?: boolean\n allowSaveAndReturn: boolean\n}\n\nexport interface RepeaterSummaryPageViewModel extends PageViewModelBase {\n context: FormContext\n errors?: FormSubmissionError[]\n checkAnswers: CheckAnswers[]\n repeatTitle: string\n}\n\nexport interface FeaturedFormPageViewModel extends FormPageViewModel {\n formAction?: string\n formComponent: ComponentViewModel\n componentsBefore: ComponentViewModel[]\n uploadId: string | undefined\n proxyUrl: string | null\n}\n\nexport type PageViewModel =\n | PageViewModelBase\n | ItemDeletePageViewModel\n | FormPageViewModel\n | RepeaterSummaryPageViewModel\n | FeaturedFormPageViewModel\n\nexport type GlobalFunction = (value: unknown) => unknown\nexport type FilterFunction = (value: unknown) => unknown\nexport interface ErrorMessageTemplate {\n type: string\n template: JoiExpression\n}\n\nexport interface ErrorMessageTemplateList {\n baseErrors: ErrorMessageTemplate[]\n advancedSettingsErrors: ErrorMessageTemplate[]\n}\n\nexport type PreparePageEventRequestOptions = (\n options: RequestOptions,\n event: Event,\n page: PageControllerClass,\n context: FormContext\n) => void\n\nexport type OnRequestCallback = (\n request: FormRequest | FormRequestPayload,\n params: FormParams,\n definition: FormDefinition,\n metadata: FormMetadata\n) => void\n\nexport interface PluginOptions {\n model?: FormModel\n services?: Services\n controllers?: Record<string, typeof PageController>\n cacheName?: string\n globals?: Record<string, GlobalFunction>\n filters?: Record<string, FilterFunction>\n saveAndReturn?: {\n keyGenerator: (request: RequestType) => string\n sessionHydrator: (request: RequestType) => Promise<FormSubmissionState>\n sessionPersister: (\n state: FormSubmissionState,\n request: RequestType\n ) => Promise<void>\n }\n pluginPath?: string\n nunjucks: {\n baseLayoutPath: string\n paths: string[]\n }\n viewContext: PluginProperties['forms-engine-plugin']['viewContext']\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n baseUrl: string // base URL of the application, protocol and hostname e.g. \"https://myapp.com\"\n}\n\nexport interface FormAdapterSubmissionMessageMeta {\n schemaVersion: FormAdapterSubmissionSchemaVersion\n timestamp: Date\n referenceNumber: string\n formName: string\n formId: string\n formSlug: string\n status: FormStatus\n isPreview: boolean\n notificationEmail: string\n}\n\nexport type FormAdapterSubmissionMessageMetaSerialised = Omit<\n FormAdapterSubmissionMessageMeta,\n 'schemaVersion' | 'timestamp' | 'status'\n> & {\n schemaVersion: number\n status: string\n timestamp: string\n}\n\nexport interface FormAdapterSubmissionMessageData {\n main: Record<string, RichFormValue>\n repeaters: Record<string, Record<string, RichFormValue>[]>\n files: Record<string, Record<string, string>[]>\n}\n\nexport enum FormAdapterSubmissionSchemaVersion {\n V1 = 1\n}\n\nexport interface FormAdapterSubmissionMessagePayload {\n meta: FormAdapterSubmissionMessageMeta\n data: FormAdapterSubmissionMessageData\n}\n\nexport interface FormAdapterSubmissionMessage\n extends FormAdapterSubmissionMessagePayload {\n messageId: string\n recordCreatedAt: Date\n}\n\nexport interface FormAdapterSubmissionService {\n handleFormSubmission: (\n submissionMessage: FormAdapterSubmissionMessage\n ) => unknown\n}\n"],"mappings":"AAoCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAmBA;AACA;AACA;AACA;;AAqGA,WAAYA,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAMxB,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AA0NtB,WAAYC,kCAAkC,0BAAlCA,kCAAkC;EAAlCA,kCAAkC,CAAlCA,kCAAkC;EAAA,OAAlCA,kCAAkC;AAAA","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { getAnswer } from "../../engine/components/helpers.js";
1
+ import { getAnswer } from "../../engine/components/helpers/components.js";
2
2
 
3
3
  /**
4
4
  * Nunjucks filter to get the answer for a component
@@ -21,6 +21,6 @@ export function answer(name) {
21
21
 
22
22
  /**
23
23
  * @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'
24
- * @import { Field } from '~/src/server/plugins/engine/components/helpers.js'
24
+ * @import { Field } from '~/src/server/plugins/engine/components/helpers/components.js'
25
25
  */
26
26
  //# sourceMappingURL=answer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"answer.js","names":["getAnswer","answer","name","context","ctx","undefined","component","componentMap","get","isFormComponent","relevantState"],"sources":["../../../../../src/server/plugins/nunjucks/filters/answer.js"],"sourcesContent":["import { getAnswer } from '~/src/server/plugins/engine/components/helpers.js'\n\n/**\n * Nunjucks filter to get the answer for a component\n * @this {NunjucksContext}\n * @param {string} name - The name of the component to check\n */\nexport function answer(name) {\n const { context } = this.ctx\n\n if (!context) {\n return undefined\n }\n\n const component = context.componentMap.get(name)\n\n if (!component?.isFormComponent) {\n return undefined\n }\n\n return getAnswer(/** @type {Field} */ (component), context.relevantState)\n}\n\n/**\n * @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'\n * @import { Field } from '~/src/server/plugins/engine/components/helpers.js'\n */\n"],"mappings":"AAAA,SAASA,SAAS;;AAElB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAACC,IAAI,EAAE;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAG,IAAI,CAACC,GAAG;EAE5B,IAAI,CAACD,OAAO,EAAE;IACZ,OAAOE,SAAS;EAClB;EAEA,MAAMC,SAAS,GAAGH,OAAO,CAACI,YAAY,CAACC,GAAG,CAACN,IAAI,CAAC;EAEhD,IAAI,CAACI,SAAS,EAAEG,eAAe,EAAE;IAC/B,OAAOJ,SAAS;EAClB;EAEA,OAAOL,SAAS,CAAC,oBAAsBM,SAAS,EAAGH,OAAO,CAACO,aAAa,CAAC;AAC3E;;AAEA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"file":"answer.js","names":["getAnswer","answer","name","context","ctx","undefined","component","componentMap","get","isFormComponent","relevantState"],"sources":["../../../../../src/server/plugins/nunjucks/filters/answer.js"],"sourcesContent":["import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'\n\n/**\n * Nunjucks filter to get the answer for a component\n * @this {NunjucksContext}\n * @param {string} name - The name of the component to check\n */\nexport function answer(name) {\n const { context } = this.ctx\n\n if (!context) {\n return undefined\n }\n\n const component = context.componentMap.get(name)\n\n if (!component?.isFormComponent) {\n return undefined\n }\n\n return getAnswer(/** @type {Field} */ (component), context.relevantState)\n}\n\n/**\n * @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'\n * @import { Field } from '~/src/server/plugins/engine/components/helpers/components.js'\n */\n"],"mappings":"AAAA,SAASA,SAAS;;AAElB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAACC,IAAI,EAAE;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAG,IAAI,CAACC,GAAG;EAE5B,IAAI,CAACD,OAAO,EAAE;IACZ,OAAOE,SAAS;EAClB;EAEA,MAAMC,SAAS,GAAGH,OAAO,CAACI,YAAY,CAACC,GAAG,CAACN,IAAI,CAAC;EAEhD,IAAI,CAACI,SAAS,EAAEG,eAAe,EAAE;IAC/B,OAAOJ,SAAS;EAClB;EAEA,OAAOL,SAAS,CAAC,oBAAsBM,SAAS,EAAGH,OAAO,CAACO,aAAa,CAAC;AAC3E;;AAEA;AACA;AACA;AACA","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- import { getAnswer } from "../../engine/components/helpers.js";
1
+ import { getAnswer } from "../../engine/components/helpers/components.js";
2
2
  import { answer } from "./answer.js";
3
- jest.mock("../../engine/components/helpers.ts", () => ({
3
+ jest.mock("../../engine/components/helpers/components.ts", () => ({
4
4
  getAnswer: jest.fn()
5
5
  }));
6
6
  describe('answer Nunjucks filter', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"answer.test.js","names":["getAnswer","answer","jest","mock","fn","describe","mockThis","beforeEach","clearAllMocks","ctx","context","componentMap","Map","relevantState","someState","mocked","mockReturnValue","it","undefined","result","call","expect","toBeUndefined","not","toHaveBeenCalled","set","isFormComponent","mockFormComponent","someProperty","toHaveBeenCalledWith","toBe"],"sources":["../../../../../src/server/plugins/nunjucks/filters/answer.test.js"],"sourcesContent":["import { getAnswer } from '~/src/server/plugins/engine/components/helpers.js'\nimport { answer } from '~/src/server/plugins/nunjucks/filters/answer.js'\n\njest.mock('~/src/server/plugins/engine/components/helpers.ts', () => ({\n getAnswer: jest.fn()\n}))\n\ndescribe('answer Nunjucks filter', () => {\n /** @type { NunjucksContext } */\n let mockThis\n\n beforeEach(() => {\n jest.clearAllMocks()\n\n mockThis = /** @type {NunjucksContext} */ (\n /** @type {unknown} */ ({\n ctx: {\n context: {\n componentMap: new Map(),\n relevantState: { someState: 'value' }\n }\n }\n })\n )\n\n jest.mocked(getAnswer).mockReturnValue('test answer')\n })\n\n describe('missing context', () => {\n it('returns undefined', () => {\n mockThis.ctx.context = undefined\n\n const result = answer.call(mockThis, 'componentName')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('component lookup', () => {\n it('returns undefined for non-existent component', () => {\n const result = answer.call(mockThis, 'nonExistentComponent')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('non-form component', () => {\n it('returns undefined', () => {\n mockThis.ctx.context?.componentMap.set(\n 'nonFormComponent',\n // @ts-expect-error - simplified mock component for testing\n { isFormComponent: false }\n )\n\n const result = answer.call(mockThis, 'nonFormComponent')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('valid form component', () => {\n it('returns the answer', () => {\n const mockFormComponent = {\n isFormComponent: true,\n someProperty: 'value'\n }\n mockThis.ctx.context?.componentMap.set(\n 'validFormComponent',\n // @ts-expect-error - simplified mock component for testing\n mockFormComponent\n )\n\n const result = answer.call(mockThis, 'validFormComponent')\n\n expect(getAnswer).toHaveBeenCalledWith(\n mockFormComponent,\n mockThis.ctx.context?.relevantState\n )\n expect(result).toBe('test answer')\n })\n })\n})\n\n/**\n * @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'\n */\n"],"mappings":"AAAA,SAASA,SAAS;AAClB,SAASC,MAAM;AAEfC,IAAI,CAACC,IAAI,uCAAsD,OAAO;EACpEH,SAAS,EAAEE,IAAI,CAACE,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEHC,QAAQ,CAAC,wBAAwB,EAAE,MAAM;EACvC;EACA,IAAIC,QAAQ;EAEZC,UAAU,CAAC,MAAM;IACfL,IAAI,CAACM,aAAa,CAAC,CAAC;IAEpBF,QAAQ,GAAG;IACT,sBAAwB;MACtBG,GAAG,EAAE;QACHC,OAAO,EAAE;UACPC,YAAY,EAAE,IAAIC,GAAG,CAAC,CAAC;UACvBC,aAAa,EAAE;YAAEC,SAAS,EAAE;UAAQ;QACtC;MACF;IACF,CACD;IAEDZ,IAAI,CAACa,MAAM,CAACf,SAAS,CAAC,CAACgB,eAAe,CAAC,aAAa,CAAC;EACvD,CAAC,CAAC;EAEFX,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAChCY,EAAE,CAAC,mBAAmB,EAAE,MAAM;MAC5BX,QAAQ,CAACG,GAAG,CAACC,OAAO,GAAGQ,SAAS;MAEhC,MAAMC,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,eAAe,CAAC;MAErDe,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IACjCY,EAAE,CAAC,8CAA8C,EAAE,MAAM;MACvD,MAAME,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,sBAAsB,CAAC;MAE5De,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACnCY,EAAE,CAAC,mBAAmB,EAAE,MAAM;MAC5BX,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEC,YAAY,CAACc,GAAG,CACpC,kBAAkB;MAClB;MACA;QAAEC,eAAe,EAAE;MAAM,CAC3B,CAAC;MAED,MAAMP,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,kBAAkB,CAAC;MAExDe,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,sBAAsB,EAAE,MAAM;IACrCY,EAAE,CAAC,oBAAoB,EAAE,MAAM;MAC7B,MAAMU,iBAAiB,GAAG;QACxBD,eAAe,EAAE,IAAI;QACrBE,YAAY,EAAE;MAChB,CAAC;MACDtB,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEC,YAAY,CAACc,GAAG,CACpC,oBAAoB;MACpB;MACAE,iBACF,CAAC;MAED,MAAMR,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,oBAAoB,CAAC;MAE1De,MAAM,CAACrB,SAAS,CAAC,CAAC6B,oBAAoB,CACpCF,iBAAiB,EACjBrB,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEG,aACxB,CAAC;MACDQ,MAAM,CAACF,MAAM,CAAC,CAACW,IAAI,CAAC,aAAa,CAAC;IACpC,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC;;AAEF;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"file":"answer.test.js","names":["getAnswer","answer","jest","mock","fn","describe","mockThis","beforeEach","clearAllMocks","ctx","context","componentMap","Map","relevantState","someState","mocked","mockReturnValue","it","undefined","result","call","expect","toBeUndefined","not","toHaveBeenCalled","set","isFormComponent","mockFormComponent","someProperty","toHaveBeenCalledWith","toBe"],"sources":["../../../../../src/server/plugins/nunjucks/filters/answer.test.js"],"sourcesContent":["import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'\nimport { answer } from '~/src/server/plugins/nunjucks/filters/answer.js'\n\njest.mock(\n '~/src/server/plugins/engine/components/helpers/components.ts',\n () => ({\n getAnswer: jest.fn()\n })\n)\n\ndescribe('answer Nunjucks filter', () => {\n /** @type { NunjucksContext } */\n let mockThis\n\n beforeEach(() => {\n jest.clearAllMocks()\n\n mockThis = /** @type {NunjucksContext} */ (\n /** @type {unknown} */ ({\n ctx: {\n context: {\n componentMap: new Map(),\n relevantState: { someState: 'value' }\n }\n }\n })\n )\n\n jest.mocked(getAnswer).mockReturnValue('test answer')\n })\n\n describe('missing context', () => {\n it('returns undefined', () => {\n mockThis.ctx.context = undefined\n\n const result = answer.call(mockThis, 'componentName')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('component lookup', () => {\n it('returns undefined for non-existent component', () => {\n const result = answer.call(mockThis, 'nonExistentComponent')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('non-form component', () => {\n it('returns undefined', () => {\n mockThis.ctx.context?.componentMap.set(\n 'nonFormComponent',\n // @ts-expect-error - simplified mock component for testing\n { isFormComponent: false }\n )\n\n const result = answer.call(mockThis, 'nonFormComponent')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('valid form component', () => {\n it('returns the answer', () => {\n const mockFormComponent = {\n isFormComponent: true,\n someProperty: 'value'\n }\n mockThis.ctx.context?.componentMap.set(\n 'validFormComponent',\n // @ts-expect-error - simplified mock component for testing\n mockFormComponent\n )\n\n const result = answer.call(mockThis, 'validFormComponent')\n\n expect(getAnswer).toHaveBeenCalledWith(\n mockFormComponent,\n mockThis.ctx.context?.relevantState\n )\n expect(result).toBe('test answer')\n })\n })\n})\n\n/**\n * @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'\n */\n"],"mappings":"AAAA,SAASA,SAAS;AAClB,SAASC,MAAM;AAEfC,IAAI,CAACC,IAAI,kDAEP,OAAO;EACLH,SAAS,EAAEE,IAAI,CAACE,EAAE,CAAC;AACrB,CAAC,CACH,CAAC;AAEDC,QAAQ,CAAC,wBAAwB,EAAE,MAAM;EACvC;EACA,IAAIC,QAAQ;EAEZC,UAAU,CAAC,MAAM;IACfL,IAAI,CAACM,aAAa,CAAC,CAAC;IAEpBF,QAAQ,GAAG;IACT,sBAAwB;MACtBG,GAAG,EAAE;QACHC,OAAO,EAAE;UACPC,YAAY,EAAE,IAAIC,GAAG,CAAC,CAAC;UACvBC,aAAa,EAAE;YAAEC,SAAS,EAAE;UAAQ;QACtC;MACF;IACF,CACD;IAEDZ,IAAI,CAACa,MAAM,CAACf,SAAS,CAAC,CAACgB,eAAe,CAAC,aAAa,CAAC;EACvD,CAAC,CAAC;EAEFX,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAChCY,EAAE,CAAC,mBAAmB,EAAE,MAAM;MAC5BX,QAAQ,CAACG,GAAG,CAACC,OAAO,GAAGQ,SAAS;MAEhC,MAAMC,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,eAAe,CAAC;MAErDe,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IACjCY,EAAE,CAAC,8CAA8C,EAAE,MAAM;MACvD,MAAME,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,sBAAsB,CAAC;MAE5De,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACnCY,EAAE,CAAC,mBAAmB,EAAE,MAAM;MAC5BX,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEC,YAAY,CAACc,GAAG,CACpC,kBAAkB;MAClB;MACA;QAAEC,eAAe,EAAE;MAAM,CAC3B,CAAC;MAED,MAAMP,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,kBAAkB,CAAC;MAExDe,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,sBAAsB,EAAE,MAAM;IACrCY,EAAE,CAAC,oBAAoB,EAAE,MAAM;MAC7B,MAAMU,iBAAiB,GAAG;QACxBD,eAAe,EAAE,IAAI;QACrBE,YAAY,EAAE;MAChB,CAAC;MACDtB,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEC,YAAY,CAACc,GAAG,CACpC,oBAAoB;MACpB;MACAE,iBACF,CAAC;MAED,MAAMR,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,oBAAoB,CAAC;MAE1De,MAAM,CAACrB,SAAS,CAAC,CAAC6B,oBAAoB,CACpCF,iBAAiB,EACjBrB,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEG,aACxB,CAAC;MACDQ,MAAM,CAACF,MAAM,CAAC,CAACW,IAAI,CAAC,aAAa,CAAC;IACpC,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC;;AAEF;AACA;AACA","ignoreList":[]}
@@ -3,5 +3,5 @@
3
3
  * @this {NunjucksContext}
4
4
  * @param {string} name - The name of the component
5
5
  */
6
- export function field(this: NunjucksContext, name: string): import("../../engine/components/SelectField.js").SelectField | import("../../engine/components/RadiosField.js").RadiosField | import("../../engine/components/YesNoField.js").YesNoField | import("../../engine/components/CheckboxesField.js").CheckboxesField | import("../../engine/components/DatePartsField.js").DatePartsField | import("../../engine/components/EmailAddressField.js").EmailAddressField | import("../../engine/components/MonthYearField.js").MonthYearField | import("../../engine/components/MultilineTextField.js").MultilineTextField | import("../../engine/components/NumberField.js").NumberField | import("../../engine/components/TelephoneNumberField.js").TelephoneNumberField | import("../../engine/components/TextField.js").TextField | import("../../engine/components/UkAddressField.js").UkAddressField | import("../../engine/components/FileUploadField.js").FileUploadField | import("../../engine/components/Details.js").Details | import("../../engine/components/Html.js").Html | import("../../engine/components/InsetText.js").InsetText | import("../../engine/components/List.js").List | import("../../engine/components/Markdown.js").Markdown | undefined;
6
+ export function field(this: NunjucksContext, name: string): import("../../engine/components/TextField.js").TextField | import("../../engine/components/SelectField.js").SelectField | import("../../engine/components/RadiosField.js").RadiosField | import("../../engine/components/YesNoField.js").YesNoField | import("../../engine/components/CheckboxesField.js").CheckboxesField | import("../../engine/components/DatePartsField.js").DatePartsField | import("../../engine/components/EmailAddressField.js").EmailAddressField | import("../../engine/components/MonthYearField.js").MonthYearField | import("../../engine/components/MultilineTextField.js").MultilineTextField | import("../../engine/components/NumberField.js").NumberField | import("../../engine/components/TelephoneNumberField.js").TelephoneNumberField | import("../../engine/components/UkAddressField.js").UkAddressField | import("../../engine/components/FileUploadField.js").FileUploadField | import("../../engine/components/Details.js").Details | import("../../engine/components/Html.js").Html | import("../../engine/components/InsetText.js").InsetText | import("../../engine/components/List.js").List | import("../../engine/components/Markdown.js").Markdown | undefined;
7
7
  import type { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js';
@@ -3,5 +3,5 @@
3
3
  * @this {NunjucksContext}
4
4
  * @param {string} path - The path of the page
5
5
  */
6
- export function page(this: NunjucksContext, path: string): import("../../engine/pageControllers/QuestionPageController.js").QuestionPageController | import("../../engine/pageControllers/StartPageController.js").StartPageController | import("../../engine/pageControllers/RepeatPageController.js").RepeatPageController | undefined;
6
+ export function page(this: NunjucksContext, path: string): import("../../engine/pageControllers/StartPageController.js").StartPageController | import("../../engine/pageControllers/QuestionPageController.js").QuestionPageController | import("../../engine/pageControllers/RepeatPageController.js").RepeatPageController | undefined;
7
7
  import type { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js';
@@ -31,5 +31,5 @@ export interface RouteConfig {
31
31
  saveAndReturn?: PluginOptions['saveAndReturn'];
32
32
  }
33
33
  export interface OutputService {
34
- submit: (context: FormContext, request: FormRequestPayload, model: FormModel, emailAddress: string, items: DetailItem[], submitResponse: SubmitResponsePayload) => Promise<void>;
34
+ submit: (context: FormContext, request: FormRequestPayload, model: FormModel, emailAddress: string, items: DetailItem[], submitResponse: SubmitResponsePayload, formMetadata?: FormMetadata) => Promise<void>;
35
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/server/types.ts"],"sourcesContent":["import {\n type FormDefinition,\n type FormMetadata,\n type SubmitPayload,\n type SubmitResponsePayload\n} from '@defra/forms-model'\n\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type DetailItem } from '~/src/server/plugins/engine/models/types.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport {\n type FormContext,\n type OnRequestCallback,\n type PluginOptions,\n type PreparePageEventRequestOptions\n} from '~/src/server/plugins/engine/types.js'\nimport {\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\n\nexport interface FormsService {\n getFormMetadata: (slug: string) => Promise<FormMetadata>\n getFormDefinition: (\n id: string,\n state: FormStatus\n ) => Promise<FormDefinition | undefined>\n}\n\nexport interface FormSubmissionService {\n persistFiles: (\n files: { fileId: string; initiatedRetrievalKey: string }[],\n persistedRetrievalKey: string\n ) => Promise<object>\n submit: (data: SubmitPayload) => Promise<SubmitResponsePayload | undefined>\n}\n\nexport interface Services {\n formsService: FormsService\n formSubmissionService: FormSubmissionService\n outputService: OutputService\n}\n\nexport interface RouteConfig {\n formFileName?: string\n formFilePath?: string\n enforceCsrf?: boolean\n services?: Services\n controllers?: Record<string, typeof PageController>\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n saveAndReturn?: PluginOptions['saveAndReturn']\n}\n\nexport interface OutputService {\n submit: (\n context: FormContext,\n request: FormRequestPayload,\n model: FormModel,\n emailAddress: string,\n items: DetailItem[],\n submitResponse: SubmitResponsePayload\n ) => Promise<void>\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/server/types.ts"],"sourcesContent":["import {\n type FormDefinition,\n type FormMetadata,\n type SubmitPayload,\n type SubmitResponsePayload\n} from '@defra/forms-model'\n\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type DetailItem } from '~/src/server/plugins/engine/models/types.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport {\n type FormContext,\n type OnRequestCallback,\n type PluginOptions,\n type PreparePageEventRequestOptions\n} from '~/src/server/plugins/engine/types.js'\nimport {\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\n\nexport interface FormsService {\n getFormMetadata: (slug: string) => Promise<FormMetadata>\n getFormDefinition: (\n id: string,\n state: FormStatus\n ) => Promise<FormDefinition | undefined>\n}\n\nexport interface FormSubmissionService {\n persistFiles: (\n files: { fileId: string; initiatedRetrievalKey: string }[],\n persistedRetrievalKey: string\n ) => Promise<object>\n submit: (data: SubmitPayload) => Promise<SubmitResponsePayload | undefined>\n}\n\nexport interface Services {\n formsService: FormsService\n formSubmissionService: FormSubmissionService\n outputService: OutputService\n}\n\nexport interface RouteConfig {\n formFileName?: string\n formFilePath?: string\n enforceCsrf?: boolean\n services?: Services\n controllers?: Record<string, typeof PageController>\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n saveAndReturn?: PluginOptions['saveAndReturn']\n}\n\nexport interface OutputService {\n submit: (\n context: FormContext,\n request: FormRequestPayload,\n model: FormModel,\n emailAddress: string,\n items: DetailItem[],\n submitResponse: SubmitResponsePayload,\n formMetadata?: FormMetadata\n ) => Promise<void>\n}\n"],"mappings":"","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-engine-plugin",
3
- "version": "2.1.4",
3
+ "version": "2.1.6",
4
4
  "description": "Defra forms engine",
5
5
  "type": "module",
6
6
  "files": [
@@ -14,6 +14,11 @@
14
14
  "import": "./.server/server/plugins/engine/index.js",
15
15
  "default": "./.server/server/plugins/engine/index.js"
16
16
  },
17
+ "./types": {
18
+ "types": "./.server/server/plugins/engine/types/index.d.ts",
19
+ "import": "./.server/server/plugins/engine/types/index.js",
20
+ "default": "./.server/server/plugins/engine/types/index.js"
21
+ },
17
22
  "./shared.js": "./.server/client/javascripts/shared.js",
18
23
  "./shared.min.js": "./.public/javascripts/shared.min.js",
19
24
  "./shared.min.js.map": "./.public/javascripts/shared.min.js.map",
@@ -9,7 +9,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
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 { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
14
14
  import {
15
15
  listNumber,
@@ -11,7 +11,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
11
11
  import {
12
12
  getAnswer,
13
13
  type Field
14
- } from '~/src/server/plugins/engine/components/helpers.js'
14
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
15
15
  import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
16
16
  import {
17
17
  listNumber,
@@ -9,10 +9,10 @@ import joi, {
9
9
  } from 'joi'
10
10
 
11
11
  import { type ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
12
- import { type Component } from '~/src/server/plugins/engine/components/helpers.js'
12
+ import { type Component } 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 { type FormModel } from '~/src/server/plugins/engine/models/index.js'
15
- import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
15
+ import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
16
16
 
17
17
  export class ComponentBase {
18
18
  page?: PageControllerClass
@@ -15,11 +15,11 @@ import {
15
15
  type Component,
16
16
  type Field,
17
17
  type Guidance
18
- } from '~/src/server/plugins/engine/components/helpers.js'
18
+ } from '~/src/server/plugins/engine/components/helpers/components.js'
19
19
  import { type ComponentViewModel } from '~/src/server/plugins/engine/components/types.js'
20
20
  import { getErrors } from '~/src/server/plugins/engine/helpers.js'
21
21
  import { type FormModel } from '~/src/server/plugins/engine/models/index.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 { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
24
24
  import {
25
25
  type FormPayload,
@@ -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'