@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.
Files changed (66) hide show
  1. package/dist/module/data-model/conditions-wrapper.js.map +1 -1
  2. package/dist/module/data-model/helpers.js.map +1 -1
  3. package/dist/module/data-model/input-wrapper.js.map +1 -1
  4. package/dist/module/form/{form-configuration.js → form-configuration/index.js} +1 -1
  5. package/dist/module/form/form-configuration/index.js.map +1 -0
  6. package/dist/module/form/form-definition/index.js +243 -0
  7. package/dist/module/form/form-definition/index.js.map +1 -0
  8. package/dist/module/form/form-definition/types.js.map +1 -0
  9. package/dist/module/form/form-metadata/index.js +12 -0
  10. package/dist/module/form/form-metadata/index.js.map +1 -0
  11. package/dist/module/form/form-metadata/types.js +2 -0
  12. package/dist/module/form/form-metadata/types.js.map +1 -0
  13. package/dist/module/form/index.js +3 -1
  14. package/dist/module/form/index.js.map +1 -1
  15. package/dist/module/form/types.js +2 -0
  16. package/dist/module/form/types.js.map +1 -0
  17. package/dist/module/index.js +0 -1
  18. package/dist/module/index.js.map +1 -1
  19. package/dist/types/data-model/conditions-wrapper.d.ts +1 -1
  20. package/dist/types/data-model/conditions-wrapper.d.ts.map +1 -1
  21. package/dist/types/data-model/helpers.d.ts +1 -1
  22. package/dist/types/data-model/helpers.d.ts.map +1 -1
  23. package/dist/types/data-model/input-wrapper.d.ts +1 -1
  24. package/dist/types/data-model/input-wrapper.d.ts.map +1 -1
  25. package/dist/types/form/{form-configuration.d.ts → form-configuration/index.d.ts} +1 -1
  26. package/dist/types/form/form-configuration/index.d.ts.map +1 -0
  27. package/dist/types/{schema/schema.d.ts → form/form-definition/index.d.ts} +9 -4
  28. package/dist/types/form/form-definition/index.d.ts.map +1 -0
  29. package/dist/types/{data-model → form/form-definition}/types.d.ts +5 -4
  30. package/dist/types/form/form-definition/types.d.ts.map +1 -0
  31. package/dist/types/form/form-metadata/index.d.ts +7 -0
  32. package/dist/types/form/form-metadata/index.d.ts.map +1 -0
  33. package/dist/types/form/form-metadata/types.d.ts +34 -0
  34. package/dist/types/form/form-metadata/types.d.ts.map +1 -0
  35. package/dist/types/form/index.d.ts +3 -1
  36. package/dist/types/form/index.d.ts.map +1 -1
  37. package/dist/types/form/types.d.ts +3 -0
  38. package/dist/types/form/types.d.ts.map +1 -0
  39. package/dist/types/index.d.ts +1 -2
  40. package/dist/types/index.d.ts.map +1 -1
  41. package/package.json +1 -1
  42. package/src/data-model/conditions-wrapper.ts +1 -1
  43. package/src/data-model/helpers.ts +1 -1
  44. package/src/data-model/input-wrapper.ts +1 -1
  45. package/src/form/form-definition/index.ts +300 -0
  46. package/src/{data-model → form/form-definition}/types.ts +4 -1
  47. package/src/form/form-metadata/index.ts +16 -0
  48. package/src/form/form-metadata/types.ts +41 -0
  49. package/src/form/index.ts +3 -1
  50. package/src/form/types.ts +2 -0
  51. package/src/index.ts +1 -2
  52. package/dist/module/data-model/types.js.map +0 -1
  53. package/dist/module/form/form-configuration.js.map +0 -1
  54. package/dist/module/schema/index.js +0 -2
  55. package/dist/module/schema/index.js.map +0 -1
  56. package/dist/module/schema/schema.js +0 -235
  57. package/dist/module/schema/schema.js.map +0 -1
  58. package/dist/types/data-model/types.d.ts.map +0 -1
  59. package/dist/types/form/form-configuration.d.ts.map +0 -1
  60. package/dist/types/schema/index.d.ts +0 -2
  61. package/dist/types/schema/index.d.ts.map +0 -1
  62. package/dist/types/schema/schema.d.ts.map +0 -1
  63. package/src/schema/index.ts +0 -1
  64. package/src/schema/schema.ts +0 -300
  65. /package/dist/module/{data-model → form/form-definition}/types.js +0 -0
  66. /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,2 +0,0 @@
1
- export { Schema, componentSchema } from '../schema/schema.js';
2
- //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -1 +0,0 @@
1
- export { Schema, componentSchema } from '~/src/schema/schema.js'
@@ -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
- */