@defra/forms-engine-plugin 0.1.18 → 0.1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.server/client/javascripts/application.d.ts +1 -0
- package/.server/client/javascripts/file-upload.d.ts +9 -0
- package/.server/config/index.d.ts +45 -0
- package/.server/config/index.js +1 -1
- package/.server/config/index.js.map +1 -1
- package/.server/index.d.ts +1 -0
- package/.server/server/common/helpers/logging/logger-options.d.ts +80 -0
- package/.server/server/common/helpers/logging/logger.d.ts +1 -0
- package/.server/server/common/helpers/logging/request-logger.d.ts +83 -0
- package/.server/server/common/helpers/logging/request-tracing.d.ts +7 -0
- package/.server/server/common/helpers/redis-client.d.ts +9 -0
- package/.server/server/constants.d.ts +3 -0
- package/.server/server/devserver/dxt-devtool-baselayout.html +1 -1
- package/.server/server/index.d.ts +3 -0
- package/.server/server/plugins/crumb.d.ts +4 -0
- package/.server/server/plugins/engine/components/AutocompleteField.d.ts +55 -0
- package/.server/server/plugins/engine/components/CheckboxesField.d.ts +15 -0
- package/.server/server/plugins/engine/components/ComponentBase.d.ts +33 -0
- package/.server/server/plugins/engine/components/ComponentCollection.d.ts +60 -0
- package/.server/server/plugins/engine/components/DatePartsField.d.ts +76 -0
- package/.server/server/plugins/engine/components/Details.d.ts +53 -0
- package/.server/server/plugins/engine/components/EmailAddressField.d.ts +59 -0
- package/.server/server/plugins/engine/components/FileUploadField.d.ts +79 -0
- package/.server/server/plugins/engine/components/FormComponent.d.ts +95 -0
- package/.server/server/plugins/engine/components/Html.d.ts +53 -0
- package/.server/server/plugins/engine/components/InsetText.d.ts +52 -0
- package/.server/server/plugins/engine/components/List.d.ts +56 -0
- package/.server/server/plugins/engine/components/ListFormComponent.d.ts +71 -0
- package/.server/server/plugins/engine/components/Markdown.d.ts +53 -0
- package/.server/server/plugins/engine/components/MonthYearField.d.ts +75 -0
- package/.server/server/plugins/engine/components/MultilineTextField.d.ts +67 -0
- package/.server/server/plugins/engine/components/NumberField.d.ts +68 -0
- package/.server/server/plugins/engine/components/RadiosField.d.ts +6 -0
- package/.server/server/plugins/engine/components/SelectField.d.ts +55 -0
- package/.server/server/plugins/engine/components/SelectionControlField.d.ts +60 -0
- package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +62 -0
- package/.server/server/plugins/engine/components/TextField.d.ts +19 -0
- package/.server/server/plugins/engine/components/UkAddressField.d.ts +80 -0
- package/.server/server/plugins/engine/components/YesNoField.d.ts +15 -0
- package/.server/server/plugins/engine/components/constants.d.ts +1 -0
- package/.server/server/plugins/engine/components/helpers.d.ts +40 -0
- package/.server/server/plugins/engine/components/index.d.ts +24 -0
- package/.server/server/plugins/engine/components/types.d.ts +100 -0
- package/.server/server/plugins/engine/configureEnginePlugin.d.ts +8 -0
- package/.server/server/plugins/engine/helpers.d.ts +74 -0
- package/.server/server/plugins/engine/index.d.ts +10 -0
- package/.server/server/plugins/engine/models/FormModel.d.ts +59 -0
- package/.server/server/plugins/engine/models/RepeatingSummaryViewModel.d.ts +1 -0
- package/.server/server/plugins/engine/models/Section.d.ts +1 -0
- package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +25 -0
- package/.server/server/plugins/engine/models/index.d.ts +2 -0
- package/.server/server/plugins/engine/models/types.d.ts +87 -0
- package/.server/server/plugins/engine/outputFormatters/human/v1.d.ts +5 -0
- package/.server/server/plugins/engine/outputFormatters/index.d.ts +7 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v1.d.ts +5 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +5 -0
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +61 -0
- package/.server/server/plugins/engine/pageControllers/PageController.d.ts +43 -0
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +58 -0
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +35 -0
- package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +50 -0
- package/.server/server/plugins/engine/pageControllers/StatusPageController.d.ts +12 -0
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +26 -0
- package/.server/server/plugins/engine/pageControllers/TerminalPageController.d.ts +9 -0
- package/.server/server/plugins/engine/pageControllers/helpers.d.ts +19 -0
- package/.server/server/plugins/engine/pageControllers/index.d.ts +8 -0
- package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +8 -0
- package/.server/server/plugins/engine/plugin.d.ts +33 -0
- package/.server/server/plugins/engine/referenceNumbers.d.ts +5 -0
- package/.server/server/plugins/engine/services/formSubmissionService.d.ts +24 -0
- package/.server/server/plugins/engine/services/formsService.d.ts +16 -0
- package/.server/server/plugins/engine/services/index.d.ts +3 -0
- package/.server/server/plugins/engine/services/localFormsService.d.ts +1 -0
- package/.server/server/plugins/engine/services/notifyService.d.ts +5 -0
- package/.server/server/plugins/engine/services/uploadService.d.ts +14 -0
- package/.server/server/plugins/engine/types.d.ts +256 -0
- package/.server/server/plugins/errorPages.d.ts +7 -0
- package/.server/server/plugins/nunjucks/context.d.ts +16 -0
- package/.server/server/plugins/nunjucks/context.js +8 -10
- package/.server/server/plugins/nunjucks/context.js.map +1 -1
- package/.server/server/plugins/nunjucks/environment.d.ts +21 -0
- package/.server/server/plugins/nunjucks/filters/answer.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/evaluate.d.ts +8 -0
- package/.server/server/plugins/nunjucks/filters/field.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/highlight.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/href.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/index.d.ts +8 -0
- package/.server/server/plugins/nunjucks/filters/inspect.d.ts +6 -0
- package/.server/server/plugins/nunjucks/filters/page.d.ts +7 -0
- package/.server/server/plugins/nunjucks/index.d.ts +3 -0
- package/.server/server/plugins/nunjucks/plugin.d.ts +6 -0
- package/.server/server/plugins/nunjucks/render.d.ts +21 -0
- package/.server/server/plugins/nunjucks/types.d.ts +56 -0
- package/.server/server/plugins/nunjucks/types.js +0 -7
- package/.server/server/plugins/nunjucks/types.js.map +1 -1
- package/.server/server/plugins/pulse.d.ts +11 -0
- package/.server/server/plugins/session.d.ts +24 -0
- package/.server/server/routes/index.d.ts +1 -0
- package/.server/server/routes/public.d.ts +15 -0
- package/.server/server/routes/types.d.ts +38 -0
- package/.server/server/schemas/index.d.ts +10 -0
- package/.server/server/secure-context.d.ts +12 -0
- package/.server/server/services/cacheService.d.ts +49 -0
- package/.server/server/services/httpService.d.ts +57 -0
- package/.server/server/services/index.d.ts +1 -0
- package/.server/server/types.d.ts +31 -0
- package/.server/server/utils/file-form-service.d.ts +50 -0
- package/.server/server/utils/notify.d.ts +17 -0
- package/.server/server/utils/secure-context/get-trust-store-certs.d.ts +1 -0
- package/.server/server/utils/type-utils.d.ts +3 -0
- package/.server/server/utils/utils.d.ts +7 -0
- package/package.json +3 -2
- package/src/config/index.ts +1 -1
- package/src/server/devserver/dxt-devtool-baselayout.html +1 -1
- package/src/server/plugins/nunjucks/context.js +9 -10
- package/src/server/plugins/nunjucks/types.js +0 -7
|
@@ -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,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';
|
|
@@ -2,7 +2,6 @@ import { readFileSync } from 'node:fs';
|
|
|
2
2
|
import { basename, join } from 'node:path';
|
|
3
3
|
import Boom from '@hapi/boom';
|
|
4
4
|
import { StatusCodes } from 'http-status-codes';
|
|
5
|
-
import pkg from "../../../../package.json" with { type: 'json' };
|
|
6
5
|
import { config } from "../../../config/index.js";
|
|
7
6
|
import { createLogger } from "../../common/helpers/logging/logger.js";
|
|
8
7
|
import { checkFormStatus, encodeUrl, safeGenerateCrumb } from "../engine/helpers.js";
|
|
@@ -44,15 +43,6 @@ export async function context(request) {
|
|
|
44
43
|
// take consumers props first so we can override it
|
|
45
44
|
...consumerViewContext,
|
|
46
45
|
baseLayoutPath: pluginStorage.baseLayoutPath,
|
|
47
|
-
appVersion: pkg.version,
|
|
48
|
-
config: {
|
|
49
|
-
cdpEnvironment: config.get('cdpEnvironment'),
|
|
50
|
-
designerUrl: config.get('designerUrl'),
|
|
51
|
-
feedbackLink: encodeUrl(config.get('feedbackLink')),
|
|
52
|
-
phaseTag: config.get('phaseTag'),
|
|
53
|
-
serviceName: config.get('serviceName'),
|
|
54
|
-
serviceVersion: config.get('serviceVersion')
|
|
55
|
-
},
|
|
56
46
|
crumb: safeGenerateCrumb(request),
|
|
57
47
|
currentPath: `${request.path}${request.url.search}`,
|
|
58
48
|
previewMode: isPreviewMode ? formState : undefined,
|
|
@@ -77,6 +67,14 @@ export function devtoolContext(_request) {
|
|
|
77
67
|
}
|
|
78
68
|
}
|
|
79
69
|
return {
|
|
70
|
+
config: {
|
|
71
|
+
cdpEnvironment: config.get('cdpEnvironment'),
|
|
72
|
+
designerUrl: config.get('designerUrl'),
|
|
73
|
+
feedbackLink: encodeUrl(config.get('feedbackLink')),
|
|
74
|
+
phaseTag: config.get('phaseTag'),
|
|
75
|
+
serviceName: config.get('serviceName'),
|
|
76
|
+
serviceVersion: config.get('serviceVersion')
|
|
77
|
+
},
|
|
80
78
|
assetPath: '/assets',
|
|
81
79
|
getDxtAssetPath: (asset = '') => {
|
|
82
80
|
return `/${webpackManifest?.[asset] ?? asset}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":["readFileSync","basename","join","Boom","StatusCodes","
|
|
1
|
+
{"version":3,"file":"context.js","names":["readFileSync","basename","join","Boom","StatusCodes","config","createLogger","checkFormStatus","encodeUrl","safeGenerateCrumb","logger","webpackManifest","context","request","params","response","isPreview","isPreviewMode","state","formState","isResponseOK","isBoom","statusCode","OK","pluginStorage","server","plugins","consumerViewContext","Error","baseLayoutPath","viewContext","ctx","crumb","currentPath","path","url","search","previewMode","undefined","slug","devtoolContext","_request","manifestPath","get","JSON","parse","error","cdpEnvironment","designerUrl","feedbackLink","phaseTag","serviceName","serviceVersion","assetPath","getDxtAssetPath","asset"],"sources":["../../../../src/server/plugins/nunjucks/context.js"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\n\nimport Boom from '@hapi/boom'\nimport { StatusCodes } from 'http-status-codes'\n\nimport { config } from '~/src/config/index.js'\nimport { createLogger } from '~/src/server/common/helpers/logging/logger.js'\nimport {\n checkFormStatus,\n encodeUrl,\n safeGenerateCrumb\n} from '~/src/server/plugins/engine/helpers.js'\n\nconst logger = createLogger()\n\n/** @type {Record<string, string> | undefined} */\nlet webpackManifest\n\n/**\n * @param {FormRequest | FormRequestPayload | null} request\n */\nexport async function context(request) {\n const { params, response } = request ?? {}\n\n const { isPreview: isPreviewMode, state: formState } = checkFormStatus(params)\n\n // Only add the slug in to the context if the response is OK.\n // Footer meta links are not rendered when the slug is missing.\n const isResponseOK =\n !Boom.isBoom(response) && response?.statusCode === StatusCodes.OK\n\n const pluginStorage = request?.server.plugins['forms-engine-plugin']\n\n let consumerViewContext = {}\n\n if (!pluginStorage) {\n throw Error('context called before plugin registered')\n }\n\n if (!pluginStorage.baseLayoutPath) {\n throw Error('Missing baseLayoutPath in plugin.options.nunjucks')\n }\n\n if (typeof pluginStorage.viewContext === 'function') {\n consumerViewContext = await pluginStorage.viewContext(request)\n }\n\n /** @type {ViewContext} */\n const ctx = {\n // take consumers props first so we can override it\n ...consumerViewContext,\n baseLayoutPath: pluginStorage.baseLayoutPath,\n crumb: safeGenerateCrumb(request),\n currentPath: `${request.path}${request.url.search}`,\n previewMode: isPreviewMode ? formState : undefined,\n slug: isResponseOK ? params?.slug : undefined\n }\n\n return ctx\n}\n\n/**\n * Returns the context for the devtool. Consumers won't have access to this.\n * @param {FormRequest | FormRequestPayload | null} _request\n * @returns {Record<string, unknown> & { assetPath: string, getDxtAssetPath: (asset: string) => string }}\n */\nexport function devtoolContext(_request) {\n const manifestPath = join(config.get('publicDir'), 'assets-manifest.json')\n\n if (!webpackManifest) {\n try {\n // eslint-disable-next-line -- Allow JSON type 'any'\n webpackManifest = JSON.parse(readFileSync(manifestPath, 'utf-8'))\n } catch {\n logger.error(`Webpack ${basename(manifestPath)} not found`)\n }\n }\n\n return {\n config: {\n cdpEnvironment: config.get('cdpEnvironment'),\n designerUrl: config.get('designerUrl'),\n feedbackLink: encodeUrl(config.get('feedbackLink')),\n phaseTag: config.get('phaseTag'),\n serviceName: config.get('serviceName'),\n serviceVersion: config.get('serviceVersion')\n },\n assetPath: '/assets',\n getDxtAssetPath: (asset = '') => {\n return `/${webpackManifest?.[asset] ?? asset}`\n }\n }\n}\n\n/**\n * @import { ViewContext } from '~/src/server/plugins/nunjucks/types.js'\n * @import { FormRequest, FormRequestPayload } from '~/src/server/routes/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -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,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,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';
|
|
@@ -11,20 +11,13 @@
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* @typedef {object} ViewContext - Nunjucks view context
|
|
14
|
-
* @property {string} appVersion - Application version
|
|
15
14
|
* @property {string} [baseLayoutPath] - Base layout path
|
|
16
|
-
* @property {Partial<Config>} config - Application config properties
|
|
17
15
|
* @property {string} [crumb] - Cross-Site Request Forgery (CSRF) token
|
|
18
16
|
* @property {string} [cspNonce] - Content Security Policy (CSP) nonce
|
|
19
17
|
* @property {string} [currentPath] - Current path
|
|
20
18
|
* @property {string} [previewMode] - Preview mode
|
|
21
19
|
* @property {string} [slug] - Form slug
|
|
22
20
|
* @property {FormContext} [context] - the current form context
|
|
23
|
-
* @property {PluginOptions['viewContext']} [injectedViewContext] - the current form context
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @typedef {ReturnType<typeof config['getProperties']>} Config - Application config properties
|
|
28
21
|
*/
|
|
29
22
|
|
|
30
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/nunjucks/types.js"],"sourcesContent":["/**\n * @typedef {object} MacroOptions\n * @property {string} [callBlock] - Nunjucks call block content\n * @property {object} [params] - Nunjucks macro params\n */\n\n/**\n * @typedef {object} RenderOptions\n * @property {object} [context] - Nunjucks render context\n */\n\n/**\n * @typedef {object} ViewContext - Nunjucks view context\n * @property {string}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/nunjucks/types.js"],"sourcesContent":["/**\n * @typedef {object} MacroOptions\n * @property {string} [callBlock] - Nunjucks call block content\n * @property {object} [params] - Nunjucks macro params\n */\n\n/**\n * @typedef {object} RenderOptions\n * @property {object} [context] - Nunjucks render context\n */\n\n/**\n * @typedef {object} ViewContext - Nunjucks view context\n * @property {string} [baseLayoutPath] - Base layout path\n * @property {string} [crumb] - Cross-Site Request Forgery (CSRF) token\n * @property {string} [cspNonce] - Content Security Policy (CSP) nonce\n * @property {string} [currentPath] - Current path\n * @property {string} [previewMode] - Preview mode\n * @property {string} [slug] - Form slug\n * @property {FormContext} [context] - the current form context\n */\n\n/**\n * @typedef NunjucksContext\n * @property {ViewContext} ctx - the current nunjucks view context\n */\n\n/**\n * @import { config } from '~/src/config/index.js'\n * @import { FormContext } from '~/src/server/plugins/engine/types.js'\n * @import { PluginOptions } from '~/src/server/plugins/engine/plugin.js'\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA","ignoreList":[]}
|