@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.
@@ -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().uri().optional()
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":"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","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: string\n components?: ComponentDef[]\n section: string // the section ID\n next?: { path: string; condition?: 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 condition?: string\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 | undefined\n }[]\n}\n\nexport interface WebhookOutputConfiguration {\n url: string\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 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'] | undefined\n name?: string | undefined\n feedback?: Feedback\n phaseBanner?: PhaseBanner\n fees: Fee[]\n skipSummary?: boolean | undefined\n outputs: Output[]\n declaration?: string | undefined\n metadata?: Record<string, unknown>\n payApiKey?: string | MultipleApiKeys | undefined\n specialPages?: SpecialPages\n paymentReferenceFormat?: string\n feeOptions: FeeOptions\n}\n"],"mappings":"","ignoreList":[]}
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,CAAC,CAAC,CAC3CC,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
+ {"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<any>;
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<any>;
13
- export declare const Schema: Joi.ObjectSchema<any>;
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;AAIrB;;;GAGG;AACH,eAAO,MAAM,eAAe,IAAI,CAAA;AAyEhC,eAAO,MAAM,eAAe,uBAYZ,CAAA;AAqKhB;;;GAGG;AACH,eAAO,MAAM,oBAAoB,uBAqB7B,CAAA;AAIJ,eAAO,MAAM,MAAM,uBAAuB,CAAA;AAE1C;;;;;;;;;;GAUG"}
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: string;
14
+ controller?: string;
14
15
  components?: ComponentDef[];
15
16
  section: string;
16
- next?: {
17
- path: string;
18
- condition?: string;
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: boolean;
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
- condition?: string;
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 | undefined;
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'] | undefined;
142
- name?: string | undefined;
146
+ startPage?: Page['path'];
147
+ name?: string;
143
148
  feedback?: Feedback;
144
149
  phaseBanner?: PhaseBanner;
145
150
  fees: Fee[];
146
- skipSummary?: boolean | undefined;
151
+ skipSummary?: boolean;
147
152
  outputs: Output[];
148
- declaration?: string | undefined;
153
+ declaration?: string;
149
154
  metadata?: Record<string, unknown>;
150
- payApiKey?: string | MultipleApiKeys | undefined;
155
+ payApiKey?: string | MultipleApiKeys;
151
156
  specialPages?: SpecialPages;
152
157
  paymentReferenceFormat?: string;
153
- feeOptions: 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":"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"}
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<any>;
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;AAIrB;;;GAGG;AACH,eAAO,MAAM,kBAAkB,uBAOlB,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,6 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.58",
3
+ "version": "3.0.59",
4
4
  "description": "A hapi plugin providing the model for Defra forms",
5
5
  "homepage": "https://github.com/DEFRA/forms-designer/tree/main/model#readme",
6
6
  "repository": {
@@ -1,6 +1,27 @@
1
1
  import Joi from 'joi'
2
2
 
3
- import { type FormDefinition } from '~/src/form/form-definition/types.js'
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().uri().optional()
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(({ payApiKey, paymentReferenceFormat }) => {
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().required().items(pageSchema).unique('path'),
270
- sections: Joi.array().items(sectionsSchema).unique('name').required(),
271
- conditions: Joi.array().items(conditionsSchema).unique('name'),
272
- lists: Joi.array().items(listSchema).unique('name'),
273
- fees: Joi.array().items(feeSchema).optional(),
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: string
19
+ controller?: string
19
20
  components?: ComponentDef[]
20
21
  section: string // the section ID
21
- next?: { path: string; condition?: string }[]
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: boolean
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
- condition?: string
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 | undefined
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'] | undefined
169
- name?: string | undefined
174
+ startPage?: Page['path']
175
+ name?: string
170
176
  feedback?: Feedback
171
177
  phaseBanner?: PhaseBanner
172
178
  fees: Fee[]
173
- skipSummary?: boolean | undefined
179
+ skipSummary?: boolean
174
180
  outputs: Output[]
175
- declaration?: string | undefined
181
+ declaration?: string
176
182
  metadata?: Record<string, unknown>
177
- payApiKey?: string | MultipleApiKeys | undefined
183
+ payApiKey?: string | MultipleApiKeys
178
184
  specialPages?: SpecialPages
179
185
  paymentReferenceFormat?: string
180
- feeOptions: 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(),