@defra/forms-model 3.0.52 → 3.0.54
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/dist/module/data-model/conditions-wrapper.js.map +1 -1
- package/dist/module/data-model/helpers.js.map +1 -1
- package/dist/module/data-model/input-wrapper.js.map +1 -1
- package/dist/module/form/{form-configuration.js → form-configuration/index.js} +1 -1
- package/dist/module/form/form-configuration/index.js.map +1 -0
- package/dist/module/form/form-definition/index.js +243 -0
- package/dist/module/form/form-definition/index.js.map +1 -0
- package/dist/module/form/form-definition/types.js.map +1 -0
- package/dist/module/form/form-metadata/index.js +12 -0
- package/dist/module/form/form-metadata/index.js.map +1 -0
- package/dist/module/form/form-metadata/types.js +2 -0
- package/dist/module/form/form-metadata/types.js.map +1 -0
- package/dist/module/form/index.js +3 -1
- package/dist/module/form/index.js.map +1 -1
- package/dist/module/form/types.js +2 -0
- package/dist/module/form/types.js.map +1 -0
- package/dist/module/index.js +0 -1
- package/dist/module/index.js.map +1 -1
- package/dist/types/data-model/conditions-wrapper.d.ts +1 -1
- package/dist/types/data-model/conditions-wrapper.d.ts.map +1 -1
- package/dist/types/data-model/helpers.d.ts +1 -1
- package/dist/types/data-model/helpers.d.ts.map +1 -1
- package/dist/types/data-model/input-wrapper.d.ts +1 -1
- package/dist/types/data-model/input-wrapper.d.ts.map +1 -1
- package/dist/types/form/{form-configuration.d.ts → form-configuration/index.d.ts} +1 -1
- package/dist/types/form/form-configuration/index.d.ts.map +1 -0
- package/dist/types/{schema/schema.d.ts → form/form-definition/index.d.ts} +9 -4
- package/dist/types/form/form-definition/index.d.ts.map +1 -0
- package/dist/types/{data-model → form/form-definition}/types.d.ts +5 -4
- package/dist/types/form/form-definition/types.d.ts.map +1 -0
- package/dist/types/form/form-metadata/index.d.ts +7 -0
- package/dist/types/form/form-metadata/index.d.ts.map +1 -0
- package/dist/types/form/form-metadata/types.d.ts +34 -0
- package/dist/types/form/form-metadata/types.d.ts.map +1 -0
- package/dist/types/form/index.d.ts +3 -1
- package/dist/types/form/index.d.ts.map +1 -1
- package/dist/types/form/types.d.ts +3 -0
- package/dist/types/form/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/data-model/conditions-wrapper.ts +1 -1
- package/src/data-model/helpers.ts +1 -1
- package/src/data-model/input-wrapper.ts +1 -1
- package/src/form/form-definition/index.ts +300 -0
- package/src/{data-model → form/form-definition}/types.ts +4 -1
- package/src/form/form-metadata/index.ts +16 -0
- package/src/form/form-metadata/types.ts +41 -0
- package/src/form/index.ts +3 -1
- package/src/form/types.ts +2 -0
- package/src/index.ts +1 -2
- package/dist/module/data-model/types.js.map +0 -1
- package/dist/module/form/form-configuration.js.map +0 -1
- package/dist/module/schema/index.js +0 -2
- package/dist/module/schema/index.js.map +0 -1
- package/dist/module/schema/schema.js +0 -235
- package/dist/module/schema/schema.js.map +0 -1
- package/dist/types/data-model/types.d.ts.map +0 -1
- package/dist/types/form/form-configuration.d.ts.map +0 -1
- package/dist/types/schema/index.d.ts +0 -2
- package/dist/types/schema/index.d.ts.map +0 -1
- package/dist/types/schema/schema.d.ts.map +0 -1
- package/src/schema/index.ts +0 -1
- package/src/schema/schema.ts +0 -300
- /package/dist/module/{data-model → form/form-definition}/types.js +0 -0
- /package/src/form/{form-configuration.ts → form-configuration/index.ts} +0 -0
@@ -1,235 +0,0 @@
|
|
1
|
-
import joi from 'joi';
|
2
|
-
|
3
|
-
/**
|
4
|
-
* If an optional key is added, CURRENT_VERSION does not need to be incremented.
|
5
|
-
* Only breaking changes will require an increment, as well as a migration script.
|
6
|
-
*/
|
7
|
-
export const CURRENT_VERSION = 2;
|
8
|
-
const sectionsSchema = joi.object().keys({
|
9
|
-
name: joi.string().required(),
|
10
|
-
title: joi.string().required(),
|
11
|
-
hideTitle: joi.boolean().default(false)
|
12
|
-
});
|
13
|
-
const conditionFieldSchema = joi.object().keys({
|
14
|
-
name: joi.string().required(),
|
15
|
-
type: joi.string().required(),
|
16
|
-
display: joi.string().required()
|
17
|
-
});
|
18
|
-
const conditionValueSchema = joi.object().keys({
|
19
|
-
type: joi.string().required(),
|
20
|
-
value: joi.string().required(),
|
21
|
-
display: joi.string().required()
|
22
|
-
});
|
23
|
-
const relativeTimeValueSchema = joi.object().keys({
|
24
|
-
type: joi.string().required(),
|
25
|
-
timePeriod: joi.string().required(),
|
26
|
-
timeUnit: joi.string().required(),
|
27
|
-
direction: joi.string().required(),
|
28
|
-
timeOnly: joi.boolean().required()
|
29
|
-
});
|
30
|
-
const conditionRefSchema = joi.object().keys({
|
31
|
-
conditionName: joi.string().required(),
|
32
|
-
conditionDisplayName: joi.string().required(),
|
33
|
-
coordinator: joi.string().optional()
|
34
|
-
});
|
35
|
-
const conditionSchema = joi.object().keys({
|
36
|
-
field: conditionFieldSchema,
|
37
|
-
operator: joi.string().required(),
|
38
|
-
value: joi.alternatives().try(conditionValueSchema, relativeTimeValueSchema),
|
39
|
-
coordinator: joi.string().optional()
|
40
|
-
});
|
41
|
-
const conditionGroupSchema = joi.object().keys({
|
42
|
-
conditions: joi.array().items(joi.alternatives().try(conditionSchema, conditionRefSchema, joi.any() /** Should be a joi.link('#conditionGroupSchema') */))
|
43
|
-
});
|
44
|
-
const conditionsModelSchema = joi.object().keys({
|
45
|
-
name: joi.string().required(),
|
46
|
-
conditions: joi.array().items(joi.alternatives().try(conditionSchema, conditionRefSchema, conditionGroupSchema))
|
47
|
-
});
|
48
|
-
const conditionsSchema = joi.object().keys({
|
49
|
-
name: joi.string().required(),
|
50
|
-
displayName: joi.string(),
|
51
|
-
value: joi.alternatives().try(joi.string(), conditionsModelSchema).required()
|
52
|
-
});
|
53
|
-
const localisedString = joi.alternatives().try(joi.object({
|
54
|
-
a: joi.any()
|
55
|
-
}).unknown(), joi.string().allow(''));
|
56
|
-
export const componentSchema = joi.object().keys({
|
57
|
-
type: joi.string().required(),
|
58
|
-
name: joi.string(),
|
59
|
-
title: localisedString,
|
60
|
-
hint: localisedString.optional(),
|
61
|
-
options: joi.object().default({}),
|
62
|
-
schema: joi.object({
|
63
|
-
min: joi.number(),
|
64
|
-
max: joi.number()
|
65
|
-
}).unknown(true).default({}),
|
66
|
-
list: joi.string().optional()
|
67
|
-
}).unknown(true);
|
68
|
-
const nextSchema = joi.object().keys({
|
69
|
-
path: joi.string().required(),
|
70
|
-
condition: joi.string().allow('').optional(),
|
71
|
-
redirect: joi.string().uri().optional()
|
72
|
-
});
|
73
|
-
|
74
|
-
/**
|
75
|
-
* `/status` is a special route for providing a user's application status.
|
76
|
-
* It should not be configured via the designer.
|
77
|
-
*/
|
78
|
-
const pageSchema = joi.object().keys({
|
79
|
-
path: joi.string().required().disallow('/status'),
|
80
|
-
title: localisedString,
|
81
|
-
section: joi.string(),
|
82
|
-
controller: joi.string(),
|
83
|
-
components: joi.array().items(componentSchema),
|
84
|
-
next: joi.array().items(nextSchema),
|
85
|
-
repeatField: joi.string().optional(),
|
86
|
-
options: joi.object().optional(),
|
87
|
-
backLinkFallback: joi.string().optional()
|
88
|
-
});
|
89
|
-
const toggleableString = joi.alternatives().try(joi.boolean(), joi.string());
|
90
|
-
const confirmationPageSchema = joi.object({
|
91
|
-
customText: joi.object({
|
92
|
-
title: joi.string().default('Application complete'),
|
93
|
-
paymentSkipped: toggleableString.default('Someone will be in touch to make a payment.'),
|
94
|
-
nextSteps: toggleableString.default('You will receive an email with details with the next steps.')
|
95
|
-
}).default(),
|
96
|
-
components: joi.array().items(componentSchema)
|
97
|
-
});
|
98
|
-
const paymentSkippedWarningPage = joi.object({
|
99
|
-
customText: joi.object({
|
100
|
-
title: joi.string().default('Pay for your application').optional(),
|
101
|
-
caption: joi.string().default('Payment').optional(),
|
102
|
-
body: joi.string().default('').optional()
|
103
|
-
})
|
104
|
-
});
|
105
|
-
const specialPagesSchema = joi.object().keys({
|
106
|
-
confirmationPage: confirmationPageSchema.optional(),
|
107
|
-
paymentSkippedWarningPage: paymentSkippedWarningPage.optional()
|
108
|
-
});
|
109
|
-
const listItemSchema = joi.object().keys({
|
110
|
-
text: localisedString,
|
111
|
-
value: joi.alternatives().try(joi.number(), joi.string()),
|
112
|
-
description: localisedString.optional(),
|
113
|
-
conditional: joi.object().keys({
|
114
|
-
components: joi.array().required().items(componentSchema.unknown(true)).unique('name')
|
115
|
-
}).allow(null).optional(),
|
116
|
-
condition: joi.string().allow(null, '').optional()
|
117
|
-
});
|
118
|
-
const listSchema = joi.object().keys({
|
119
|
-
name: joi.string().required(),
|
120
|
-
title: localisedString,
|
121
|
-
type: joi.string().required().valid('string', 'number'),
|
122
|
-
items: joi.array().items(listItemSchema)
|
123
|
-
});
|
124
|
-
const feeSchema = joi.object().keys({
|
125
|
-
description: joi.string().required(),
|
126
|
-
amount: joi.number().required(),
|
127
|
-
multiplier: joi.string().optional(),
|
128
|
-
condition: joi.string().optional(),
|
129
|
-
prefix: joi.string().optional()
|
130
|
-
});
|
131
|
-
const multiApiKeySchema = joi.object({
|
132
|
-
test: joi.string().optional(),
|
133
|
-
production: joi.string().optional()
|
134
|
-
});
|
135
|
-
const replyToConfigurationSchema = joi.object({
|
136
|
-
emailReplyToId: joi.string(),
|
137
|
-
condition: joi.string().allow('').optional()
|
138
|
-
});
|
139
|
-
const notifySchema = joi.object().keys({
|
140
|
-
apiKey: [joi.string().allow('').optional(), multiApiKeySchema],
|
141
|
-
templateId: joi.string(),
|
142
|
-
emailField: joi.string(),
|
143
|
-
personalisation: joi.array().items(joi.string()),
|
144
|
-
personalisationFieldCustomisation: joi.object().pattern(/./, joi.array().items(joi.string())).optional(),
|
145
|
-
addReferencesToPersonalisation: joi.boolean().optional(),
|
146
|
-
emailReplyToIdConfiguration: joi.array().items(replyToConfigurationSchema)
|
147
|
-
});
|
148
|
-
const emailSchema = joi.object().keys({
|
149
|
-
emailAddress: joi.string()
|
150
|
-
});
|
151
|
-
const webhookSchema = joi.object().keys({
|
152
|
-
url: joi.string(),
|
153
|
-
allowRetry: joi.boolean().default(true)
|
154
|
-
});
|
155
|
-
const outputSchema = joi.object().keys({
|
156
|
-
name: joi.string(),
|
157
|
-
title: joi.string().optional(),
|
158
|
-
type: joi.string().allow('notify', 'email', 'webhook', 'sheets'),
|
159
|
-
outputConfiguration: joi.alternatives().try(notifySchema, emailSchema, webhookSchema)
|
160
|
-
});
|
161
|
-
const feedbackSchema = joi.object().keys({
|
162
|
-
feedbackForm: joi.boolean().default(false),
|
163
|
-
url: joi.when('feedbackForm', {
|
164
|
-
is: joi.boolean().valid(false),
|
165
|
-
then: joi.string().optional().allow('')
|
166
|
-
}),
|
167
|
-
emailAddress: joi.string().email({
|
168
|
-
tlds: {
|
169
|
-
allow: false
|
170
|
-
}
|
171
|
-
}).optional()
|
172
|
-
});
|
173
|
-
const phaseBannerSchema = joi.object().keys({
|
174
|
-
phase: joi.string().valid('alpha', 'beta')
|
175
|
-
});
|
176
|
-
const feeOptionSchema = joi.object().keys({
|
177
|
-
payApiKey: [joi.string().allow('').optional(), multiApiKeySchema],
|
178
|
-
paymentReferenceFormat: [joi.string().optional()],
|
179
|
-
payReturnUrl: joi.string().optional(),
|
180
|
-
allowSubmissionWithoutPayment: joi.boolean().optional().default(true),
|
181
|
-
maxAttempts: joi.number().optional().default(3),
|
182
|
-
customPayErrorMessage: joi.string().optional(),
|
183
|
-
showPaymentSkippedWarningPage: joi.when('allowSubmissionWithoutPayment', {
|
184
|
-
is: true,
|
185
|
-
then: joi.boolean().valid(true, false).default(false),
|
186
|
-
otherwise: joi.boolean().valid(false).default(false)
|
187
|
-
})
|
188
|
-
}).default(({
|
189
|
-
payApiKey,
|
190
|
-
paymentReferenceFormat
|
191
|
-
}) => {
|
192
|
-
return {
|
193
|
-
...(payApiKey && {
|
194
|
-
payApiKey
|
195
|
-
}),
|
196
|
-
...(paymentReferenceFormat && {
|
197
|
-
paymentReferenceFormat
|
198
|
-
})
|
199
|
-
};
|
200
|
-
});
|
201
|
-
export const Schema = joi.object().required().keys({
|
202
|
-
name: localisedString.optional(),
|
203
|
-
feedback: feedbackSchema,
|
204
|
-
startPage: joi.string().required(),
|
205
|
-
pages: joi.array().required().items(pageSchema).unique('path'),
|
206
|
-
sections: joi.array().items(sectionsSchema).unique('name').required(),
|
207
|
-
conditions: joi.array().items(conditionsSchema).unique('name'),
|
208
|
-
lists: joi.array().items(listSchema).unique('name'),
|
209
|
-
fees: joi.array().items(feeSchema).optional(),
|
210
|
-
paymentReferenceFormat: joi.string().optional(),
|
211
|
-
metadata: joi.object({
|
212
|
-
a: joi.any()
|
213
|
-
}).unknown().optional(),
|
214
|
-
declaration: joi.string().allow('').optional(),
|
215
|
-
outputs: joi.array().items(outputSchema),
|
216
|
-
payApiKey: [joi.string().allow('').optional(), multiApiKeySchema],
|
217
|
-
skipSummary: joi.boolean().default(false),
|
218
|
-
version: joi.number().default(CURRENT_VERSION),
|
219
|
-
phaseBanner: phaseBannerSchema,
|
220
|
-
specialPages: specialPagesSchema.optional(),
|
221
|
-
feeOptions: feeOptionSchema
|
222
|
-
});
|
223
|
-
|
224
|
-
/**
|
225
|
-
* Schema versions:
|
226
|
-
* Undefined / 0 - initial version as at 28/8/20. Conditions may be in object structure or string form.
|
227
|
-
* 1 - Relevant components (radio, checkbox, select, autocomplete) now contain
|
228
|
-
* options as 'values' rather than referencing a data list
|
229
|
-
* 2 - Reverse v1. Values populating radio, checkboxes, select, autocomplete are defined in Lists only.
|
230
|
-
* TODO:- merge fees and paymentReferenceFormat
|
231
|
-
* 2 - 2023-05-04 `feeOptions` has been introduced. paymentReferenceFormat and payApiKey can be configured in top level or feeOptions. feeOptions will take precedent.
|
232
|
-
* if feeOptions are empty, it will pull values from the top level keys.
|
233
|
-
* WARN: Fee/GOV.UK pay configurations (apart from fees) should no longer be stored in the top level, always within feeOptions.
|
234
|
-
*/
|
235
|
-
//# sourceMappingURL=schema.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"schema.js","names":["joi","CURRENT_VERSION","sectionsSchema","object","keys","name","string","required","title","hideTitle","boolean","default","conditionFieldSchema","type","display","conditionValueSchema","value","relativeTimeValueSchema","timePeriod","timeUnit","direction","timeOnly","conditionRefSchema","conditionName","conditionDisplayName","coordinator","optional","conditionSchema","field","operator","alternatives","try","conditionGroupSchema","conditions","array","items","any","conditionsModelSchema","conditionsSchema","displayName","localisedString","a","unknown","allow","componentSchema","hint","options","schema","min","number","max","list","nextSchema","path","condition","redirect","uri","pageSchema","disallow","section","controller","components","next","repeatField","backLinkFallback","toggleableString","confirmationPageSchema","customText","paymentSkipped","nextSteps","paymentSkippedWarningPage","caption","body","specialPagesSchema","confirmationPage","listItemSchema","text","description","conditional","unique","listSchema","valid","feeSchema","amount","multiplier","prefix","multiApiKeySchema","test","production","replyToConfigurationSchema","emailReplyToId","notifySchema","apiKey","templateId","emailField","personalisation","personalisationFieldCustomisation","pattern","addReferencesToPersonalisation","emailReplyToIdConfiguration","emailSchema","emailAddress","webhookSchema","url","allowRetry","outputSchema","outputConfiguration","feedbackSchema","feedbackForm","when","is","then","email","tlds","phaseBannerSchema","phase","feeOptionSchema","payApiKey","paymentReferenceFormat","payReturnUrl","allowSubmissionWithoutPayment","maxAttempts","customPayErrorMessage","showPaymentSkippedWarningPage","otherwise","Schema","feedback","startPage","pages","sections","lists","fees","metadata","declaration","outputs","skipSummary","version","phaseBanner","specialPages","feeOptions"],"sources":["../../../src/schema/schema.ts"],"sourcesContent":["import joi from 'joi'\n\n/**\n * If an optional key is added, CURRENT_VERSION does not need to be incremented.\n * Only breaking changes will require an increment, as well as a migration script.\n */\nexport const CURRENT_VERSION = 2\nconst sectionsSchema = joi.object().keys({\n name: joi.string().required(),\n title: joi.string().required(),\n hideTitle: joi.boolean().default(false)\n})\n\nconst conditionFieldSchema = joi.object().keys({\n name: joi.string().required(),\n type: joi.string().required(),\n display: joi.string().required()\n})\n\nconst conditionValueSchema = joi.object().keys({\n type: joi.string().required(),\n value: joi.string().required(),\n display: joi.string().required()\n})\n\nconst relativeTimeValueSchema = joi.object().keys({\n type: joi.string().required(),\n timePeriod: joi.string().required(),\n timeUnit: joi.string().required(),\n direction: joi.string().required(),\n timeOnly: joi.boolean().required()\n})\n\nconst conditionRefSchema = joi.object().keys({\n conditionName: joi.string().required(),\n conditionDisplayName: joi.string().required(),\n coordinator: joi.string().optional()\n})\n\nconst conditionSchema = joi.object().keys({\n field: conditionFieldSchema,\n operator: joi.string().required(),\n value: joi.alternatives().try(conditionValueSchema, relativeTimeValueSchema),\n coordinator: joi.string().optional()\n})\n\nconst conditionGroupSchema = joi.object().keys({\n conditions: joi\n .array()\n .items(\n joi\n .alternatives()\n .try(\n conditionSchema,\n conditionRefSchema,\n joi.any() /** Should be a joi.link('#conditionGroupSchema') */\n )\n )\n})\n\nconst conditionsModelSchema = joi.object().keys({\n name: joi.string().required(),\n conditions: joi\n .array()\n .items(\n joi\n .alternatives()\n .try(conditionSchema, conditionRefSchema, conditionGroupSchema)\n )\n})\n\nconst conditionsSchema = joi.object().keys({\n name: joi.string().required(),\n displayName: joi.string(),\n value: joi.alternatives().try(joi.string(), conditionsModelSchema).required()\n})\n\nconst localisedString = joi\n .alternatives()\n .try(joi.object({ a: joi.any() }).unknown(), joi.string().allow(''))\n\nexport const componentSchema = joi\n .object()\n .keys({\n type: joi.string().required(),\n name: joi.string(),\n title: localisedString,\n hint: localisedString.optional(),\n options: joi.object().default({}),\n schema: joi\n .object({ min: joi.number(), max: joi.number() })\n .unknown(true)\n .default({}),\n list: joi.string().optional()\n })\n .unknown(true)\n\nconst nextSchema = joi.object().keys({\n path: joi.string().required(),\n condition: joi.string().allow('').optional(),\n redirect: joi.string().uri().optional()\n})\n\n/**\n * `/status` is a special route for providing a user's application status.\n * It should not be configured via the designer.\n */\nconst pageSchema = joi.object().keys({\n path: joi.string().required().disallow('/status'),\n title: localisedString,\n section: joi.string(),\n controller: joi.string(),\n components: joi.array().items(componentSchema),\n next: joi.array().items(nextSchema),\n repeatField: joi.string().optional(),\n options: joi.object().optional(),\n backLinkFallback: joi.string().optional()\n})\n\nconst toggleableString = joi.alternatives().try(joi.boolean(), joi.string())\n\nconst confirmationPageSchema = joi.object({\n customText: joi\n .object({\n title: joi.string().default('Application complete'),\n paymentSkipped: toggleableString.default(\n 'Someone will be in touch to make a payment.'\n ),\n nextSteps: toggleableString.default(\n 'You will receive an email with details with the next steps.'\n )\n })\n .default(),\n components: joi.array().items(componentSchema)\n})\n\nconst paymentSkippedWarningPage = joi.object({\n customText: joi.object({\n title: joi.string().default('Pay for your application').optional(),\n caption: joi.string().default('Payment').optional(),\n body: joi.string().default('').optional()\n })\n})\n\nconst specialPagesSchema = joi.object().keys({\n confirmationPage: confirmationPageSchema.optional(),\n paymentSkippedWarningPage: paymentSkippedWarningPage.optional()\n})\n\nconst listItemSchema = joi.object().keys({\n text: localisedString,\n value: joi.alternatives().try(joi.number(), joi.string()),\n description: localisedString.optional(),\n conditional: joi\n .object()\n .keys({\n components: joi\n .array()\n .required()\n .items(componentSchema.unknown(true))\n .unique('name')\n })\n .allow(null)\n .optional(),\n condition: joi.string().allow(null, '').optional()\n})\n\nconst listSchema = joi.object().keys({\n name: joi.string().required(),\n title: localisedString,\n type: joi.string().required().valid('string', 'number'),\n items: joi.array().items(listItemSchema)\n})\n\nconst feeSchema = joi.object().keys({\n description: joi.string().required(),\n amount: joi.number().required(),\n multiplier: joi.string().optional(),\n condition: joi.string().optional(),\n prefix: joi.string().optional()\n})\n\nconst multiApiKeySchema = joi.object({\n test: joi.string().optional(),\n production: joi.string().optional()\n})\n\nconst replyToConfigurationSchema = joi.object({\n emailReplyToId: joi.string(),\n condition: joi.string().allow('').optional()\n})\n\nconst notifySchema = joi.object().keys({\n apiKey: [joi.string().allow('').optional(), multiApiKeySchema],\n templateId: joi.string(),\n emailField: joi.string(),\n personalisation: joi.array().items(joi.string()),\n personalisationFieldCustomisation: joi\n .object()\n .pattern(/./, joi.array().items(joi.string()))\n .optional(),\n addReferencesToPersonalisation: joi.boolean().optional(),\n emailReplyToIdConfiguration: joi.array().items(replyToConfigurationSchema)\n})\n\nconst emailSchema = joi.object().keys({\n emailAddress: joi.string()\n})\n\nconst webhookSchema = joi.object().keys({\n url: joi.string(),\n allowRetry: joi.boolean().default(true)\n})\n\nconst outputSchema = joi.object().keys({\n name: joi.string(),\n title: joi.string().optional(),\n type: joi.string().allow('notify', 'email', 'webhook', 'sheets'),\n outputConfiguration: joi\n .alternatives()\n .try(notifySchema, emailSchema, webhookSchema)\n})\n\nconst feedbackSchema = joi.object().keys({\n feedbackForm: joi.boolean().default(false),\n url: joi.when('feedbackForm', {\n is: joi.boolean().valid(false),\n then: joi.string().optional().allow('')\n }),\n emailAddress: joi\n .string()\n .email({\n tlds: {\n allow: false\n }\n })\n .optional()\n})\n\nconst phaseBannerSchema = joi.object().keys({\n phase: joi.string().valid('alpha', 'beta')\n})\n\nconst feeOptionSchema = joi\n .object()\n .keys({\n payApiKey: [joi.string().allow('').optional(), multiApiKeySchema],\n paymentReferenceFormat: [joi.string().optional()],\n payReturnUrl: joi.string().optional(),\n allowSubmissionWithoutPayment: joi.boolean().optional().default(true),\n maxAttempts: joi.number().optional().default(3),\n customPayErrorMessage: joi.string().optional(),\n showPaymentSkippedWarningPage: joi.when('allowSubmissionWithoutPayment', {\n is: true,\n then: joi.boolean().valid(true, false).default(false),\n otherwise: joi.boolean().valid(false).default(false)\n })\n })\n .default(({ payApiKey, paymentReferenceFormat }) => {\n return {\n ...(payApiKey && { payApiKey }),\n ...(paymentReferenceFormat && { paymentReferenceFormat })\n }\n })\n\nexport const Schema = joi\n .object()\n .required()\n .keys({\n name: localisedString.optional(),\n feedback: feedbackSchema,\n startPage: joi.string().required(),\n pages: joi.array().required().items(pageSchema).unique('path'),\n sections: joi.array().items(sectionsSchema).unique('name').required(),\n conditions: joi.array().items(conditionsSchema).unique('name'),\n lists: joi.array().items(listSchema).unique('name'),\n fees: joi.array().items(feeSchema).optional(),\n paymentReferenceFormat: joi.string().optional(),\n metadata: joi.object({ a: joi.any() }).unknown().optional(),\n declaration: joi.string().allow('').optional(),\n outputs: joi.array().items(outputSchema),\n payApiKey: [joi.string().allow('').optional(), multiApiKeySchema],\n skipSummary: joi.boolean().default(false),\n version: joi.number().default(CURRENT_VERSION),\n phaseBanner: phaseBannerSchema,\n specialPages: specialPagesSchema.optional(),\n feeOptions: feeOptionSchema\n })\n\n/**\n * Schema versions:\n * Undefined / 0 - initial version as at 28/8/20. Conditions may be in object structure or string form.\n * 1 - Relevant components (radio, checkbox, select, autocomplete) now contain\n * options as 'values' rather than referencing a data list\n * 2 - Reverse v1. Values populating radio, checkboxes, select, autocomplete are defined in Lists only.\n * TODO:- merge fees and paymentReferenceFormat\n * 2 - 2023-05-04 `feeOptions` has been introduced. paymentReferenceFormat and payApiKey can be configured in top level or feeOptions. feeOptions will take precedent.\n * if feeOptions are empty, it will pull values from the top level keys.\n * WARN: Fee/GOV.UK pay configurations (apart from fees) should no longer be stored in the top level, always within feeOptions.\n */\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data-model/types.ts"],"names":[],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"form-configuration.d.ts","sourceRoot":"","sources":["../../../src/form/form-configuration.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,YAAY,EAAE,OAAO,GAAG,SAAS,CAAA;gBAG/B,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,OAAO;CAUzB"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schema/schema.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB;;;GAGG;AACH,eAAO,MAAM,eAAe,IAAI,CAAA;AA2EhC,eAAO,MAAM,eAAe,uBAcZ,CAAA;AA0KhB,eAAO,MAAM,MAAM,uBAsBf,CAAA;AAEJ;;;;;;;;;;GAUG"}
|
package/src/schema/index.ts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
export { Schema, componentSchema } from '~/src/schema/schema.js'
|
package/src/schema/schema.ts
DELETED
@@ -1,300 +0,0 @@
|
|
1
|
-
import joi from 'joi'
|
2
|
-
|
3
|
-
/**
|
4
|
-
* If an optional key is added, CURRENT_VERSION does not need to be incremented.
|
5
|
-
* Only breaking changes will require an increment, as well as a migration script.
|
6
|
-
*/
|
7
|
-
export const CURRENT_VERSION = 2
|
8
|
-
const sectionsSchema = joi.object().keys({
|
9
|
-
name: joi.string().required(),
|
10
|
-
title: joi.string().required(),
|
11
|
-
hideTitle: joi.boolean().default(false)
|
12
|
-
})
|
13
|
-
|
14
|
-
const conditionFieldSchema = joi.object().keys({
|
15
|
-
name: joi.string().required(),
|
16
|
-
type: joi.string().required(),
|
17
|
-
display: joi.string().required()
|
18
|
-
})
|
19
|
-
|
20
|
-
const conditionValueSchema = joi.object().keys({
|
21
|
-
type: joi.string().required(),
|
22
|
-
value: joi.string().required(),
|
23
|
-
display: joi.string().required()
|
24
|
-
})
|
25
|
-
|
26
|
-
const relativeTimeValueSchema = joi.object().keys({
|
27
|
-
type: joi.string().required(),
|
28
|
-
timePeriod: joi.string().required(),
|
29
|
-
timeUnit: joi.string().required(),
|
30
|
-
direction: joi.string().required(),
|
31
|
-
timeOnly: joi.boolean().required()
|
32
|
-
})
|
33
|
-
|
34
|
-
const conditionRefSchema = joi.object().keys({
|
35
|
-
conditionName: joi.string().required(),
|
36
|
-
conditionDisplayName: joi.string().required(),
|
37
|
-
coordinator: joi.string().optional()
|
38
|
-
})
|
39
|
-
|
40
|
-
const conditionSchema = joi.object().keys({
|
41
|
-
field: conditionFieldSchema,
|
42
|
-
operator: joi.string().required(),
|
43
|
-
value: joi.alternatives().try(conditionValueSchema, relativeTimeValueSchema),
|
44
|
-
coordinator: joi.string().optional()
|
45
|
-
})
|
46
|
-
|
47
|
-
const conditionGroupSchema = joi.object().keys({
|
48
|
-
conditions: joi
|
49
|
-
.array()
|
50
|
-
.items(
|
51
|
-
joi
|
52
|
-
.alternatives()
|
53
|
-
.try(
|
54
|
-
conditionSchema,
|
55
|
-
conditionRefSchema,
|
56
|
-
joi.any() /** Should be a joi.link('#conditionGroupSchema') */
|
57
|
-
)
|
58
|
-
)
|
59
|
-
})
|
60
|
-
|
61
|
-
const conditionsModelSchema = joi.object().keys({
|
62
|
-
name: joi.string().required(),
|
63
|
-
conditions: joi
|
64
|
-
.array()
|
65
|
-
.items(
|
66
|
-
joi
|
67
|
-
.alternatives()
|
68
|
-
.try(conditionSchema, conditionRefSchema, conditionGroupSchema)
|
69
|
-
)
|
70
|
-
})
|
71
|
-
|
72
|
-
const conditionsSchema = joi.object().keys({
|
73
|
-
name: joi.string().required(),
|
74
|
-
displayName: joi.string(),
|
75
|
-
value: joi.alternatives().try(joi.string(), conditionsModelSchema).required()
|
76
|
-
})
|
77
|
-
|
78
|
-
const localisedString = joi
|
79
|
-
.alternatives()
|
80
|
-
.try(joi.object({ a: joi.any() }).unknown(), joi.string().allow(''))
|
81
|
-
|
82
|
-
export const componentSchema = joi
|
83
|
-
.object()
|
84
|
-
.keys({
|
85
|
-
type: joi.string().required(),
|
86
|
-
name: joi.string(),
|
87
|
-
title: localisedString,
|
88
|
-
hint: localisedString.optional(),
|
89
|
-
options: joi.object().default({}),
|
90
|
-
schema: joi
|
91
|
-
.object({ min: joi.number(), max: joi.number() })
|
92
|
-
.unknown(true)
|
93
|
-
.default({}),
|
94
|
-
list: joi.string().optional()
|
95
|
-
})
|
96
|
-
.unknown(true)
|
97
|
-
|
98
|
-
const nextSchema = joi.object().keys({
|
99
|
-
path: joi.string().required(),
|
100
|
-
condition: joi.string().allow('').optional(),
|
101
|
-
redirect: joi.string().uri().optional()
|
102
|
-
})
|
103
|
-
|
104
|
-
/**
|
105
|
-
* `/status` is a special route for providing a user's application status.
|
106
|
-
* It should not be configured via the designer.
|
107
|
-
*/
|
108
|
-
const pageSchema = joi.object().keys({
|
109
|
-
path: joi.string().required().disallow('/status'),
|
110
|
-
title: localisedString,
|
111
|
-
section: joi.string(),
|
112
|
-
controller: joi.string(),
|
113
|
-
components: joi.array().items(componentSchema),
|
114
|
-
next: joi.array().items(nextSchema),
|
115
|
-
repeatField: joi.string().optional(),
|
116
|
-
options: joi.object().optional(),
|
117
|
-
backLinkFallback: joi.string().optional()
|
118
|
-
})
|
119
|
-
|
120
|
-
const toggleableString = joi.alternatives().try(joi.boolean(), joi.string())
|
121
|
-
|
122
|
-
const confirmationPageSchema = joi.object({
|
123
|
-
customText: joi
|
124
|
-
.object({
|
125
|
-
title: joi.string().default('Application complete'),
|
126
|
-
paymentSkipped: toggleableString.default(
|
127
|
-
'Someone will be in touch to make a payment.'
|
128
|
-
),
|
129
|
-
nextSteps: toggleableString.default(
|
130
|
-
'You will receive an email with details with the next steps.'
|
131
|
-
)
|
132
|
-
})
|
133
|
-
.default(),
|
134
|
-
components: joi.array().items(componentSchema)
|
135
|
-
})
|
136
|
-
|
137
|
-
const paymentSkippedWarningPage = joi.object({
|
138
|
-
customText: joi.object({
|
139
|
-
title: joi.string().default('Pay for your application').optional(),
|
140
|
-
caption: joi.string().default('Payment').optional(),
|
141
|
-
body: joi.string().default('').optional()
|
142
|
-
})
|
143
|
-
})
|
144
|
-
|
145
|
-
const specialPagesSchema = joi.object().keys({
|
146
|
-
confirmationPage: confirmationPageSchema.optional(),
|
147
|
-
paymentSkippedWarningPage: paymentSkippedWarningPage.optional()
|
148
|
-
})
|
149
|
-
|
150
|
-
const listItemSchema = joi.object().keys({
|
151
|
-
text: localisedString,
|
152
|
-
value: joi.alternatives().try(joi.number(), joi.string()),
|
153
|
-
description: localisedString.optional(),
|
154
|
-
conditional: joi
|
155
|
-
.object()
|
156
|
-
.keys({
|
157
|
-
components: joi
|
158
|
-
.array()
|
159
|
-
.required()
|
160
|
-
.items(componentSchema.unknown(true))
|
161
|
-
.unique('name')
|
162
|
-
})
|
163
|
-
.allow(null)
|
164
|
-
.optional(),
|
165
|
-
condition: joi.string().allow(null, '').optional()
|
166
|
-
})
|
167
|
-
|
168
|
-
const listSchema = joi.object().keys({
|
169
|
-
name: joi.string().required(),
|
170
|
-
title: localisedString,
|
171
|
-
type: joi.string().required().valid('string', 'number'),
|
172
|
-
items: joi.array().items(listItemSchema)
|
173
|
-
})
|
174
|
-
|
175
|
-
const feeSchema = joi.object().keys({
|
176
|
-
description: joi.string().required(),
|
177
|
-
amount: joi.number().required(),
|
178
|
-
multiplier: joi.string().optional(),
|
179
|
-
condition: joi.string().optional(),
|
180
|
-
prefix: joi.string().optional()
|
181
|
-
})
|
182
|
-
|
183
|
-
const multiApiKeySchema = joi.object({
|
184
|
-
test: joi.string().optional(),
|
185
|
-
production: joi.string().optional()
|
186
|
-
})
|
187
|
-
|
188
|
-
const replyToConfigurationSchema = joi.object({
|
189
|
-
emailReplyToId: joi.string(),
|
190
|
-
condition: joi.string().allow('').optional()
|
191
|
-
})
|
192
|
-
|
193
|
-
const notifySchema = joi.object().keys({
|
194
|
-
apiKey: [joi.string().allow('').optional(), multiApiKeySchema],
|
195
|
-
templateId: joi.string(),
|
196
|
-
emailField: joi.string(),
|
197
|
-
personalisation: joi.array().items(joi.string()),
|
198
|
-
personalisationFieldCustomisation: joi
|
199
|
-
.object()
|
200
|
-
.pattern(/./, joi.array().items(joi.string()))
|
201
|
-
.optional(),
|
202
|
-
addReferencesToPersonalisation: joi.boolean().optional(),
|
203
|
-
emailReplyToIdConfiguration: joi.array().items(replyToConfigurationSchema)
|
204
|
-
})
|
205
|
-
|
206
|
-
const emailSchema = joi.object().keys({
|
207
|
-
emailAddress: joi.string()
|
208
|
-
})
|
209
|
-
|
210
|
-
const webhookSchema = joi.object().keys({
|
211
|
-
url: joi.string(),
|
212
|
-
allowRetry: joi.boolean().default(true)
|
213
|
-
})
|
214
|
-
|
215
|
-
const outputSchema = joi.object().keys({
|
216
|
-
name: joi.string(),
|
217
|
-
title: joi.string().optional(),
|
218
|
-
type: joi.string().allow('notify', 'email', 'webhook', 'sheets'),
|
219
|
-
outputConfiguration: joi
|
220
|
-
.alternatives()
|
221
|
-
.try(notifySchema, emailSchema, webhookSchema)
|
222
|
-
})
|
223
|
-
|
224
|
-
const feedbackSchema = joi.object().keys({
|
225
|
-
feedbackForm: joi.boolean().default(false),
|
226
|
-
url: joi.when('feedbackForm', {
|
227
|
-
is: joi.boolean().valid(false),
|
228
|
-
then: joi.string().optional().allow('')
|
229
|
-
}),
|
230
|
-
emailAddress: joi
|
231
|
-
.string()
|
232
|
-
.email({
|
233
|
-
tlds: {
|
234
|
-
allow: false
|
235
|
-
}
|
236
|
-
})
|
237
|
-
.optional()
|
238
|
-
})
|
239
|
-
|
240
|
-
const phaseBannerSchema = joi.object().keys({
|
241
|
-
phase: joi.string().valid('alpha', 'beta')
|
242
|
-
})
|
243
|
-
|
244
|
-
const feeOptionSchema = joi
|
245
|
-
.object()
|
246
|
-
.keys({
|
247
|
-
payApiKey: [joi.string().allow('').optional(), multiApiKeySchema],
|
248
|
-
paymentReferenceFormat: [joi.string().optional()],
|
249
|
-
payReturnUrl: joi.string().optional(),
|
250
|
-
allowSubmissionWithoutPayment: joi.boolean().optional().default(true),
|
251
|
-
maxAttempts: joi.number().optional().default(3),
|
252
|
-
customPayErrorMessage: joi.string().optional(),
|
253
|
-
showPaymentSkippedWarningPage: joi.when('allowSubmissionWithoutPayment', {
|
254
|
-
is: true,
|
255
|
-
then: joi.boolean().valid(true, false).default(false),
|
256
|
-
otherwise: joi.boolean().valid(false).default(false)
|
257
|
-
})
|
258
|
-
})
|
259
|
-
.default(({ payApiKey, paymentReferenceFormat }) => {
|
260
|
-
return {
|
261
|
-
...(payApiKey && { payApiKey }),
|
262
|
-
...(paymentReferenceFormat && { paymentReferenceFormat })
|
263
|
-
}
|
264
|
-
})
|
265
|
-
|
266
|
-
export const Schema = joi
|
267
|
-
.object()
|
268
|
-
.required()
|
269
|
-
.keys({
|
270
|
-
name: localisedString.optional(),
|
271
|
-
feedback: feedbackSchema,
|
272
|
-
startPage: joi.string().required(),
|
273
|
-
pages: joi.array().required().items(pageSchema).unique('path'),
|
274
|
-
sections: joi.array().items(sectionsSchema).unique('name').required(),
|
275
|
-
conditions: joi.array().items(conditionsSchema).unique('name'),
|
276
|
-
lists: joi.array().items(listSchema).unique('name'),
|
277
|
-
fees: joi.array().items(feeSchema).optional(),
|
278
|
-
paymentReferenceFormat: joi.string().optional(),
|
279
|
-
metadata: joi.object({ a: joi.any() }).unknown().optional(),
|
280
|
-
declaration: joi.string().allow('').optional(),
|
281
|
-
outputs: joi.array().items(outputSchema),
|
282
|
-
payApiKey: [joi.string().allow('').optional(), multiApiKeySchema],
|
283
|
-
skipSummary: joi.boolean().default(false),
|
284
|
-
version: joi.number().default(CURRENT_VERSION),
|
285
|
-
phaseBanner: phaseBannerSchema,
|
286
|
-
specialPages: specialPagesSchema.optional(),
|
287
|
-
feeOptions: feeOptionSchema
|
288
|
-
})
|
289
|
-
|
290
|
-
/**
|
291
|
-
* Schema versions:
|
292
|
-
* Undefined / 0 - initial version as at 28/8/20. Conditions may be in object structure or string form.
|
293
|
-
* 1 - Relevant components (radio, checkbox, select, autocomplete) now contain
|
294
|
-
* options as 'values' rather than referencing a data list
|
295
|
-
* 2 - Reverse v1. Values populating radio, checkboxes, select, autocomplete are defined in Lists only.
|
296
|
-
* TODO:- merge fees and paymentReferenceFormat
|
297
|
-
* 2 - 2023-05-04 `feeOptions` has been introduced. paymentReferenceFormat and payApiKey can be configured in top level or feeOptions. feeOptions will take precedent.
|
298
|
-
* if feeOptions are empty, it will pull values from the top level keys.
|
299
|
-
* WARN: Fee/GOV.UK pay configurations (apart from fees) should no longer be stored in the top level, always within feeOptions.
|
300
|
-
*/
|
File without changes
|
File without changes
|