@defra/forms-engine-plugin 0.1.19 → 0.1.21

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 (108) hide show
  1. package/.server/client/javascripts/application.d.ts +1 -0
  2. package/.server/client/javascripts/file-upload.d.ts +9 -0
  3. package/.server/config/index.d.ts +45 -0
  4. package/.server/index.d.ts +1 -0
  5. package/.server/server/common/helpers/logging/logger-options.d.ts +80 -0
  6. package/.server/server/common/helpers/logging/logger.d.ts +1 -0
  7. package/.server/server/common/helpers/logging/request-logger.d.ts +83 -0
  8. package/.server/server/common/helpers/logging/request-tracing.d.ts +7 -0
  9. package/.server/server/common/helpers/redis-client.d.ts +9 -0
  10. package/.server/server/constants.d.ts +3 -0
  11. package/.server/server/index.d.ts +3 -0
  12. package/.server/server/plugins/crumb.d.ts +4 -0
  13. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +55 -0
  14. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +15 -0
  15. package/.server/server/plugins/engine/components/ComponentBase.d.ts +33 -0
  16. package/.server/server/plugins/engine/components/ComponentCollection.d.ts +60 -0
  17. package/.server/server/plugins/engine/components/DatePartsField.d.ts +76 -0
  18. package/.server/server/plugins/engine/components/Details.d.ts +53 -0
  19. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +59 -0
  20. package/.server/server/plugins/engine/components/FileUploadField.d.ts +79 -0
  21. package/.server/server/plugins/engine/components/FormComponent.d.ts +95 -0
  22. package/.server/server/plugins/engine/components/Html.d.ts +53 -0
  23. package/.server/server/plugins/engine/components/InsetText.d.ts +52 -0
  24. package/.server/server/plugins/engine/components/List.d.ts +56 -0
  25. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +71 -0
  26. package/.server/server/plugins/engine/components/Markdown.d.ts +53 -0
  27. package/.server/server/plugins/engine/components/MonthYearField.d.ts +75 -0
  28. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +67 -0
  29. package/.server/server/plugins/engine/components/NumberField.d.ts +68 -0
  30. package/.server/server/plugins/engine/components/RadiosField.d.ts +6 -0
  31. package/.server/server/plugins/engine/components/SelectField.d.ts +55 -0
  32. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +60 -0
  33. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +62 -0
  34. package/.server/server/plugins/engine/components/TextField.d.ts +19 -0
  35. package/.server/server/plugins/engine/components/UkAddressField.d.ts +80 -0
  36. package/.server/server/plugins/engine/components/YesNoField.d.ts +19 -0
  37. package/.server/server/plugins/engine/components/YesNoField.js +7 -0
  38. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  39. package/.server/server/plugins/engine/components/constants.d.ts +1 -0
  40. package/.server/server/plugins/engine/components/helpers.d.ts +40 -0
  41. package/.server/server/plugins/engine/components/index.d.ts +24 -0
  42. package/.server/server/plugins/engine/components/types.d.ts +100 -0
  43. package/.server/server/plugins/engine/configureEnginePlugin.d.ts +8 -0
  44. package/.server/server/plugins/engine/helpers.d.ts +74 -0
  45. package/.server/server/plugins/engine/index.d.ts +10 -0
  46. package/.server/server/plugins/engine/models/FormModel.d.ts +59 -0
  47. package/.server/server/plugins/engine/models/RepeatingSummaryViewModel.d.ts +1 -0
  48. package/.server/server/plugins/engine/models/Section.d.ts +1 -0
  49. package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +25 -0
  50. package/.server/server/plugins/engine/models/index.d.ts +2 -0
  51. package/.server/server/plugins/engine/models/types.d.ts +87 -0
  52. package/.server/server/plugins/engine/outputFormatters/human/v1.d.ts +5 -0
  53. package/.server/server/plugins/engine/outputFormatters/index.d.ts +7 -0
  54. package/.server/server/plugins/engine/outputFormatters/machine/v1.d.ts +5 -0
  55. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +5 -0
  56. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +61 -0
  57. package/.server/server/plugins/engine/pageControllers/PageController.d.ts +43 -0
  58. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +58 -0
  59. package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +35 -0
  60. package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +50 -0
  61. package/.server/server/plugins/engine/pageControllers/StatusPageController.d.ts +12 -0
  62. package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +26 -0
  63. package/.server/server/plugins/engine/pageControllers/TerminalPageController.d.ts +9 -0
  64. package/.server/server/plugins/engine/pageControllers/helpers.d.ts +19 -0
  65. package/.server/server/plugins/engine/pageControllers/index.d.ts +8 -0
  66. package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +8 -0
  67. package/.server/server/plugins/engine/plugin.d.ts +33 -0
  68. package/.server/server/plugins/engine/referenceNumbers.d.ts +5 -0
  69. package/.server/server/plugins/engine/services/formSubmissionService.d.ts +24 -0
  70. package/.server/server/plugins/engine/services/formsService.d.ts +16 -0
  71. package/.server/server/plugins/engine/services/index.d.ts +3 -0
  72. package/.server/server/plugins/engine/services/localFormsService.d.ts +1 -0
  73. package/.server/server/plugins/engine/services/notifyService.d.ts +5 -0
  74. package/.server/server/plugins/engine/services/uploadService.d.ts +14 -0
  75. package/.server/server/plugins/engine/types.d.ts +256 -0
  76. package/.server/server/plugins/errorPages.d.ts +7 -0
  77. package/.server/server/plugins/nunjucks/context.d.ts +16 -0
  78. package/.server/server/plugins/nunjucks/environment.d.ts +21 -0
  79. package/.server/server/plugins/nunjucks/filters/answer.d.ts +7 -0
  80. package/.server/server/plugins/nunjucks/filters/evaluate.d.ts +8 -0
  81. package/.server/server/plugins/nunjucks/filters/field.d.ts +7 -0
  82. package/.server/server/plugins/nunjucks/filters/highlight.d.ts +7 -0
  83. package/.server/server/plugins/nunjucks/filters/href.d.ts +7 -0
  84. package/.server/server/plugins/nunjucks/filters/index.d.ts +8 -0
  85. package/.server/server/plugins/nunjucks/filters/inspect.d.ts +6 -0
  86. package/.server/server/plugins/nunjucks/filters/page.d.ts +7 -0
  87. package/.server/server/plugins/nunjucks/index.d.ts +3 -0
  88. package/.server/server/plugins/nunjucks/plugin.d.ts +6 -0
  89. package/.server/server/plugins/nunjucks/render.d.ts +21 -0
  90. package/.server/server/plugins/nunjucks/types.d.ts +56 -0
  91. package/.server/server/plugins/pulse.d.ts +11 -0
  92. package/.server/server/plugins/session.d.ts +24 -0
  93. package/.server/server/routes/index.d.ts +1 -0
  94. package/.server/server/routes/public.d.ts +15 -0
  95. package/.server/server/routes/types.d.ts +38 -0
  96. package/.server/server/schemas/index.d.ts +10 -0
  97. package/.server/server/secure-context.d.ts +12 -0
  98. package/.server/server/services/cacheService.d.ts +49 -0
  99. package/.server/server/services/httpService.d.ts +57 -0
  100. package/.server/server/services/index.d.ts +1 -0
  101. package/.server/server/types.d.ts +31 -0
  102. package/.server/server/utils/file-form-service.d.ts +50 -0
  103. package/.server/server/utils/notify.d.ts +17 -0
  104. package/.server/server/utils/secure-context/get-trust-store-certs.d.ts +1 -0
  105. package/.server/server/utils/type-utils.d.ts +3 -0
  106. package/.server/server/utils/utils.d.ts +7 -0
  107. package/package.json +3 -2
  108. package/src/server/plugins/engine/components/YesNoField.ts +7 -0
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Dummy function to get form metadata.
3
+ * @param {string} _slug - the slug of the form
4
+ * @returns {Promise<FormMetadata>}
5
+ */
6
+ export function getFormMetadata(_slug: string): Promise<FormMetadata>;
7
+ /**
8
+ * Dummy function to get form metadata.
9
+ * @param {string} _id - the id of the form
10
+ * @param {FormStatus} _state - the state of the form
11
+ * @returns {Promise<FormDefinition | undefined>}
12
+ */
13
+ export function getFormDefinition(_id: string, _state: FormStatus): Promise<FormDefinition | undefined>;
14
+ import type { FormMetadata } from '@defra/forms-model';
15
+ import type { FormStatus } from '@defra/forms-model';
16
+ import type { FormDefinition } from '@defra/forms-model';
@@ -0,0 +1,3 @@
1
+ export * as formsService from "~/src/server/plugins/engine/services/formsService.js";
2
+ export * as formSubmissionService from "~/src/server/plugins/engine/services/formSubmissionService.js";
3
+ export * as outputService from "~/src/server/plugins/engine/services/notifyService.js";
@@ -0,0 +1 @@
1
+ export function formsService(): Promise<import("../../../types.js").FormsService>;
@@ -0,0 +1,5 @@
1
+ import { type SubmitResponsePayload } from '@defra/forms-model';
2
+ import { type FormModel } from '~/src/server/plugins/engine/models/index.js';
3
+ import { type DetailItem } from '~/src/server/plugins/engine/models/types.js';
4
+ import { type FormRequestPayload } from '~/src/server/routes/types.js';
5
+ export declare function submit(request: FormRequestPayload, model: FormModel, emailAddress: string, items: DetailItem[], submitResponse: SubmitResponsePayload): Promise<void>;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Initiates a CDP file upload
3
+ * @param {string} path - the path of the page in the form
4
+ * @param {string} retrievalKey - the retrieval key for the files
5
+ * @param {string} [mimeTypesCsv] - the csv string of accepted mimeTypes
6
+ */
7
+ export function initiateUpload(path: string, retrievalKey: string, mimeTypesCsv?: string): Promise<UploadInitiateResponse | undefined>;
8
+ /**
9
+ * Get the status of a CDP file upload
10
+ * @param {string} uploadId - the ID of the upload
11
+ */
12
+ export function getUploadStatus(uploadId: string): Promise<UploadStatusResponse | undefined>;
13
+ import type { UploadInitiateResponse } from '~/src/server/plugins/engine/types.js';
14
+ import type { UploadStatusResponse } from '~/src/server/plugins/engine/types.js';
@@ -0,0 +1,256 @@
1
+ import { type ComponentDef, type Item, type List, type Page } from '@defra/forms-model';
2
+ import { type JoiExpression, type ValidationErrorItem } from 'joi';
3
+ import { type Component } from '~/src/server/plugins/engine/components/helpers.js';
4
+ import { type BackLink, type ComponentText, type ComponentViewModel } from '~/src/server/plugins/engine/components/types.js';
5
+ import { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js';
6
+ import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js';
7
+ import { type ViewContext } from '~/src/server/plugins/nunjucks/types.js';
8
+ import { type FormAction, type FormRequest } from '~/src/server/routes/types.js';
9
+ /**
10
+ * Form submission state stores the following in Redis:
11
+ * Props containing user's submitted values as `{ [inputId]: value }` or as `{ [sectionName]: { [inputName]: value } }`
12
+ * a) . e.g:
13
+ * ```ts
14
+ * {
15
+ * _C9PRHmsgt: 'Ben',
16
+ * WfLk9McjzX: 'Music',
17
+ * IK7jkUFCBL: 'Royal Academy of Music'
18
+ * }
19
+ * ```
20
+ *
21
+ * b)
22
+ * ```ts
23
+ * {
24
+ * checkBeforeYouStart: { ukPassport: true },
25
+ * applicantDetails: {
26
+ * numberOfApplicants: 1,
27
+ * phoneNumber: '77777777',
28
+ * emailAddress: 'aaa@aaa.com'
29
+ * },
30
+ * applicantOneDetails: {
31
+ * firstName: 'a',
32
+ * middleName: 'a',
33
+ * lastName: 'a',
34
+ * address: { addressLine1: 'a', addressLine2: 'a', town: 'a', postcode: 'a' }
35
+ * }
36
+ * }
37
+ * ```
38
+ */
39
+ /**
40
+ * Form submission state
41
+ */
42
+ export type FormSubmissionState = {
43
+ upload?: Record<string, TempFileState>;
44
+ } & FormState;
45
+ export interface FormSubmissionError extends Pick<ValidationErrorItem, 'context' | 'path'> {
46
+ href: string;
47
+ name: string;
48
+ text: string;
49
+ }
50
+ export interface FormParams {
51
+ action?: FormAction;
52
+ confirm?: true;
53
+ crumb?: string;
54
+ itemId?: string;
55
+ }
56
+ /**
57
+ * Form POST for question pages
58
+ * (after Joi has converted value types)
59
+ */
60
+ export type FormPayload = FormParams & Partial<Record<string, FormValue>>;
61
+ export type FormValue = Item['value'] | Item['value'][] | UploadState | RepeatListState | undefined;
62
+ export type FormState = Partial<Record<string, FormStateValue>>;
63
+ export type FormStateValue = Exclude<FormValue, undefined> | null;
64
+ export interface FormValidationResult<ValueType extends FormPayload | FormSubmissionState> {
65
+ value: ValueType;
66
+ errors: FormSubmissionError[] | undefined;
67
+ }
68
+ export interface FormContext {
69
+ /**
70
+ * Evaluation form state only (filtered by visited paths),
71
+ * with values formatted for condition evaluation using
72
+ * {@link FormComponent.getContextValueFromState}
73
+ */
74
+ evaluationState: FormState;
75
+ /**
76
+ * Relevant form state only (filtered by visited paths)
77
+ */
78
+ relevantState: FormState;
79
+ /**
80
+ * Relevant pages only (filtered by visited paths)
81
+ */
82
+ relevantPages: PageControllerClass[];
83
+ /**
84
+ * Form submission payload (single page)
85
+ */
86
+ payload: FormPayload;
87
+ /**
88
+ * Form submission state (entire form)
89
+ */
90
+ state: FormSubmissionState;
91
+ /**
92
+ * Validation errors (entire form)
93
+ */
94
+ errors?: FormSubmissionError[];
95
+ /**
96
+ * Visited paths evaluated from form state
97
+ */
98
+ paths: string[];
99
+ /**
100
+ * Preview URL direct access is allowed
101
+ */
102
+ isForceAccess: boolean;
103
+ /**
104
+ * Miscellaneous extra data from event responses
105
+ */
106
+ data: object;
107
+ pageDefMap: Map<string, Page>;
108
+ listDefMap: Map<string, List>;
109
+ componentDefMap: Map<string, ComponentDef>;
110
+ pageMap: Map<string, PageControllerClass>;
111
+ componentMap: Map<string, Component>;
112
+ referenceNumber: string;
113
+ }
114
+ export type FormContextRequest = ({
115
+ method: 'get';
116
+ payload?: undefined;
117
+ } | {
118
+ method: 'post';
119
+ payload: FormPayload;
120
+ } | {
121
+ method: FormRequest['method'];
122
+ payload?: object | undefined;
123
+ }) & Pick<FormRequest, 'app' | 'method' | 'params' | 'path' | 'query' | 'url'>;
124
+ export interface UploadInitiateResponse {
125
+ uploadId: string;
126
+ uploadUrl: string;
127
+ statusUrl: string;
128
+ }
129
+ export declare enum UploadStatus {
130
+ initiated = "initiated",
131
+ pending = "pending",
132
+ ready = "ready"
133
+ }
134
+ export declare enum FileStatus {
135
+ complete = "complete",
136
+ rejected = "rejected",
137
+ pending = "pending"
138
+ }
139
+ export type UploadState = FileState[];
140
+ export type FileUpload = {
141
+ fileId: string;
142
+ filename: string;
143
+ contentLength: number;
144
+ } & ({
145
+ fileStatus: FileStatus.complete | FileStatus.rejected | FileStatus.pending;
146
+ errorMessage?: string;
147
+ } | {
148
+ fileStatus: FileStatus.complete;
149
+ errorMessage?: undefined;
150
+ });
151
+ export interface FileUploadMetadata {
152
+ retrievalKey: string;
153
+ }
154
+ export type UploadStatusResponse = {
155
+ uploadStatus: UploadStatus.initiated;
156
+ metadata: FileUploadMetadata;
157
+ form: {
158
+ file?: undefined;
159
+ };
160
+ } | {
161
+ uploadStatus: UploadStatus.pending | UploadStatus.ready;
162
+ metadata: FileUploadMetadata;
163
+ form: {
164
+ file: FileUpload;
165
+ };
166
+ numberOfRejectedFiles?: number;
167
+ } | {
168
+ uploadStatus: UploadStatus.ready;
169
+ metadata: FileUploadMetadata;
170
+ form: {
171
+ file: FileUpload;
172
+ };
173
+ numberOfRejectedFiles: 0;
174
+ };
175
+ export type UploadStatusFileResponse = Exclude<UploadStatusResponse, {
176
+ uploadStatus: UploadStatus.initiated;
177
+ }>;
178
+ export interface FileState {
179
+ uploadId: string;
180
+ status: UploadStatusFileResponse;
181
+ }
182
+ export interface TempFileState {
183
+ upload?: UploadInitiateResponse;
184
+ files: UploadState;
185
+ }
186
+ export interface RepeatItemState extends FormPayload {
187
+ itemId: string;
188
+ }
189
+ export type RepeatListState = RepeatItemState[];
190
+ export interface CheckAnswers {
191
+ title?: ComponentText;
192
+ summaryList: SummaryList;
193
+ }
194
+ export interface SummaryList {
195
+ classes?: string;
196
+ rows: SummaryListRow[];
197
+ }
198
+ export interface SummaryListRow {
199
+ key: ComponentText;
200
+ value: ComponentText;
201
+ actions?: {
202
+ items: SummaryListAction[];
203
+ };
204
+ }
205
+ export type SummaryListAction = ComponentText & {
206
+ href: string;
207
+ visuallyHiddenText: string;
208
+ };
209
+ export interface PageViewModelBase extends Partial<ViewContext> {
210
+ page: PageController;
211
+ name?: string;
212
+ pageTitle: string;
213
+ sectionTitle?: string;
214
+ showTitle: boolean;
215
+ isStartPage: boolean;
216
+ backLink?: BackLink;
217
+ feedbackLink?: string;
218
+ serviceUrl: string;
219
+ phaseTag?: string;
220
+ }
221
+ export interface ItemDeletePageViewModel extends PageViewModelBase {
222
+ context: FormContext;
223
+ itemTitle: string;
224
+ confirmation?: ComponentText;
225
+ buttonConfirm: ComponentText;
226
+ buttonCancel: ComponentText;
227
+ }
228
+ export interface FormPageViewModel extends PageViewModelBase {
229
+ components: ComponentViewModel[];
230
+ context: FormContext;
231
+ errors?: FormSubmissionError[];
232
+ hasMissingNotificationEmail?: boolean;
233
+ }
234
+ export interface RepeaterSummaryPageViewModel extends PageViewModelBase {
235
+ context: FormContext;
236
+ errors?: FormSubmissionError[];
237
+ checkAnswers: CheckAnswers[];
238
+ repeatTitle: string;
239
+ }
240
+ export interface FeaturedFormPageViewModel extends FormPageViewModel {
241
+ formAction?: string;
242
+ formComponent: ComponentViewModel;
243
+ componentsBefore: ComponentViewModel[];
244
+ uploadId: string | undefined;
245
+ proxyUrl: string | null;
246
+ }
247
+ export type PageViewModel = PageViewModelBase | ItemDeletePageViewModel | FormPageViewModel | RepeaterSummaryPageViewModel | FeaturedFormPageViewModel;
248
+ export type FilterFunction = (value: unknown) => unknown;
249
+ export interface ErrorMessageTemplate {
250
+ type: string;
251
+ template: JoiExpression;
252
+ }
253
+ export interface ErrorMessageTemplateList {
254
+ baseErrors: ErrorMessageTemplate[];
255
+ advancedSettingsErrors: ErrorMessageTemplate[];
256
+ }
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ plugin: {
3
+ name: string;
4
+ register(server: import("@hapi/hapi").Server<import("@hapi/hapi").ServerApplicationState>): void;
5
+ };
6
+ };
7
+ export default _default;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @param {FormRequest | FormRequestPayload | null} request
3
+ */
4
+ export function context(request: FormRequest | FormRequestPayload | null): Promise<ViewContext>;
5
+ /**
6
+ * Returns the context for the devtool. Consumers won't have access to this.
7
+ * @param {FormRequest | FormRequestPayload | null} _request
8
+ * @returns {Record<string, unknown> & { assetPath: string, getDxtAssetPath: (asset: string) => string }}
9
+ */
10
+ export function devtoolContext(_request: FormRequest | FormRequestPayload | null): Record<string, unknown> & {
11
+ assetPath: string;
12
+ getDxtAssetPath: (asset: string) => string;
13
+ };
14
+ import type { FormRequest } from '~/src/server/routes/types.js';
15
+ import type { FormRequestPayload } from '~/src/server/routes/types.js';
16
+ import type { ViewContext } from '~/src/server/plugins/nunjucks/types.js';
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @this {NunjucksContext}
3
+ * @param {FormSubmissionError[]} errors
4
+ */
5
+ export function checkErrorTemplates(this: NunjucksContext, errors: FormSubmissionError[]): FormSubmissionError[];
6
+ /**
7
+ * @this {NunjucksContext}
8
+ * @param {ComponentViewModel} component
9
+ */
10
+ export function checkComponentTemplates(this: NunjucksContext, component: ComponentViewModel): ComponentViewModel;
11
+ /**
12
+ * @this {NunjucksContext}
13
+ * @param {string} template
14
+ */
15
+ export function evaluate(this: NunjucksContext, template: string): string;
16
+ export const paths: string[];
17
+ export const environment: nunjucks.Environment;
18
+ import type { FormSubmissionError } from '~/src/server/plugins/engine/types.js';
19
+ import type { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js';
20
+ import type { ComponentViewModel } from '~/src/server/plugins/engine/components/types.js';
21
+ import nunjucks from 'nunjucks';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Nunjucks filter to get the answer for a component
3
+ * @this {NunjucksContext}
4
+ * @param {string} name - The name of the component to check
5
+ */
6
+ export function answer(this: NunjucksContext, name: string): string | undefined;
7
+ import type { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Nunjucks filter to evaluate a liquid template.
3
+ * Currently just used in `src/server/views/layout.html#LN37` for the pageTitle
4
+ * @this {NunjucksContext}
5
+ * @param {string} template
6
+ */
7
+ export function evaluate(this: NunjucksContext, template: string): string;
8
+ import type { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Nunjucks filter to get the answer for a component
3
+ * @this {NunjucksContext}
4
+ * @param {string} name - The name of the component
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;
7
+ import type { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Format code with syntax highlighting
3
+ * @param {string} code - Code in plain text
4
+ * @param {string} [language] - Code programming language
5
+ * @returns {string} Code with syntax highlighting
6
+ */
7
+ export function highlight(code: string, language?: string): string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Nunjucks filter to get the answer for a component
3
+ * @this {NunjucksContext}
4
+ * @param {string} path - The name of the component
5
+ */
6
+ export function href(this: NunjucksContext, path: string): string | undefined;
7
+ import type { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js';
@@ -0,0 +1,8 @@
1
+ export { markdownToHtml as markdown } from "@defra/forms-model";
2
+ export { highlight } from "~/src/server/plugins/nunjucks/filters/highlight.js";
3
+ export { inspect } from "~/src/server/plugins/nunjucks/filters/inspect.js";
4
+ export { evaluate } from "~/src/server/plugins/nunjucks/filters/evaluate.js";
5
+ export { answer } from "~/src/server/plugins/nunjucks/filters/answer.js";
6
+ export { href } from "~/src/server/plugins/nunjucks/filters/href.js";
7
+ export { field } from "~/src/server/plugins/nunjucks/filters/field.js";
8
+ export { page } from "~/src/server/plugins/nunjucks/filters/page.js";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Format JavaScript objects as strings
3
+ * @param {unknown} object - JavaScript object to format
4
+ * @returns {string} Formatted string
5
+ */
6
+ export function inspect(object: unknown): string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Nunjucks filter to get the page for a given path
3
+ * @this {NunjucksContext}
4
+ * @param {string} path - The path of the page
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;
7
+ import type { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js';
@@ -0,0 +1,3 @@
1
+ export * as render from "~/src/server/plugins/nunjucks/render.js";
2
+ export { environment } from "~/src/server/plugins/nunjucks/environment.js";
3
+ export { plugin } from "~/src/server/plugins/nunjucks/plugin.js";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @type {ServerRegisterPluginObject<ServerViewsConfiguration>}
3
+ */
4
+ export const plugin: ServerRegisterPluginObject<vision.ServerViewsConfiguration>;
5
+ import vision from '@hapi/vision';
6
+ import type { ServerRegisterPluginObject } from '@hapi/hapi';
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Render Nunjucks macro
3
+ * @param {string} macroName
4
+ * @param {string} macroPath
5
+ * @param {RenderOptions & MacroOptions} [options]
6
+ */
7
+ export function macro(macroName: string, macroPath: string, options?: RenderOptions & MacroOptions): string;
8
+ /**
9
+ * Render Nunjucks code
10
+ * @param {string} viewString - Nunjucks string to render
11
+ * @param {RenderOptions} [options]
12
+ */
13
+ export function string(viewString: string, options?: RenderOptions): string;
14
+ /**
15
+ * Render Nunjucks view
16
+ * @param {string} viewPath
17
+ * @param {RenderOptions} [options]
18
+ */
19
+ export function view(viewPath: string, options?: RenderOptions): string;
20
+ import type { RenderOptions } from '~/src/server/plugins/nunjucks/types.js';
21
+ import type { MacroOptions } from '~/src/server/plugins/nunjucks/types.js';
@@ -0,0 +1,56 @@
1
+ export type MacroOptions = {
2
+ /**
3
+ * - Nunjucks call block content
4
+ */
5
+ callBlock?: string | undefined;
6
+ /**
7
+ * - Nunjucks macro params
8
+ */
9
+ params?: object | undefined;
10
+ };
11
+ export type RenderOptions = {
12
+ /**
13
+ * - Nunjucks render context
14
+ */
15
+ context?: object | undefined;
16
+ };
17
+ /**
18
+ * - Nunjucks view context
19
+ */
20
+ export type ViewContext = {
21
+ /**
22
+ * - Base layout path
23
+ */
24
+ baseLayoutPath?: string | undefined;
25
+ /**
26
+ * - Cross-Site Request Forgery (CSRF) token
27
+ */
28
+ crumb?: string | undefined;
29
+ /**
30
+ * - Content Security Policy (CSP) nonce
31
+ */
32
+ cspNonce?: string | undefined;
33
+ /**
34
+ * - Current path
35
+ */
36
+ currentPath?: string | undefined;
37
+ /**
38
+ * - Preview mode
39
+ */
40
+ previewMode?: string | undefined;
41
+ /**
42
+ * - Form slug
43
+ */
44
+ slug?: string | undefined;
45
+ /**
46
+ * - the current form context
47
+ */
48
+ context?: FormContext | undefined;
49
+ };
50
+ export type NunjucksContext = {
51
+ /**
52
+ * - the current nunjucks view context
53
+ */
54
+ ctx: ViewContext;
55
+ };
56
+ import type { FormContext } from '~/src/server/plugins/engine/types.js';
@@ -0,0 +1,11 @@
1
+ declare const _default: {
2
+ plugin: {
3
+ plugin: import("@hapi/hapi").Plugin<{
4
+ timeout: number;
5
+ }>;
6
+ };
7
+ options: {
8
+ timeout: number;
9
+ };
10
+ };
11
+ export default _default;
@@ -0,0 +1,24 @@
1
+ import yar from '@hapi/yar';
2
+ /**
3
+ * Yar is used for temporary session data but not form submissions, e.g. UI helpers, session flags.
4
+ */
5
+ declare const _default: {
6
+ plugin: import("@hapi/hapi").Plugin<yar.YarOptions>;
7
+ options: {
8
+ maxCookieSize: number;
9
+ cache: {
10
+ cache: string;
11
+ segment: string;
12
+ expiresIn: number;
13
+ };
14
+ /**
15
+ * @todo storeBlank is current commented out as it's a minor efficiency gain but breaks the auth tests if enabled.
16
+ * this only seems to affect the auth code, which we might remove anyway so it's temporarily disabled.
17
+ */
18
+ cookieOptions: {
19
+ password: string;
20
+ isSecure: boolean;
21
+ };
22
+ };
23
+ };
24
+ export default _default;
@@ -0,0 +1 @@
1
+ export { default as publicRoutes } from '~/src/server/routes/public.js';
@@ -0,0 +1,15 @@
1
+ declare const _default: {
2
+ method: "GET";
3
+ path: string;
4
+ options: {
5
+ cache: {
6
+ otherwise: string;
7
+ };
8
+ handler: {
9
+ directory: {
10
+ path: string;
11
+ };
12
+ };
13
+ };
14
+ }[];
15
+ export default _default;
@@ -0,0 +1,38 @@
1
+ import { type ReqRefDefaults, type Request } from '@hapi/hapi';
2
+ import { type FormPayload } from '~/src/server/plugins/engine/types.js';
3
+ export interface FormQuery extends Partial<Record<string, string>> {
4
+ /**
5
+ * Allow preview URL direct access without relevant page checks
6
+ */
7
+ force?: string;
8
+ /**
9
+ * Redirect location after 'continue' form action
10
+ */
11
+ returnUrl?: string;
12
+ }
13
+ export interface FormParams extends Partial<Record<string, string>> {
14
+ path: string;
15
+ slug: string;
16
+ state?: FormStatus;
17
+ }
18
+ export interface FormRequestRefs extends Omit<ReqRefDefaults, 'Params' | 'Payload' | 'Query'> {
19
+ Params: FormParams;
20
+ Payload: object | undefined;
21
+ Query: FormQuery;
22
+ }
23
+ export interface FormRequestPayloadRefs extends FormRequestRefs {
24
+ Payload: FormPayload;
25
+ }
26
+ export type FormRequest = Request<FormRequestRefs>;
27
+ export type FormRequestPayload = Request<FormRequestPayloadRefs>;
28
+ export declare enum FormAction {
29
+ Continue = "continue",
30
+ Validate = "validate",
31
+ Delete = "delete",
32
+ AddAnother = "add-another",
33
+ Send = "send"
34
+ }
35
+ export declare enum FormStatus {
36
+ Draft = "draft",
37
+ Live = "live"
38
+ }
@@ -0,0 +1,10 @@
1
+ import Joi from 'joi';
2
+ import { type FormParams } from '~/src/server/plugins/engine/types.js';
3
+ import { FormAction, FormStatus } from '~/src/server/routes/types.js';
4
+ export declare const stateSchema: Joi.StringSchema<FormStatus>;
5
+ export declare const actionSchema: Joi.StringSchema<FormAction>;
6
+ export declare const pathSchema: Joi.StringSchema<string>;
7
+ export declare const itemIdSchema: Joi.StringSchema<string>;
8
+ export declare const crumbSchema: Joi.StringSchema<string>;
9
+ export declare const confirmSchema: Joi.BooleanSchema<boolean>;
10
+ export declare const paramsSchema: Joi.ObjectSchema<FormParams>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Prepares the TLS secure context
3
+ * @param {Server} server
4
+ * @returns
5
+ */
6
+ export function prepareSecureContext(server: Server): tls.SecureContext;
7
+ /**
8
+ * @type {SecureContext}
9
+ */
10
+ export let secureContext: tls.SecureContext;
11
+ import type { Server } from '@hapi/hapi';
12
+ import tls from 'node:tls';