@defra/forms-model 3.0.58 → 3.0.59
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/form/form-definition/index.js +10 -10
- package/dist/module/form/form-definition/index.js.map +1 -1
- package/dist/module/form/form-definition/types.js.map +1 -1
- package/dist/module/form/form-metadata/index.js.map +1 -1
- package/dist/types/form/form-definition/index.d.ts +5 -3
- package/dist/types/form/form-definition/index.d.ts.map +1 -1
- package/dist/types/form/form-definition/types.d.ts +20 -14
- package/dist/types/form/form-definition/types.d.ts.map +1 -1
- package/dist/types/form/form-metadata/index.d.ts +2 -1
- package/dist/types/form/form-metadata/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/form/form-definition/index.ts +76 -46
- package/src/form/form-definition/types.ts +18 -11
- package/src/form/form-metadata/index.ts +1 -1
@@ -7,7 +7,7 @@ export const CURRENT_VERSION = 2;
|
|
7
7
|
const sectionsSchema = Joi.object().keys({
|
8
8
|
name: Joi.string().required(),
|
9
9
|
title: Joi.string().required(),
|
10
|
-
hideTitle: Joi.boolean().default(false)
|
10
|
+
hideTitle: Joi.boolean().optional().default(false)
|
11
11
|
});
|
12
12
|
const conditionFieldSchema = Joi.object().keys({
|
13
13
|
name: Joi.string().required(),
|
@@ -67,7 +67,7 @@ export const componentSchema = Joi.object().keys({
|
|
67
67
|
const nextSchema = Joi.object().keys({
|
68
68
|
path: Joi.string().required(),
|
69
69
|
condition: Joi.string().allow('').optional(),
|
70
|
-
redirect: Joi.string().
|
70
|
+
redirect: Joi.string().optional()
|
71
71
|
});
|
72
72
|
|
73
73
|
/**
|
@@ -78,7 +78,7 @@ const pageSchema = Joi.object().keys({
|
|
78
78
|
path: Joi.string().required().disallow('/status'),
|
79
79
|
title: localisedString,
|
80
80
|
section: Joi.string(),
|
81
|
-
controller: Joi.string(),
|
81
|
+
controller: Joi.string().optional(),
|
82
82
|
components: Joi.array().items(componentSchema),
|
83
83
|
next: Joi.array().items(nextSchema),
|
84
84
|
repeatField: Joi.string().optional(),
|
@@ -145,11 +145,11 @@ const notifySchema = Joi.object().keys({
|
|
145
145
|
emailReplyToIdConfiguration: Joi.array().items(replyToConfigurationSchema)
|
146
146
|
});
|
147
147
|
const emailSchema = Joi.object().keys({
|
148
|
-
emailAddress: Joi.string()
|
148
|
+
emailAddress: Joi.string().required()
|
149
149
|
});
|
150
150
|
const webhookSchema = Joi.object().keys({
|
151
151
|
url: Joi.string(),
|
152
|
-
allowRetry: Joi.boolean().default(true)
|
152
|
+
allowRetry: Joi.boolean().optional().default(true)
|
153
153
|
});
|
154
154
|
const outputSchema = Joi.object().keys({
|
155
155
|
name: Joi.string(),
|
@@ -184,7 +184,7 @@ const feeOptionSchema = Joi.object().keys({
|
|
184
184
|
then: Joi.boolean().valid(true, false).default(false),
|
185
185
|
otherwise: Joi.boolean().valid(false).default(false)
|
186
186
|
})
|
187
|
-
}).default(({
|
187
|
+
}).default().default(({
|
188
188
|
payApiKey,
|
189
189
|
paymentReferenceFormat
|
190
190
|
}) => {
|
@@ -204,7 +204,7 @@ const feeOptionSchema = Joi.object().keys({
|
|
204
204
|
*/
|
205
205
|
export const formDefinitionSchema = Joi.object().required().keys({
|
206
206
|
name: localisedString.optional(),
|
207
|
-
feedback: feedbackSchema,
|
207
|
+
feedback: feedbackSchema.optional(),
|
208
208
|
startPage: Joi.string().required(),
|
209
209
|
pages: Joi.array().required().items(pageSchema).unique('path'),
|
210
210
|
sections: Joi.array().items(sectionsSchema).unique('name').required(),
|
@@ -218,11 +218,11 @@ export const formDefinitionSchema = Joi.object().required().keys({
|
|
218
218
|
declaration: Joi.string().allow('').optional(),
|
219
219
|
outputs: Joi.array().items(outputSchema),
|
220
220
|
payApiKey: [Joi.string().allow('').optional(), multiApiKeySchema],
|
221
|
-
skipSummary: Joi.boolean().default(false),
|
222
|
-
version: Joi.number().default(CURRENT_VERSION),
|
221
|
+
skipSummary: Joi.boolean().optional().default(false),
|
222
|
+
version: Joi.number().optional().default(CURRENT_VERSION),
|
223
223
|
phaseBanner: phaseBannerSchema,
|
224
224
|
specialPages: specialPagesSchema.optional(),
|
225
|
-
feeOptions: feeOptionSchema
|
225
|
+
feeOptions: feeOptionSchema.optional()
|
226
226
|
});
|
227
227
|
|
228
228
|
// Maintain compatibility with legacy named export
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.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","formDefinitionSchema","feedback","startPage","pages","sections","lists","fees","metadata","declaration","outputs","skipSummary","version","phaseBanner","specialPages","feeOptions","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport { type FormDefinition } from '~/src/form/form-definition/types.js'\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\n\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.array().items(\n Joi.alternatives().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.array().items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n conditionGroupSchema\n )\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.alternatives().try(\n Joi.object({ a: Joi.any() }).unknown(),\n Joi.string().allow('')\n)\n\nexport const componentSchema = Joi.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.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.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 }).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.object()\n .keys({\n components: Joi.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.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.alternatives().try(\n notifySchema,\n emailSchema,\n webhookSchema\n )\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.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.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\n/**\n * Joi schema for `FormDefinition` interface\n * @see {@link FormDefinition}\n */\nexport const formDefinitionSchema = Joi.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// Maintain compatibility with legacy named export\n// E.g. `import { Schema } from '@defra/forms-model'`\nexport const Schema = formDefinitionSchema\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":"AAAA,OAAOA,GAAG,MAAM,KAAK;AAIrB;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAe,GAAG,CAAC;AAEhC,MAAMC,cAAc,GAAGF,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACvCC,IAAI,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7BC,KAAK,EAAER,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC9BE,SAAS,EAAET,GAAG,CAACU,OAAO,CAAC,CAAC,CAACC,OAAO,CAAC,KAAK;AACxC,CAAC,CAAC;AAEF,MAAMC,oBAAoB,GAAGZ,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAC7CC,IAAI,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7BM,IAAI,EAAEb,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7BO,OAAO,EAAEd,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC;AACjC,CAAC,CAAC;AAEF,MAAMQ,oBAAoB,GAAGf,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAC7CS,IAAI,EAAEb,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7BS,KAAK,EAAEhB,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC9BO,OAAO,EAAEd,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC;AACjC,CAAC,CAAC;AAEF,MAAMU,uBAAuB,GAAGjB,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAChDS,IAAI,EAAEb,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7BW,UAAU,EAAElB,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACnCY,QAAQ,EAAEnB,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACjCa,SAAS,EAAEpB,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAClCc,QAAQ,EAAErB,GAAG,CAACU,OAAO,CAAC,CAAC,CAACH,QAAQ,CAAC;AACnC,CAAC,CAAC;AAEF,MAAMe,kBAAkB,GAAGtB,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAC3CmB,aAAa,EAAEvB,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACtCiB,oBAAoB,EAAExB,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7CkB,WAAW,EAAEzB,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC;AACrC,CAAC,CAAC;AAEF,MAAMC,eAAe,GAAG3B,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACxCwB,KAAK,EAAEhB,oBAAoB;EAC3BiB,QAAQ,EAAE7B,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACjCS,KAAK,EAAEhB,GAAG,CAAC8B,YAAY,CAAC,CAAC,CAACC,GAAG,CAAChB,oBAAoB,EAAEE,uBAAuB,CAAC;EAC5EQ,WAAW,EAAEzB,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC;AACrC,CAAC,CAAC;AAEF,MAAMM,oBAAoB,GAAGhC,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAC7C6B,UAAU,EAAEjC,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAC3BnC,GAAG,CAAC8B,YAAY,CAAC,CAAC,CAACC,GAAG,CACpBJ,eAAe,EACfL,kBAAkB,EAClBtB,GAAG,CAACoC,GAAG,CAAC,CAAC,CAAC,oDACZ,CACF;AACF,CAAC,CAAC;AAEF,MAAMC,qBAAqB,GAAGrC,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAC9CC,IAAI,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7B0B,UAAU,EAAEjC,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAC3BnC,GAAG,CAAC8B,YAAY,CAAC,CAAC,CAACC,GAAG,CACpBJ,eAAe,EACfL,kBAAkB,EAClBU,oBACF,CACF;AACF,CAAC,CAAC;AAEF,MAAMM,gBAAgB,GAAGtC,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACzCC,IAAI,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7BgC,WAAW,EAAEvC,GAAG,CAACM,MAAM,CAAC,CAAC;EACzBU,KAAK,EAAEhB,GAAG,CAAC8B,YAAY,CAAC,CAAC,CAACC,GAAG,CAAC/B,GAAG,CAACM,MAAM,CAAC,CAAC,EAAE+B,qBAAqB,CAAC,CAAC9B,QAAQ,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAMiC,eAAe,GAAGxC,GAAG,CAAC8B,YAAY,CAAC,CAAC,CAACC,GAAG,CAC5C/B,GAAG,CAACG,MAAM,CAAC;EAAEsC,CAAC,EAAEzC,GAAG,CAACoC,GAAG,CAAC;AAAE,CAAC,CAAC,CAACM,OAAO,CAAC,CAAC,EACtC1C,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,EAAE,CACvB,CAAC;AAED,OAAO,MAAMC,eAAe,GAAG5C,GAAG,CAACG,MAAM,CAAC,CAAC,CACxCC,IAAI,CAAC;EACJS,IAAI,EAAEb,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7BF,IAAI,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC;EAClBE,KAAK,EAAEgC,eAAe;EACtBK,IAAI,EAAEL,eAAe,CAACd,QAAQ,CAAC,CAAC;EAChCoB,OAAO,EAAE9C,GAAG,CAACG,MAAM,CAAC,CAAC,CAACQ,OAAO,CAAC,CAAC,CAAC,CAAC;EACjCoC,MAAM,EAAE/C,GAAG,CAACG,MAAM,CAAC;IAAE6C,GAAG,EAAEhD,GAAG,CAACiD,MAAM,CAAC,CAAC;IAAEC,GAAG,EAAElD,GAAG,CAACiD,MAAM,CAAC;EAAE,CAAC,CAAC,CACzDP,OAAO,CAAC,IAAI,CAAC,CACb/B,OAAO,CAAC,CAAC,CAAC,CAAC;EACdwC,IAAI,EAAEnD,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC;AAC9B,CAAC,CAAC,CACDgB,OAAO,CAAC,IAAI,CAAC;AAEhB,MAAMU,UAAU,GAAGpD,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACnCiD,IAAI,EAAErD,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7B+C,SAAS,EAAEtD,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,EAAE,CAAC,CAACjB,QAAQ,CAAC,CAAC;EAC5C6B,QAAQ,EAAEvD,GAAG,CAACM,MAAM,CAAC,CAAC,CAACkD,GAAG,CAAC,CAAC,CAAC9B,QAAQ,CAAC;AACxC,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAM+B,UAAU,GAAGzD,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACnCiD,IAAI,EAAErD,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACmD,QAAQ,CAAC,SAAS,CAAC;EACjDlD,KAAK,EAAEgC,eAAe;EACtBmB,OAAO,EAAE3D,GAAG,CAACM,MAAM,CAAC,CAAC;EACrBsD,UAAU,EAAE5D,GAAG,CAACM,MAAM,CAAC,CAAC;EACxBuD,UAAU,EAAE7D,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACS,eAAe,CAAC;EAC9CkB,IAAI,EAAE9D,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACiB,UAAU,CAAC;EACnCW,WAAW,EAAE/D,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC;EACpCoB,OAAO,EAAE9C,GAAG,CAACG,MAAM,CAAC,CAAC,CAACuB,QAAQ,CAAC,CAAC;EAChCsC,gBAAgB,EAAEhE,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAMuC,gBAAgB,GAAGjE,GAAG,CAAC8B,YAAY,CAAC,CAAC,CAACC,GAAG,CAAC/B,GAAG,CAACU,OAAO,CAAC,CAAC,EAAEV,GAAG,CAACM,MAAM,CAAC,CAAC,CAAC;AAE5E,MAAM4D,sBAAsB,GAAGlE,GAAG,CAACG,MAAM,CAAC;EACxCgE,UAAU,EAAEnE,GAAG,CAACG,MAAM,CAAC;IACrBK,KAAK,EAAER,GAAG,CAACM,MAAM,CAAC,CAAC,CAACK,OAAO,CAAC,sBAAsB,CAAC;IACnDyD,cAAc,EAAEH,gBAAgB,CAACtD,OAAO,CACtC,6CACF,CAAC;IACD0D,SAAS,EAAEJ,gBAAgB,CAACtD,OAAO,CACjC,6DACF;EACF,CAAC,CAAC,CAACA,OAAO,CAAC,CAAC;EACZkD,UAAU,EAAE7D,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACS,eAAe;AAC/C,CAAC,CAAC;AAEF,MAAM0B,yBAAyB,GAAGtE,GAAG,CAACG,MAAM,CAAC;EAC3CgE,UAAU,EAAEnE,GAAG,CAACG,MAAM,CAAC;IACrBK,KAAK,EAAER,GAAG,CAACM,MAAM,CAAC,CAAC,CAACK,OAAO,CAAC,0BAA0B,CAAC,CAACe,QAAQ,CAAC,CAAC;IAClE6C,OAAO,EAAEvE,GAAG,CAACM,MAAM,CAAC,CAAC,CAACK,OAAO,CAAC,SAAS,CAAC,CAACe,QAAQ,CAAC,CAAC;IACnD8C,IAAI,EAAExE,GAAG,CAACM,MAAM,CAAC,CAAC,CAACK,OAAO,CAAC,EAAE,CAAC,CAACe,QAAQ,CAAC;EAC1C,CAAC;AACH,CAAC,CAAC;AAEF,MAAM+C,kBAAkB,GAAGzE,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAC3CsE,gBAAgB,EAAER,sBAAsB,CAACxC,QAAQ,CAAC,CAAC;EACnD4C,yBAAyB,EAAEA,yBAAyB,CAAC5C,QAAQ,CAAC;AAChE,CAAC,CAAC;AAEF,MAAMiD,cAAc,GAAG3E,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACvCwE,IAAI,EAAEpC,eAAe;EACrBxB,KAAK,EAAEhB,GAAG,CAAC8B,YAAY,CAAC,CAAC,CAACC,GAAG,CAAC/B,GAAG,CAACiD,MAAM,CAAC,CAAC,EAAEjD,GAAG,CAACM,MAAM,CAAC,CAAC,CAAC;EACzDuE,WAAW,EAAErC,eAAe,CAACd,QAAQ,CAAC,CAAC;EACvCoD,WAAW,EAAE9E,GAAG,CAACG,MAAM,CAAC,CAAC,CACtBC,IAAI,CAAC;IACJyD,UAAU,EAAE7D,GAAG,CAACkC,KAAK,CAAC,CAAC,CACpB3B,QAAQ,CAAC,CAAC,CACV4B,KAAK,CAACS,eAAe,CAACF,OAAO,CAAC,IAAI,CAAC,CAAC,CACpCqC,MAAM,CAAC,MAAM;EAClB,CAAC,CAAC,CACDpC,KAAK,CAAC,IAAI,CAAC,CACXjB,QAAQ,CAAC,CAAC;EACb4B,SAAS,EAAEtD,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAACjB,QAAQ,CAAC;AACnD,CAAC,CAAC;AAEF,MAAMsD,UAAU,GAAGhF,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACnCC,IAAI,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC7BC,KAAK,EAAEgC,eAAe;EACtB3B,IAAI,EAAEb,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAAC0E,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;EACvD9C,KAAK,EAAEnC,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACwC,cAAc;AACzC,CAAC,CAAC;AAEF,MAAMO,SAAS,GAAGlF,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAClCyE,WAAW,EAAE7E,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACpC4E,MAAM,EAAEnF,GAAG,CAACiD,MAAM,CAAC,CAAC,CAAC1C,QAAQ,CAAC,CAAC;EAC/B6E,UAAU,EAAEpF,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC;EACnC4B,SAAS,EAAEtD,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC;EAClC2D,MAAM,EAAErF,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM4D,iBAAiB,GAAGtF,GAAG,CAACG,MAAM,CAAC;EACnCoF,IAAI,EAAEvF,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC;EAC7B8D,UAAU,EAAExF,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM+D,0BAA0B,GAAGzF,GAAG,CAACG,MAAM,CAAC;EAC5CuF,cAAc,EAAE1F,GAAG,CAACM,MAAM,CAAC,CAAC;EAC5BgD,SAAS,EAAEtD,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,EAAE,CAAC,CAACjB,QAAQ,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAMiE,YAAY,GAAG3F,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACrCwF,MAAM,EAAE,CAAC5F,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,EAAE,CAAC,CAACjB,QAAQ,CAAC,CAAC,EAAE4D,iBAAiB,CAAC;EAC9DO,UAAU,EAAE7F,GAAG,CAACM,MAAM,CAAC,CAAC;EACxBwF,UAAU,EAAE9F,GAAG,CAACM,MAAM,CAAC,CAAC;EACxByF,eAAe,EAAE/F,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACnC,GAAG,CAACM,MAAM,CAAC,CAAC,CAAC;EAChD0F,iCAAiC,EAAEhG,GAAG,CAACG,MAAM,CAAC,CAAC,CAC5C8F,OAAO,CAAC,GAAG,EAAEjG,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACnC,GAAG,CAACM,MAAM,CAAC,CAAC,CAAC,CAAC,CAC7CoB,QAAQ,CAAC,CAAC;EACbwE,8BAA8B,EAAElG,GAAG,CAACU,OAAO,CAAC,CAAC,CAACgB,QAAQ,CAAC,CAAC;EACxDyE,2BAA2B,EAAEnG,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACsD,0BAA0B;AAC3E,CAAC,CAAC;AAEF,MAAMW,WAAW,GAAGpG,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACpCiG,YAAY,EAAErG,GAAG,CAACM,MAAM,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAMgG,aAAa,GAAGtG,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACtCmG,GAAG,EAAEvG,GAAG,CAACM,MAAM,CAAC,CAAC;EACjBkG,UAAU,EAAExG,GAAG,CAACU,OAAO,CAAC,CAAC,CAACC,OAAO,CAAC,IAAI;AACxC,CAAC,CAAC;AAEF,MAAM8F,YAAY,GAAGzG,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACrCC,IAAI,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC;EAClBE,KAAK,EAAER,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC;EAC9Bb,IAAI,EAAEb,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;EAChE+D,mBAAmB,EAAE1G,GAAG,CAAC8B,YAAY,CAAC,CAAC,CAACC,GAAG,CACzC4D,YAAY,EACZS,WAAW,EACXE,aACF;AACF,CAAC,CAAC;AAEF,MAAMK,cAAc,GAAG3G,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EACvCwG,YAAY,EAAE5G,GAAG,CAACU,OAAO,CAAC,CAAC,CAACC,OAAO,CAAC,KAAK,CAAC;EAC1C4F,GAAG,EAAEvG,GAAG,CAAC6G,IAAI,CAAC,cAAc,EAAE;IAC5BC,EAAE,EAAE9G,GAAG,CAACU,OAAO,CAAC,CAAC,CAACuE,KAAK,CAAC,KAAK,CAAC;IAC9B8B,IAAI,EAAE/G,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC,CAACiB,KAAK,CAAC,EAAE;EACxC,CAAC,CAAC;EACF0D,YAAY,EAAErG,GAAG,CAACM,MAAM,CAAC,CAAC,CACvB0G,KAAK,CAAC;IACLC,IAAI,EAAE;MACJtE,KAAK,EAAE;IACT;EACF,CAAC,CAAC,CACDjB,QAAQ,CAAC;AACd,CAAC,CAAC;AAEF,MAAMwF,iBAAiB,GAAGlH,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC;EAC1C+G,KAAK,EAAEnH,GAAG,CAACM,MAAM,CAAC,CAAC,CAAC2E,KAAK,CAAC,OAAO,EAAE,MAAM;AAC3C,CAAC,CAAC;AAEF,MAAMmC,eAAe,GAAGpH,GAAG,CAACG,MAAM,CAAC,CAAC,CACjCC,IAAI,CAAC;EACJiH,SAAS,EAAE,CAACrH,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,EAAE,CAAC,CAACjB,QAAQ,CAAC,CAAC,EAAE4D,iBAAiB,CAAC;EACjEgC,sBAAsB,EAAE,CAACtH,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC,CAAC;EACjD6F,YAAY,EAAEvH,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC;EACrC8F,6BAA6B,EAAExH,GAAG,CAACU,OAAO,CAAC,CAAC,CAACgB,QAAQ,CAAC,CAAC,CAACf,OAAO,CAAC,IAAI,CAAC;EACrE8G,WAAW,EAAEzH,GAAG,CAACiD,MAAM,CAAC,CAAC,CAACvB,QAAQ,CAAC,CAAC,CAACf,OAAO,CAAC,CAAC,CAAC;EAC/C+G,qBAAqB,EAAE1H,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC;EAC9CiG,6BAA6B,EAAE3H,GAAG,CAAC6G,IAAI,CAAC,+BAA+B,EAAE;IACvEC,EAAE,EAAE,IAAI;IACRC,IAAI,EAAE/G,GAAG,CAACU,OAAO,CAAC,CAAC,CAACuE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAACtE,OAAO,CAAC,KAAK,CAAC;IACrDiH,SAAS,EAAE5H,GAAG,CAACU,OAAO,CAAC,CAAC,CAACuE,KAAK,CAAC,KAAK,CAAC,CAACtE,OAAO,CAAC,KAAK;EACrD,CAAC;AACH,CAAC,CAAC,CACDA,OAAO,CAAC,CAAC;EAAE0G,SAAS;EAAEC;AAAuB,CAAC,KAAK;EAClD,OAAO;IACL,IAAID,SAAS,IAAI;MAAEA;IAAU,CAAC,CAAC;IAC/B,IAAIC,sBAAsB,IAAI;MAAEA;IAAuB,CAAC;EAC1D,CAAC;AACH,CAAC,CAAC;;AAEJ;AACA;AACA;AACA;AACA,OAAO,MAAMO,oBAAoB,GAAG7H,GAAG,CAACG,MAAM,CAAC,CAAC,CAC7CI,QAAQ,CAAC,CAAC,CACVH,IAAI,CAAC;EACJC,IAAI,EAAEmC,eAAe,CAACd,QAAQ,CAAC,CAAC;EAChCoG,QAAQ,EAAEnB,cAAc;EACxBoB,SAAS,EAAE/H,GAAG,CAACM,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAClCyH,KAAK,EAAEhI,GAAG,CAACkC,KAAK,CAAC,CAAC,CAAC3B,QAAQ,CAAC,CAAC,CAAC4B,KAAK,CAACsB,UAAU,CAAC,CAACsB,MAAM,CAAC,MAAM,CAAC;EAC9DkD,QAAQ,EAAEjI,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACjC,cAAc,CAAC,CAAC6E,MAAM,CAAC,MAAM,CAAC,CAACxE,QAAQ,CAAC,CAAC;EACrE0B,UAAU,EAAEjC,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACG,gBAAgB,CAAC,CAACyC,MAAM,CAAC,MAAM,CAAC;EAC9DmD,KAAK,EAAElI,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAAC6C,UAAU,CAAC,CAACD,MAAM,CAAC,MAAM,CAAC;EACnDoD,IAAI,EAAEnI,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAAC+C,SAAS,CAAC,CAACxD,QAAQ,CAAC,CAAC;EAC7C4F,sBAAsB,EAAEtH,GAAG,CAACM,MAAM,CAAC,CAAC,CAACoB,QAAQ,CAAC,CAAC;EAC/C0G,QAAQ,EAAEpI,GAAG,CAACG,MAAM,CAAC;IAAEsC,CAAC,EAAEzC,GAAG,CAACoC,GAAG,CAAC;EAAE,CAAC,CAAC,CAACM,OAAO,CAAC,CAAC,CAAChB,QAAQ,CAAC,CAAC;EAC3D2G,WAAW,EAAErI,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,EAAE,CAAC,CAACjB,QAAQ,CAAC,CAAC;EAC9C4G,OAAO,EAAEtI,GAAG,CAACkC,KAAK,CAAC,CAAC,CAACC,KAAK,CAACsE,YAAY,CAAC;EACxCY,SAAS,EAAE,CAACrH,GAAG,CAACM,MAAM,CAAC,CAAC,CAACqC,KAAK,CAAC,EAAE,CAAC,CAACjB,QAAQ,CAAC,CAAC,EAAE4D,iBAAiB,CAAC;EACjEiD,WAAW,EAAEvI,GAAG,CAACU,OAAO,CAAC,CAAC,CAACC,OAAO,CAAC,KAAK,CAAC;EACzC6H,OAAO,EAAExI,GAAG,CAACiD,MAAM,CAAC,CAAC,CAACtC,OAAO,CAACV,eAAe,CAAC;EAC9CwI,WAAW,EAAEvB,iBAAiB;EAC9BwB,YAAY,EAAEjE,kBAAkB,CAAC/C,QAAQ,CAAC,CAAC;EAC3CiH,UAAU,EAAEvB;AACd,CAAC,CAAC;;AAEJ;AACA;AACA,OAAO,MAAMwB,MAAM,GAAGf,oBAAoB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
1
|
+
{"version":3,"file":"index.js","names":["Joi","CURRENT_VERSION","sectionsSchema","object","keys","name","string","required","title","hideTitle","boolean","optional","default","conditionFieldSchema","type","display","conditionValueSchema","value","relativeTimeValueSchema","timePeriod","timeUnit","direction","timeOnly","conditionRefSchema","conditionName","conditionDisplayName","coordinator","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","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","formDefinitionSchema","feedback","startPage","pages","sections","lists","fees","metadata","declaration","outputs","skipSummary","version","phaseBanner","specialPages","feeOptions","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport { type ComponentDef } from '~/src/components/types.js'\nimport {\n type ConditionRawData,\n type ConfirmationPage,\n type EmailOutputConfiguration,\n type Fee,\n type FeeOptions,\n type FormDefinition,\n type Item,\n type List,\n type MultipleApiKeys,\n type Next,\n type NotifyOutputConfiguration,\n type Output,\n type Page,\n type PaymentSkippedWarningPage,\n type PhaseBanner,\n type RepeatingFieldPage,\n type Section,\n type SpecialPages,\n type WebhookOutputConfiguration\n} from '~/src/form/form-definition/types.js'\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\n\nconst sectionsSchema = Joi.object<Section>().keys({\n name: Joi.string().required(),\n title: Joi.string().required(),\n hideTitle: Joi.boolean().optional().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.array().items(\n Joi.alternatives().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.array().items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n conditionGroupSchema\n )\n )\n})\n\nconst conditionsSchema = Joi.object<ConditionRawData>().keys({\n name: Joi.string().required(),\n displayName: Joi.string(),\n value: Joi.alternatives().try(Joi.string(), conditionsModelSchema).required()\n})\n\nconst localisedString = Joi.alternatives().try(\n Joi.object({ a: Joi.any() }).unknown(),\n Joi.string().allow('')\n)\n\nexport const componentSchema = Joi.object<ComponentDef>()\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.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<Next>().keys({\n path: Joi.string().required(),\n condition: Joi.string().allow('').optional(),\n redirect: Joi.string().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<Page | RepeatingFieldPage>().keys({\n path: Joi.string().required().disallow('/status'),\n title: localisedString,\n section: Joi.string(),\n controller: Joi.string().optional(),\n components: Joi.array<ComponentDef>().items(componentSchema),\n next: Joi.array<Next>().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<ConfirmationPage>({\n customText: Joi.object<ConfirmationPage['customText']>({\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 }).default(),\n components: Joi.array<ComponentDef>().items(componentSchema)\n})\n\nconst paymentSkippedWarningPage = Joi.object<PaymentSkippedWarningPage>({\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<SpecialPages>().keys({\n confirmationPage: confirmationPageSchema.optional(),\n paymentSkippedWarningPage: paymentSkippedWarningPage.optional()\n})\n\nconst listItemSchema = Joi.object<Item>().keys({\n text: localisedString,\n value: Joi.alternatives().try(Joi.number(), Joi.string()),\n description: localisedString.optional(),\n conditional: Joi.object<Item['conditional']>()\n .keys({\n components: Joi.array<ComponentDef>()\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<List>().keys({\n name: Joi.string().required(),\n title: localisedString,\n type: Joi.string().required().valid('string', 'number'),\n items: Joi.array<Item>().items(listItemSchema)\n})\n\nconst feeSchema = Joi.object<Fee>().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<MultipleApiKeys>({\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<NotifyOutputConfiguration>().keys({\n apiKey: [Joi.string().allow('').optional(), multiApiKeySchema],\n templateId: Joi.string(),\n emailField: Joi.string(),\n personalisation: Joi.array<string>().items(Joi.string()),\n personalisationFieldCustomisation: Joi.object()\n .pattern(/./, Joi.array<string>().items(Joi.string()))\n .optional(),\n addReferencesToPersonalisation: Joi.boolean().optional(),\n emailReplyToIdConfiguration: Joi.array().items(replyToConfigurationSchema)\n})\n\nconst emailSchema = Joi.object<EmailOutputConfiguration>().keys({\n emailAddress: Joi.string().required()\n})\n\nconst webhookSchema = Joi.object<WebhookOutputConfiguration>().keys({\n url: Joi.string(),\n allowRetry: Joi.boolean().optional().default(true)\n})\n\nconst outputSchema = Joi.object<Output>().keys({\n name: Joi.string(),\n title: Joi.string().optional(),\n type: Joi.string().allow('notify', 'email', 'webhook', 'sheets'),\n outputConfiguration: Joi.alternatives().try(\n notifySchema,\n emailSchema,\n webhookSchema\n )\n})\n\nconst feedbackSchema = Joi.object<FormDefinition['feedback']>().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.string()\n .email({\n tlds: {\n allow: false\n }\n })\n .optional()\n})\n\nconst phaseBannerSchema = Joi.object<PhaseBanner>().keys({\n phase: Joi.string().valid('alpha', 'beta')\n})\n\nconst feeOptionSchema = Joi.object<FeeOptions>()\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()\n .default(({ payApiKey, paymentReferenceFormat }: FeeOptions) => {\n return {\n ...(payApiKey && { payApiKey }),\n ...(paymentReferenceFormat && { paymentReferenceFormat })\n }\n })\n\n/**\n * Joi schema for `FormDefinition` interface\n * @see {@link FormDefinition}\n */\nexport const formDefinitionSchema = Joi.object<FormDefinition>()\n .required()\n .keys({\n name: localisedString.optional(),\n feedback: feedbackSchema.optional(),\n startPage: Joi.string().required(),\n pages: Joi.array<Page | RepeatingFieldPage>()\n .required()\n .items(pageSchema)\n .unique('path'),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .required(),\n conditions: Joi.array<ConditionRawData>()\n .items(conditionsSchema)\n .unique('name'),\n lists: Joi.array<List>().items(listSchema).unique('name'),\n fees: Joi.array<Fee>().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<Output>().items(outputSchema),\n payApiKey: [Joi.string().allow('').optional(), multiApiKeySchema],\n skipSummary: Joi.boolean().optional().default(false),\n version: Joi.number().optional().default(CURRENT_VERSION),\n phaseBanner: phaseBannerSchema,\n specialPages: specialPagesSchema.optional(),\n feeOptions: feeOptionSchema.optional()\n })\n\n// Maintain compatibility with legacy named export\n// E.g. `import { Schema } from '@defra/forms-model'`\nexport const Schema = formDefinitionSchema\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 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-definition/types.ts"],"sourcesContent":["import { type ComponentDef } from '~/src/components/types.js'\nimport { type Condition } from '~/src/conditions/condition.js'\nimport { type OutputType } from '~/src/data-model/enums.js'\nimport { formDefinitionSchema } from '~/src/form/form-definition/index.js'\n\ntype Toggleable<T> = boolean | T\n\nexport interface Next {\n path: string\n condition?: string\n}\n\nexport type Link = Next\n\nexport interface Page {\n title: string\n path: string\n controller
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-definition/types.ts"],"sourcesContent":["import { type ComponentDef } from '~/src/components/types.js'\nimport { type Condition } from '~/src/conditions/condition.js'\nimport { type OutputType } from '~/src/data-model/enums.js'\nimport { formDefinitionSchema } from '~/src/form/form-definition/index.js'\n\ntype Toggleable<T> = boolean | T\n\nexport interface Next {\n path: string\n condition?: string\n redirect?: string\n}\n\nexport type Link = Next\n\nexport interface Page {\n title: string\n path: string\n controller?: string\n components?: ComponentDef[]\n section: string // the section ID\n next?: Next[]\n repeatField?: string\n backLinkFallback?: string\n}\n\nexport interface RepeatingFieldPage extends Page {\n controller: 'RepeatingFieldPageController'\n options: {\n summaryDisplayMode?: {\n samePage?: boolean\n separatePage?: boolean\n hideRowTitles?: boolean\n }\n customText?: {\n separatePageTitle?: string\n }\n }\n}\n\nexport interface Section {\n name: string\n title: string\n hideTitle?: boolean\n}\n\nexport interface Item {\n text: string\n value: string | number | boolean\n description?: string\n conditional?: { components: ComponentDef[] } | null\n condition?: string | null\n}\n\nexport interface List {\n name: string\n title: string\n type: 'string' | 'number' | 'boolean'\n items: Item[]\n}\n\nexport interface Feedback {\n feedbackForm?: boolean\n url?: string\n emailAddress?: string\n}\n\nexport interface PhaseBanner {\n phase?: 'alpha' | 'beta'\n feedbackUrl?: string\n}\n\nexport interface MultipleApiKeys {\n test?: string\n production?: string\n}\n\nexport interface EmailOutputConfiguration {\n emailAddress: string\n}\n\nexport interface NotifyOutputConfiguration {\n apiKey: string\n templateId: string\n emailField: string\n personalisation: string[]\n personalisationFieldCustomisation?: Record<string, string[]>\n addReferencesToPersonalisation?: boolean\n emailReplyToIdConfiguration?: {\n emailReplyToId: string\n condition?: string\n }[]\n}\n\nexport interface WebhookOutputConfiguration {\n url: string\n allowRetry?: boolean\n}\n\nexport type OutputConfiguration =\n | EmailOutputConfiguration\n | NotifyOutputConfiguration\n | WebhookOutputConfiguration\n\nexport interface Output {\n name: string\n title: string\n type: OutputType\n outputConfiguration: OutputConfiguration\n}\n\nexport interface ConfirmationPage {\n customText: {\n title: string\n paymentSkipped: Toggleable<string>\n nextSteps: Toggleable<string>\n }\n components: ComponentDef[]\n}\n\nexport interface PaymentSkippedWarningPage {\n customText: {\n title: string\n caption: string\n body: string\n }\n}\n\nexport interface SpecialPages {\n confirmationPage?: ConfirmationPage\n paymentSkippedWarningPage?: PaymentSkippedWarningPage\n}\n\nexport interface Fee {\n description: string\n amount: number\n multiplier?: string\n condition?: string\n prefix?: string\n}\n\nexport interface FeeOptions {\n payApiKey?: string | MultipleApiKeys\n paymentReferenceFormat?: string\n payReturnUrl?: string\n allowSubmissionWithoutPayment: boolean\n maxAttempts: number\n customPayErrorMessage?: string\n showPaymentSkippedWarningPage: boolean\n}\n\nexport type ConditionWrapperValue =\n | string\n | {\n name: string\n conditions: Condition[]\n }\n\nexport interface ConditionRawData {\n name: string\n displayName: string\n value: ConditionWrapperValue\n}\n\n/**\n * Interface for `formDefinitionSchema` Joi schema\n * @see {@link formDefinitionSchema}\n */\nexport interface FormDefinition {\n pages: (Page | RepeatingFieldPage)[]\n conditions: ConditionRawData[]\n lists: List[]\n sections: Section[]\n startPage?: Page['path']\n name?: string\n feedback?: Feedback\n phaseBanner?: PhaseBanner\n fees: Fee[]\n skipSummary?: boolean\n outputs: Output[]\n declaration?: string\n metadata?: Record<string, unknown>\n payApiKey?: string | MultipleApiKeys\n specialPages?: SpecialPages\n paymentReferenceFormat?: string\n feeOptions?: FeeOptions\n version?: number\n}\n"],"mappings":"","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","names":["Joi","formMetadataSchema","object","keys","title","string","max","trim","required","organisation","teamName","teamEmail","email"],"sources":["../../../../src/form/form-metadata/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport { type FormMetadata } from '~/src/form/form-metadata/types.js'\n\n/**\n * Joi schema for `FormMetadata` interface\n * @see {@link FormMetadata}\n */\nexport const formMetadataSchema = Joi.object()\n .keys({\n title: Joi.string().max(250).trim().required(),\n organisation: Joi.string().max(100).trim().required(),\n teamName: Joi.string().max(100).trim().required(),\n teamEmail: Joi.string().email().trim().required()\n })\n .required()\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,KAAK;AAIrB;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAGD,GAAG,CAACE,MAAM,
|
1
|
+
{"version":3,"file":"index.js","names":["Joi","formMetadataSchema","object","keys","title","string","max","trim","required","organisation","teamName","teamEmail","email"],"sources":["../../../../src/form/form-metadata/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport { type FormMetadata } from '~/src/form/form-metadata/types.js'\n\n/**\n * Joi schema for `FormMetadata` interface\n * @see {@link FormMetadata}\n */\nexport const formMetadataSchema = Joi.object<FormMetadata>()\n .keys({\n title: Joi.string().max(250).trim().required(),\n organisation: Joi.string().max(100).trim().required(),\n teamName: Joi.string().max(100).trim().required(),\n teamEmail: Joi.string().email().trim().required()\n })\n .required()\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,KAAK;AAIrB;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAGD,GAAG,CAACE,MAAM,CAAe,CAAC,CACzDC,IAAI,CAAC;EACJC,KAAK,EAAEJ,GAAG,CAACK,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC9CC,YAAY,EAAET,GAAG,CAACK,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACrDE,QAAQ,EAAEV,GAAG,CAACK,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACjDG,SAAS,EAAEX,GAAG,CAACK,MAAM,CAAC,CAAC,CAACO,KAAK,CAAC,CAAC,CAACL,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC;AAClD,CAAC,CAAC,CACDA,QAAQ,CAAC,CAAC","ignoreList":[]}
|
@@ -1,16 +1,18 @@
|
|
1
1
|
import Joi from 'joi';
|
2
|
+
import { type ComponentDef } from '../../components/types.js';
|
3
|
+
import { type FormDefinition } from '../../form/form-definition/types.js';
|
2
4
|
/**
|
3
5
|
* If an optional key is added, CURRENT_VERSION does not need to be incremented.
|
4
6
|
* Only breaking changes will require an increment, as well as a migration script.
|
5
7
|
*/
|
6
8
|
export declare const CURRENT_VERSION = 2;
|
7
|
-
export declare const componentSchema: Joi.ObjectSchema<
|
9
|
+
export declare const componentSchema: Joi.ObjectSchema<ComponentDef>;
|
8
10
|
/**
|
9
11
|
* Joi schema for `FormDefinition` interface
|
10
12
|
* @see {@link FormDefinition}
|
11
13
|
*/
|
12
|
-
export declare const formDefinitionSchema: Joi.ObjectSchema<
|
13
|
-
export declare const Schema: Joi.ObjectSchema<
|
14
|
+
export declare const formDefinitionSchema: Joi.ObjectSchema<FormDefinition>;
|
15
|
+
export declare const Schema: Joi.ObjectSchema<FormDefinition>;
|
14
16
|
/**
|
15
17
|
* Schema versions:
|
16
18
|
* Undefined / 0 - initial version as at 28/8/20. Conditions may be in object structure or string form.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAML,KAAK,cAAc,EAcpB,MAAM,qCAAqC,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,eAAe,IAAI,CAAA;AAyEhC,eAAO,MAAM,eAAe,gCAYZ,CAAA;AAsKhB;;;GAGG;AACH,eAAO,MAAM,oBAAoB,kCA6B7B,CAAA;AAIJ,eAAO,MAAM,MAAM,kCAAuB,CAAA;AAE1C;;;;;;;;;;GAUG"}
|
@@ -5,18 +5,18 @@ type Toggleable<T> = boolean | T;
|
|
5
5
|
export interface Next {
|
6
6
|
path: string;
|
7
7
|
condition?: string;
|
8
|
+
redirect?: string;
|
8
9
|
}
|
9
10
|
export type Link = Next;
|
10
11
|
export interface Page {
|
11
12
|
title: string;
|
12
13
|
path: string;
|
13
|
-
controller
|
14
|
+
controller?: string;
|
14
15
|
components?: ComponentDef[];
|
15
16
|
section: string;
|
16
|
-
next?:
|
17
|
-
|
18
|
-
|
19
|
-
}[];
|
17
|
+
next?: Next[];
|
18
|
+
repeatField?: string;
|
19
|
+
backLinkFallback?: string;
|
20
20
|
}
|
21
21
|
export interface RepeatingFieldPage extends Page {
|
22
22
|
controller: 'RepeatingFieldPageController';
|
@@ -34,13 +34,16 @@ export interface RepeatingFieldPage extends Page {
|
|
34
34
|
export interface Section {
|
35
35
|
name: string;
|
36
36
|
title: string;
|
37
|
-
hideTitle
|
37
|
+
hideTitle?: boolean;
|
38
38
|
}
|
39
39
|
export interface Item {
|
40
40
|
text: string;
|
41
41
|
value: string | number | boolean;
|
42
42
|
description?: string;
|
43
|
-
|
43
|
+
conditional?: {
|
44
|
+
components: ComponentDef[];
|
45
|
+
} | null;
|
46
|
+
condition?: string | null;
|
44
47
|
}
|
45
48
|
export interface List {
|
46
49
|
name: string;
|
@@ -73,11 +76,12 @@ export interface NotifyOutputConfiguration {
|
|
73
76
|
addReferencesToPersonalisation?: boolean;
|
74
77
|
emailReplyToIdConfiguration?: {
|
75
78
|
emailReplyToId: string;
|
76
|
-
condition?: string
|
79
|
+
condition?: string;
|
77
80
|
}[];
|
78
81
|
}
|
79
82
|
export interface WebhookOutputConfiguration {
|
80
83
|
url: string;
|
84
|
+
allowRetry?: boolean;
|
81
85
|
}
|
82
86
|
export type OutputConfiguration = EmailOutputConfiguration | NotifyOutputConfiguration | WebhookOutputConfiguration;
|
83
87
|
export interface Output {
|
@@ -113,6 +117,7 @@ export interface Fee {
|
|
113
117
|
prefix?: string;
|
114
118
|
}
|
115
119
|
export interface FeeOptions {
|
120
|
+
payApiKey?: string | MultipleApiKeys;
|
116
121
|
paymentReferenceFormat?: string;
|
117
122
|
payReturnUrl?: string;
|
118
123
|
allowSubmissionWithoutPayment: boolean;
|
@@ -138,19 +143,20 @@ export interface FormDefinition {
|
|
138
143
|
conditions: ConditionRawData[];
|
139
144
|
lists: List[];
|
140
145
|
sections: Section[];
|
141
|
-
startPage?: Page['path']
|
142
|
-
name?: string
|
146
|
+
startPage?: Page['path'];
|
147
|
+
name?: string;
|
143
148
|
feedback?: Feedback;
|
144
149
|
phaseBanner?: PhaseBanner;
|
145
150
|
fees: Fee[];
|
146
|
-
skipSummary?: boolean
|
151
|
+
skipSummary?: boolean;
|
147
152
|
outputs: Output[];
|
148
|
-
declaration?: string
|
153
|
+
declaration?: string;
|
149
154
|
metadata?: Record<string, unknown>;
|
150
|
-
payApiKey?: string | MultipleApiKeys
|
155
|
+
payApiKey?: string | MultipleApiKeys;
|
151
156
|
specialPages?: SpecialPages;
|
152
157
|
paymentReferenceFormat?: string;
|
153
|
-
feeOptions
|
158
|
+
feeOptions?: FeeOptions;
|
159
|
+
version?: number;
|
154
160
|
}
|
155
161
|
export {};
|
156
162
|
//# sourceMappingURL=types.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAG3D,KAAK,UAAU,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAA;AAEhC,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/types.ts"],"names":[],"mappings":"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"}
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import Joi from 'joi';
|
2
|
+
import { type FormMetadata } from '../../form/form-metadata/types.js';
|
2
3
|
/**
|
3
4
|
* Joi schema for `FormMetadata` interface
|
4
5
|
* @see {@link FormMetadata}
|
5
6
|
*/
|
6
|
-
export declare const formMetadataSchema: Joi.ObjectSchema<
|
7
|
+
export declare const formMetadataSchema: Joi.ObjectSchema<FormMetadata>;
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAErE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gCAOlB,CAAA"}
|
package/package.json
CHANGED
@@ -1,6 +1,27 @@
|
|
1
1
|
import Joi from 'joi'
|
2
2
|
|
3
|
-
import { type
|
3
|
+
import { type ComponentDef } from '~/src/components/types.js'
|
4
|
+
import {
|
5
|
+
type ConditionRawData,
|
6
|
+
type ConfirmationPage,
|
7
|
+
type EmailOutputConfiguration,
|
8
|
+
type Fee,
|
9
|
+
type FeeOptions,
|
10
|
+
type FormDefinition,
|
11
|
+
type Item,
|
12
|
+
type List,
|
13
|
+
type MultipleApiKeys,
|
14
|
+
type Next,
|
15
|
+
type NotifyOutputConfiguration,
|
16
|
+
type Output,
|
17
|
+
type Page,
|
18
|
+
type PaymentSkippedWarningPage,
|
19
|
+
type PhaseBanner,
|
20
|
+
type RepeatingFieldPage,
|
21
|
+
type Section,
|
22
|
+
type SpecialPages,
|
23
|
+
type WebhookOutputConfiguration
|
24
|
+
} from '~/src/form/form-definition/types.js'
|
4
25
|
|
5
26
|
/**
|
6
27
|
* If an optional key is added, CURRENT_VERSION does not need to be incremented.
|
@@ -8,10 +29,10 @@ import { type FormDefinition } from '~/src/form/form-definition/types.js'
|
|
8
29
|
*/
|
9
30
|
export const CURRENT_VERSION = 2
|
10
31
|
|
11
|
-
const sectionsSchema = Joi.object().keys({
|
32
|
+
const sectionsSchema = Joi.object<Section>().keys({
|
12
33
|
name: Joi.string().required(),
|
13
34
|
title: Joi.string().required(),
|
14
|
-
hideTitle: Joi.boolean().default(false)
|
35
|
+
hideTitle: Joi.boolean().optional().default(false)
|
15
36
|
})
|
16
37
|
|
17
38
|
const conditionFieldSchema = Joi.object().keys({
|
@@ -68,7 +89,7 @@ const conditionsModelSchema = Joi.object().keys({
|
|
68
89
|
)
|
69
90
|
})
|
70
91
|
|
71
|
-
const conditionsSchema = Joi.object().keys({
|
92
|
+
const conditionsSchema = Joi.object<ConditionRawData>().keys({
|
72
93
|
name: Joi.string().required(),
|
73
94
|
displayName: Joi.string(),
|
74
95
|
value: Joi.alternatives().try(Joi.string(), conditionsModelSchema).required()
|
@@ -79,7 +100,7 @@ const localisedString = Joi.alternatives().try(
|
|
79
100
|
Joi.string().allow('')
|
80
101
|
)
|
81
102
|
|
82
|
-
export const componentSchema = Joi.object()
|
103
|
+
export const componentSchema = Joi.object<ComponentDef>()
|
83
104
|
.keys({
|
84
105
|
type: Joi.string().required(),
|
85
106
|
name: Joi.string(),
|
@@ -93,23 +114,23 @@ export const componentSchema = Joi.object()
|
|
93
114
|
})
|
94
115
|
.unknown(true)
|
95
116
|
|
96
|
-
const nextSchema = Joi.object().keys({
|
117
|
+
const nextSchema = Joi.object<Next>().keys({
|
97
118
|
path: Joi.string().required(),
|
98
119
|
condition: Joi.string().allow('').optional(),
|
99
|
-
redirect: Joi.string().
|
120
|
+
redirect: Joi.string().optional()
|
100
121
|
})
|
101
122
|
|
102
123
|
/**
|
103
124
|
* `/status` is a special route for providing a user's application status.
|
104
125
|
* It should not be configured via the designer.
|
105
126
|
*/
|
106
|
-
const pageSchema = Joi.object().keys({
|
127
|
+
const pageSchema = Joi.object<Page | RepeatingFieldPage>().keys({
|
107
128
|
path: Joi.string().required().disallow('/status'),
|
108
129
|
title: localisedString,
|
109
130
|
section: Joi.string(),
|
110
|
-
controller: Joi.string(),
|
111
|
-
components: Joi.array().items(componentSchema),
|
112
|
-
next: Joi.array().items(nextSchema),
|
131
|
+
controller: Joi.string().optional(),
|
132
|
+
components: Joi.array<ComponentDef>().items(componentSchema),
|
133
|
+
next: Joi.array<Next>().items(nextSchema),
|
113
134
|
repeatField: Joi.string().optional(),
|
114
135
|
options: Joi.object().optional(),
|
115
136
|
backLinkFallback: Joi.string().optional()
|
@@ -117,8 +138,8 @@ const pageSchema = Joi.object().keys({
|
|
117
138
|
|
118
139
|
const toggleableString = Joi.alternatives().try(Joi.boolean(), Joi.string())
|
119
140
|
|
120
|
-
const confirmationPageSchema = Joi.object({
|
121
|
-
customText: Joi.object({
|
141
|
+
const confirmationPageSchema = Joi.object<ConfirmationPage>({
|
142
|
+
customText: Joi.object<ConfirmationPage['customText']>({
|
122
143
|
title: Joi.string().default('Application complete'),
|
123
144
|
paymentSkipped: toggleableString.default(
|
124
145
|
'Someone will be in touch to make a payment.'
|
@@ -127,10 +148,10 @@ const confirmationPageSchema = Joi.object({
|
|
127
148
|
'You will receive an email with details with the next steps.'
|
128
149
|
)
|
129
150
|
}).default(),
|
130
|
-
components: Joi.array().items(componentSchema)
|
151
|
+
components: Joi.array<ComponentDef>().items(componentSchema)
|
131
152
|
})
|
132
153
|
|
133
|
-
const paymentSkippedWarningPage = Joi.object({
|
154
|
+
const paymentSkippedWarningPage = Joi.object<PaymentSkippedWarningPage>({
|
134
155
|
customText: Joi.object({
|
135
156
|
title: Joi.string().default('Pay for your application').optional(),
|
136
157
|
caption: Joi.string().default('Payment').optional(),
|
@@ -138,18 +159,18 @@ const paymentSkippedWarningPage = Joi.object({
|
|
138
159
|
})
|
139
160
|
})
|
140
161
|
|
141
|
-
const specialPagesSchema = Joi.object().keys({
|
162
|
+
const specialPagesSchema = Joi.object<SpecialPages>().keys({
|
142
163
|
confirmationPage: confirmationPageSchema.optional(),
|
143
164
|
paymentSkippedWarningPage: paymentSkippedWarningPage.optional()
|
144
165
|
})
|
145
166
|
|
146
|
-
const listItemSchema = Joi.object().keys({
|
167
|
+
const listItemSchema = Joi.object<Item>().keys({
|
147
168
|
text: localisedString,
|
148
169
|
value: Joi.alternatives().try(Joi.number(), Joi.string()),
|
149
170
|
description: localisedString.optional(),
|
150
|
-
conditional: Joi.object()
|
171
|
+
conditional: Joi.object<Item['conditional']>()
|
151
172
|
.keys({
|
152
|
-
components: Joi.array()
|
173
|
+
components: Joi.array<ComponentDef>()
|
153
174
|
.required()
|
154
175
|
.items(componentSchema.unknown(true))
|
155
176
|
.unique('name')
|
@@ -159,14 +180,14 @@ const listItemSchema = Joi.object().keys({
|
|
159
180
|
condition: Joi.string().allow(null, '').optional()
|
160
181
|
})
|
161
182
|
|
162
|
-
const listSchema = Joi.object().keys({
|
183
|
+
const listSchema = Joi.object<List>().keys({
|
163
184
|
name: Joi.string().required(),
|
164
185
|
title: localisedString,
|
165
186
|
type: Joi.string().required().valid('string', 'number'),
|
166
|
-
items: Joi.array().items(listItemSchema)
|
187
|
+
items: Joi.array<Item>().items(listItemSchema)
|
167
188
|
})
|
168
189
|
|
169
|
-
const feeSchema = Joi.object().keys({
|
190
|
+
const feeSchema = Joi.object<Fee>().keys({
|
170
191
|
description: Joi.string().required(),
|
171
192
|
amount: Joi.number().required(),
|
172
193
|
multiplier: Joi.string().optional(),
|
@@ -174,7 +195,7 @@ const feeSchema = Joi.object().keys({
|
|
174
195
|
prefix: Joi.string().optional()
|
175
196
|
})
|
176
197
|
|
177
|
-
const multiApiKeySchema = Joi.object({
|
198
|
+
const multiApiKeySchema = Joi.object<MultipleApiKeys>({
|
178
199
|
test: Joi.string().optional(),
|
179
200
|
production: Joi.string().optional()
|
180
201
|
})
|
@@ -184,28 +205,28 @@ const replyToConfigurationSchema = Joi.object({
|
|
184
205
|
condition: Joi.string().allow('').optional()
|
185
206
|
})
|
186
207
|
|
187
|
-
const notifySchema = Joi.object().keys({
|
208
|
+
const notifySchema = Joi.object<NotifyOutputConfiguration>().keys({
|
188
209
|
apiKey: [Joi.string().allow('').optional(), multiApiKeySchema],
|
189
210
|
templateId: Joi.string(),
|
190
211
|
emailField: Joi.string(),
|
191
|
-
personalisation: Joi.array().items(Joi.string()),
|
212
|
+
personalisation: Joi.array<string>().items(Joi.string()),
|
192
213
|
personalisationFieldCustomisation: Joi.object()
|
193
|
-
.pattern(/./, Joi.array().items(Joi.string()))
|
214
|
+
.pattern(/./, Joi.array<string>().items(Joi.string()))
|
194
215
|
.optional(),
|
195
216
|
addReferencesToPersonalisation: Joi.boolean().optional(),
|
196
217
|
emailReplyToIdConfiguration: Joi.array().items(replyToConfigurationSchema)
|
197
218
|
})
|
198
219
|
|
199
|
-
const emailSchema = Joi.object().keys({
|
200
|
-
emailAddress: Joi.string()
|
220
|
+
const emailSchema = Joi.object<EmailOutputConfiguration>().keys({
|
221
|
+
emailAddress: Joi.string().required()
|
201
222
|
})
|
202
223
|
|
203
|
-
const webhookSchema = Joi.object().keys({
|
224
|
+
const webhookSchema = Joi.object<WebhookOutputConfiguration>().keys({
|
204
225
|
url: Joi.string(),
|
205
|
-
allowRetry: Joi.boolean().default(true)
|
226
|
+
allowRetry: Joi.boolean().optional().default(true)
|
206
227
|
})
|
207
228
|
|
208
|
-
const outputSchema = Joi.object().keys({
|
229
|
+
const outputSchema = Joi.object<Output>().keys({
|
209
230
|
name: Joi.string(),
|
210
231
|
title: Joi.string().optional(),
|
211
232
|
type: Joi.string().allow('notify', 'email', 'webhook', 'sheets'),
|
@@ -216,7 +237,7 @@ const outputSchema = Joi.object().keys({
|
|
216
237
|
)
|
217
238
|
})
|
218
239
|
|
219
|
-
const feedbackSchema = Joi.object().keys({
|
240
|
+
const feedbackSchema = Joi.object<FormDefinition['feedback']>().keys({
|
220
241
|
feedbackForm: Joi.boolean().default(false),
|
221
242
|
url: Joi.when('feedbackForm', {
|
222
243
|
is: Joi.boolean().valid(false),
|
@@ -231,11 +252,11 @@ const feedbackSchema = Joi.object().keys({
|
|
231
252
|
.optional()
|
232
253
|
})
|
233
254
|
|
234
|
-
const phaseBannerSchema = Joi.object().keys({
|
255
|
+
const phaseBannerSchema = Joi.object<PhaseBanner>().keys({
|
235
256
|
phase: Joi.string().valid('alpha', 'beta')
|
236
257
|
})
|
237
258
|
|
238
|
-
const feeOptionSchema = Joi.object()
|
259
|
+
const feeOptionSchema = Joi.object<FeeOptions>()
|
239
260
|
.keys({
|
240
261
|
payApiKey: [Joi.string().allow('').optional(), multiApiKeySchema],
|
241
262
|
paymentReferenceFormat: [Joi.string().optional()],
|
@@ -249,7 +270,8 @@ const feeOptionSchema = Joi.object()
|
|
249
270
|
otherwise: Joi.boolean().valid(false).default(false)
|
250
271
|
})
|
251
272
|
})
|
252
|
-
.default(
|
273
|
+
.default()
|
274
|
+
.default(({ payApiKey, paymentReferenceFormat }: FeeOptions) => {
|
253
275
|
return {
|
254
276
|
...(payApiKey && { payApiKey }),
|
255
277
|
...(paymentReferenceFormat && { paymentReferenceFormat })
|
@@ -260,27 +282,35 @@ const feeOptionSchema = Joi.object()
|
|
260
282
|
* Joi schema for `FormDefinition` interface
|
261
283
|
* @see {@link FormDefinition}
|
262
284
|
*/
|
263
|
-
export const formDefinitionSchema = Joi.object()
|
285
|
+
export const formDefinitionSchema = Joi.object<FormDefinition>()
|
264
286
|
.required()
|
265
287
|
.keys({
|
266
288
|
name: localisedString.optional(),
|
267
|
-
feedback: feedbackSchema,
|
289
|
+
feedback: feedbackSchema.optional(),
|
268
290
|
startPage: Joi.string().required(),
|
269
|
-
pages: Joi.array()
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
291
|
+
pages: Joi.array<Page | RepeatingFieldPage>()
|
292
|
+
.required()
|
293
|
+
.items(pageSchema)
|
294
|
+
.unique('path'),
|
295
|
+
sections: Joi.array<Section>()
|
296
|
+
.items(sectionsSchema)
|
297
|
+
.unique('name')
|
298
|
+
.required(),
|
299
|
+
conditions: Joi.array<ConditionRawData>()
|
300
|
+
.items(conditionsSchema)
|
301
|
+
.unique('name'),
|
302
|
+
lists: Joi.array<List>().items(listSchema).unique('name'),
|
303
|
+
fees: Joi.array<Fee>().items(feeSchema).optional(),
|
274
304
|
paymentReferenceFormat: Joi.string().optional(),
|
275
305
|
metadata: Joi.object({ a: Joi.any() }).unknown().optional(),
|
276
306
|
declaration: Joi.string().allow('').optional(),
|
277
|
-
outputs: Joi.array().items(outputSchema),
|
307
|
+
outputs: Joi.array<Output>().items(outputSchema),
|
278
308
|
payApiKey: [Joi.string().allow('').optional(), multiApiKeySchema],
|
279
|
-
skipSummary: Joi.boolean().default(false),
|
280
|
-
version: Joi.number().default(CURRENT_VERSION),
|
309
|
+
skipSummary: Joi.boolean().optional().default(false),
|
310
|
+
version: Joi.number().optional().default(CURRENT_VERSION),
|
281
311
|
phaseBanner: phaseBannerSchema,
|
282
312
|
specialPages: specialPagesSchema.optional(),
|
283
|
-
feeOptions: feeOptionSchema
|
313
|
+
feeOptions: feeOptionSchema.optional()
|
284
314
|
})
|
285
315
|
|
286
316
|
// Maintain compatibility with legacy named export
|
@@ -8,6 +8,7 @@ type Toggleable<T> = boolean | T
|
|
8
8
|
export interface Next {
|
9
9
|
path: string
|
10
10
|
condition?: string
|
11
|
+
redirect?: string
|
11
12
|
}
|
12
13
|
|
13
14
|
export type Link = Next
|
@@ -15,10 +16,12 @@ export type Link = Next
|
|
15
16
|
export interface Page {
|
16
17
|
title: string
|
17
18
|
path: string
|
18
|
-
controller
|
19
|
+
controller?: string
|
19
20
|
components?: ComponentDef[]
|
20
21
|
section: string // the section ID
|
21
|
-
next?:
|
22
|
+
next?: Next[]
|
23
|
+
repeatField?: string
|
24
|
+
backLinkFallback?: string
|
22
25
|
}
|
23
26
|
|
24
27
|
export interface RepeatingFieldPage extends Page {
|
@@ -38,14 +41,15 @@ export interface RepeatingFieldPage extends Page {
|
|
38
41
|
export interface Section {
|
39
42
|
name: string
|
40
43
|
title: string
|
41
|
-
hideTitle
|
44
|
+
hideTitle?: boolean
|
42
45
|
}
|
43
46
|
|
44
47
|
export interface Item {
|
45
48
|
text: string
|
46
49
|
value: string | number | boolean
|
47
50
|
description?: string
|
48
|
-
|
51
|
+
conditional?: { components: ComponentDef[] } | null
|
52
|
+
condition?: string | null
|
49
53
|
}
|
50
54
|
|
51
55
|
export interface List {
|
@@ -84,12 +88,13 @@ export interface NotifyOutputConfiguration {
|
|
84
88
|
addReferencesToPersonalisation?: boolean
|
85
89
|
emailReplyToIdConfiguration?: {
|
86
90
|
emailReplyToId: string
|
87
|
-
condition?: string
|
91
|
+
condition?: string
|
88
92
|
}[]
|
89
93
|
}
|
90
94
|
|
91
95
|
export interface WebhookOutputConfiguration {
|
92
96
|
url: string
|
97
|
+
allowRetry?: boolean
|
93
98
|
}
|
94
99
|
|
95
100
|
export type OutputConfiguration =
|
@@ -135,6 +140,7 @@ export interface Fee {
|
|
135
140
|
}
|
136
141
|
|
137
142
|
export interface FeeOptions {
|
143
|
+
payApiKey?: string | MultipleApiKeys
|
138
144
|
paymentReferenceFormat?: string
|
139
145
|
payReturnUrl?: string
|
140
146
|
allowSubmissionWithoutPayment: boolean
|
@@ -165,17 +171,18 @@ export interface FormDefinition {
|
|
165
171
|
conditions: ConditionRawData[]
|
166
172
|
lists: List[]
|
167
173
|
sections: Section[]
|
168
|
-
startPage?: Page['path']
|
169
|
-
name?: string
|
174
|
+
startPage?: Page['path']
|
175
|
+
name?: string
|
170
176
|
feedback?: Feedback
|
171
177
|
phaseBanner?: PhaseBanner
|
172
178
|
fees: Fee[]
|
173
|
-
skipSummary?: boolean
|
179
|
+
skipSummary?: boolean
|
174
180
|
outputs: Output[]
|
175
|
-
declaration?: string
|
181
|
+
declaration?: string
|
176
182
|
metadata?: Record<string, unknown>
|
177
|
-
payApiKey?: string | MultipleApiKeys
|
183
|
+
payApiKey?: string | MultipleApiKeys
|
178
184
|
specialPages?: SpecialPages
|
179
185
|
paymentReferenceFormat?: string
|
180
|
-
feeOptions
|
186
|
+
feeOptions?: FeeOptions
|
187
|
+
version?: number
|
181
188
|
}
|
@@ -6,7 +6,7 @@ import { type FormMetadata } from '~/src/form/form-metadata/types.js'
|
|
6
6
|
* Joi schema for `FormMetadata` interface
|
7
7
|
* @see {@link FormMetadata}
|
8
8
|
*/
|
9
|
-
export const formMetadataSchema = Joi.object()
|
9
|
+
export const formMetadataSchema = Joi.object<FormMetadata>()
|
10
10
|
.keys({
|
11
11
|
title: Joi.string().max(250).trim().required(),
|
12
12
|
organisation: Joi.string().max(100).trim().required(),
|