@defra/forms-model 3.0.409 → 3.0.410
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 +13 -0
- package/dist/module/form/form-definition/index.js.map +1 -1
- package/dist/types/form/form-definition/index.d.ts +2 -0
- package/dist/types/form/form-definition/index.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/form/form-definition/index.ts +21 -0
@@ -1,4 +1,5 @@
|
|
1
1
|
import Joi from 'joi';
|
2
|
+
import { v4 as uuidV4 } from 'uuid';
|
2
3
|
import { ComponentType } from "../../components/enums.js";
|
3
4
|
const sectionsSchema = Joi.object().keys({
|
4
5
|
name: Joi.string().required(),
|
@@ -74,6 +75,9 @@ export const componentSchema = Joi.object().keys({
|
|
74
75
|
}).unknown(true).default({}),
|
75
76
|
list: Joi.string().optional()
|
76
77
|
}).unknown(true);
|
78
|
+
const componentSchemaV2 = componentSchema.keys({
|
79
|
+
id: Joi.string().uuid().default(uuidV4())
|
80
|
+
});
|
77
81
|
const nextSchema = Joi.object().keys({
|
78
82
|
path: Joi.string().required(),
|
79
83
|
condition: Joi.string().allow('').optional(),
|
@@ -133,6 +137,10 @@ export const pageSchema = Joi.object().keys({
|
|
133
137
|
export const pageSchemaV2 = pageSchema.append({
|
134
138
|
title: Joi.string().allow('').required()
|
135
139
|
});
|
140
|
+
export const pageSchemaPayloadV2 = pageSchemaV2.keys({
|
141
|
+
id: Joi.string().uuid().default(uuidV4()),
|
142
|
+
components: Joi.array().items(componentSchemaV2).unique('name').unique('id')
|
143
|
+
});
|
136
144
|
const baseListItemSchema = Joi.object().keys({
|
137
145
|
text: Joi.string().allow(''),
|
138
146
|
description: Joi.string().allow('').optional(),
|
@@ -209,6 +217,11 @@ export const formDefinitionSchema = Joi.object().required().keys({
|
|
209
217
|
}).trim().optional(),
|
210
218
|
output: outputSchema.optional()
|
211
219
|
});
|
220
|
+
export const formDefinitionSchemaV2Payload = formDefinitionSchema.keys({
|
221
|
+
pages: Joi.array().items(pageSchemaPayloadV2).required().unique('path').unique('id', {
|
222
|
+
ignoreUndefined: true
|
223
|
+
})
|
224
|
+
});
|
212
225
|
|
213
226
|
// Maintain compatibility with legacy named export
|
214
227
|
// E.g. `import { Schema } from '@defra/forms-model'`
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","names":["Joi","ComponentType","sectionsSchema","object","keys","name","string","required","title","hideTitle","boolean","optional","default","conditionFieldSchema","type","display","conditionValueSchema","value","relativeDateValueSchema","period","unit","direction","conditionRefSchema","conditionName","conditionDisplayName","coordinator","conditionSchema","field","operator","alternatives","try","conditionGroupSchema","conditions","array","items","link","id","conditionsModelSchema","conditionWrapperSchema","displayName","componentSchema","uuid","shortDescription","when","is","valid","Details","Html","InsetText","Markdown","then","otherwise","allow","hint","options","rows","number","empty","maxWords","maxDaysInPast","maxDaysInFuture","customValidationMessage","customValidationMessages","unknown","schema","min","max","length","list","nextSchema","path","condition","redirect","repeatOptions","repeatSchema","pageRepeatSchema","eventSchema","method","url","uri","scheme","eventsSchema","onLoad","onSave","pageSchema","disallow","section","controller","components","unique","repeat","any","strip","next","events","view","pageSchemaV2","append","baseListItemSchema","text","description","conditional","stringListItemSchema","numberListItemSchema","listSchema","feedbackSchema","feedbackForm","emailAddress","email","tlds","phaseBannerSchema","phase","outputSchema","audience","version","formDefinitionSchema","engine","feedback","startPage","pages","ignoreUndefined","sections","lists","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","trim","output","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import Joi, { type LanguageMessages } from 'joi'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport {\n type ConditionData,\n type ConditionFieldData,\n type ConditionGroupData,\n type ConditionRefData,\n type ConditionValueData,\n type ConditionsModelData,\n type RelativeDateValueData\n} from '~/src/conditions/types.js'\nimport {\n type ConditionWrapper,\n type Event,\n type EventOptions,\n type Events,\n type FormDefinition,\n type Item,\n type Link,\n type List,\n type Page,\n type PhaseBanner,\n type Repeat,\n type RepeatOptions,\n type RepeatSchema,\n type Section\n} from '~/src/form/form-definition/types.js'\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<ConditionFieldData>().keys({\n name: Joi.string().required(),\n type: Joi.string().required(),\n display: Joi.string().required()\n})\n\nconst conditionValueSchema = Joi.object<ConditionValueData>().keys({\n type: Joi.string().required(),\n value: Joi.string().required(),\n display: Joi.string().required()\n})\n\nconst relativeDateValueSchema = Joi.object<RelativeDateValueData>().keys({\n type: Joi.string().required(),\n period: Joi.string().required(),\n unit: Joi.string().required(),\n direction: Joi.string().required()\n})\n\nconst conditionRefSchema = Joi.object<ConditionRefData>().keys({\n conditionName: Joi.string().required(),\n conditionDisplayName: Joi.string().required(),\n coordinator: Joi.string().optional()\n})\n\nconst conditionSchema = Joi.object<ConditionData>().keys({\n field: conditionFieldSchema,\n operator: Joi.string().required(),\n value: Joi.alternatives().try(conditionValueSchema, relativeDateValueSchema),\n coordinator: Joi.string().optional()\n})\n\nconst conditionGroupSchema = Joi.object<ConditionGroupData>()\n .keys({\n conditions: Joi.array().items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n Joi.link('#conditionGroupSchema')\n )\n )\n })\n .id('conditionGroupSchema')\n\nconst conditionsModelSchema = Joi.object<ConditionsModelData>().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 conditionWrapperSchema = Joi.object<ConditionWrapper>().keys({\n name: Joi.string().required(),\n displayName: Joi.string(),\n value: conditionsModelSchema.required()\n})\n\nexport const componentSchema = Joi.object<ComponentDef>()\n .keys({\n id: Joi.string().uuid().optional(),\n type: Joi.string<ComponentType>().required(),\n shortDescription: Joi.string().optional(),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown\n ),\n then: Joi.string().optional(),\n otherwise: Joi.string()\n }),\n title: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown\n ),\n then: Joi.string().optional(),\n otherwise: Joi.string().allow('')\n }),\n hint: Joi.string().allow('').optional(),\n options: Joi.object({\n rows: Joi.number().empty(''),\n maxWords: Joi.number().empty(''),\n maxDaysInPast: Joi.number().empty(''),\n maxDaysInFuture: Joi.number().empty(''),\n customValidationMessage: Joi.string().allow(''),\n customValidationMessages: Joi.object<LanguageMessages>()\n .unknown(true)\n .optional()\n })\n .default({})\n .unknown(true),\n schema: Joi.object({\n min: Joi.number().empty(''),\n max: Joi.number().empty(''),\n length: Joi.number().empty('')\n })\n .unknown(true)\n .default({}),\n list: Joi.string().optional()\n })\n .unknown(true)\n\nconst nextSchema = Joi.object<Link>().keys({\n path: Joi.string().required(),\n condition: Joi.string().allow('').optional(),\n redirect: Joi.string().optional()\n})\n\nconst repeatOptions = Joi.object<RepeatOptions>().keys({\n name: Joi.string().required(),\n title: Joi.string().required()\n})\n\nconst repeatSchema = Joi.object<RepeatSchema>().keys({\n min: Joi.number().empty('').required(),\n max: Joi.number().empty('').required()\n})\n\nconst pageRepeatSchema = Joi.object<Repeat>().keys({\n options: repeatOptions.required(),\n schema: repeatSchema.required()\n})\n\nconst eventSchema = Joi.object<Event>().keys({\n type: Joi.string().allow('http').required(),\n options: Joi.object<EventOptions>().keys({\n method: Joi.string().allow('POST').required(),\n url: Joi.string()\n .uri({ scheme: ['http', 'https'] })\n .required()\n })\n})\n\nconst eventsSchema = Joi.object<Events>().keys({\n onLoad: eventSchema.optional(),\n onSave: eventSchema.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 */\nexport const pageSchema = Joi.object<Page>().keys({\n id: Joi.string().uuid().optional(),\n path: Joi.string().required().disallow('/status'),\n title: Joi.string().required(),\n section: Joi.string(),\n controller: Joi.string().optional(),\n components: Joi.array<ComponentDef>().items(componentSchema).unique('name'),\n repeat: Joi.when('controller', {\n is: Joi.string().valid('RepeatPageController').required(),\n then: pageRepeatSchema.required(),\n otherwise: Joi.any().strip()\n }),\n condition: Joi.string().allow('').optional(),\n next: Joi.array<Link>().items(nextSchema).default([]),\n events: eventsSchema.optional(),\n view: Joi.string().optional()\n})\n\n/**\n * V2 engine schema - used with new editor\n */\nexport const pageSchemaV2 = pageSchema.append({\n title: Joi.string().allow('').required()\n})\n\nconst baseListItemSchema = Joi.object<Item>().keys({\n text: Joi.string().allow(''),\n description: Joi.string().allow('').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 .optional(),\n condition: Joi.string().allow('').optional()\n})\n\nconst stringListItemSchema = baseListItemSchema.append({\n value: Joi.string().required()\n})\n\nconst numberListItemSchema = baseListItemSchema.append({\n value: Joi.number().required()\n})\n\nconst listSchema = Joi.object<List>().keys({\n name: Joi.string().required(),\n title: Joi.string().required(),\n type: Joi.string().required().valid('string', 'number'),\n items: Joi.when('type', {\n is: 'string',\n then: Joi.array()\n .items(stringListItemSchema)\n .unique('text')\n .unique('value'),\n otherwise: Joi.array()\n .items(numberListItemSchema)\n .unique('text')\n .unique('value')\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 outputSchema = Joi.object<FormDefinition['output']>().keys({\n audience: Joi.string().valid('human', 'machine').required(),\n version: Joi.string().required()\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 engine: Joi.string().allow('V1', 'V2').default('V1'),\n name: Joi.string().allow('').optional(),\n feedback: feedbackSchema.optional(),\n startPage: Joi.string().optional(),\n pages: Joi.array<Page>()\n .required()\n .when('engine', {\n is: 'V2',\n then: Joi.array<Page>().items(pageSchemaV2),\n otherwise: Joi.array<Page>().items(pageSchema)\n })\n .unique('path')\n .unique('id', { ignoreUndefined: true }),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .unique('title')\n .required(),\n conditions: Joi.array<ConditionWrapper>()\n .items(conditionWrapperSchema)\n .unique('name')\n .unique('displayName'),\n lists: Joi.array<List>().items(listSchema).unique('name').unique('title'),\n metadata: Joi.object({ a: Joi.any() }).unknown().optional(),\n declaration: Joi.string().allow('').optional(),\n skipSummary: Joi.any().strip(),\n phaseBanner: phaseBannerSchema.optional(),\n outputEmail: Joi.string()\n .email({ tlds: { allow: ['uk'] } })\n .trim()\n .optional(),\n output: outputSchema.optional()\n })\n\n// Maintain compatibility with legacy named export\n// E.g. `import { Schema } from '@defra/forms-model'`\nexport const Schema = formDefinitionSchema\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"index.js","names":["Joi","v4","uuidV4","ComponentType","sectionsSchema","object","keys","name","string","required","title","hideTitle","boolean","optional","default","conditionFieldSchema","type","display","conditionValueSchema","value","relativeDateValueSchema","period","unit","direction","conditionRefSchema","conditionName","conditionDisplayName","coordinator","conditionSchema","field","operator","alternatives","try","conditionGroupSchema","conditions","array","items","link","id","conditionsModelSchema","conditionWrapperSchema","displayName","componentSchema","uuid","shortDescription","when","is","valid","Details","Html","InsetText","Markdown","then","otherwise","allow","hint","options","rows","number","empty","maxWords","maxDaysInPast","maxDaysInFuture","customValidationMessage","customValidationMessages","unknown","schema","min","max","length","list","componentSchemaV2","nextSchema","path","condition","redirect","repeatOptions","repeatSchema","pageRepeatSchema","eventSchema","method","url","uri","scheme","eventsSchema","onLoad","onSave","pageSchema","disallow","section","controller","components","unique","repeat","any","strip","next","events","view","pageSchemaV2","append","pageSchemaPayloadV2","baseListItemSchema","text","description","conditional","stringListItemSchema","numberListItemSchema","listSchema","feedbackSchema","feedbackForm","emailAddress","email","tlds","phaseBannerSchema","phase","outputSchema","audience","version","formDefinitionSchema","engine","feedback","startPage","pages","ignoreUndefined","sections","lists","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","trim","output","formDefinitionSchemaV2Payload","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import Joi, { type LanguageMessages } from 'joi'\nimport { v4 as uuidV4 } from 'uuid'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport {\n type ConditionData,\n type ConditionFieldData,\n type ConditionGroupData,\n type ConditionRefData,\n type ConditionValueData,\n type ConditionsModelData,\n type RelativeDateValueData\n} from '~/src/conditions/types.js'\nimport {\n type ConditionWrapper,\n type Event,\n type EventOptions,\n type Events,\n type FormDefinition,\n type Item,\n type Link,\n type List,\n type Page,\n type PhaseBanner,\n type Repeat,\n type RepeatOptions,\n type RepeatSchema,\n type Section\n} from '~/src/form/form-definition/types.js'\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<ConditionFieldData>().keys({\n name: Joi.string().required(),\n type: Joi.string().required(),\n display: Joi.string().required()\n})\n\nconst conditionValueSchema = Joi.object<ConditionValueData>().keys({\n type: Joi.string().required(),\n value: Joi.string().required(),\n display: Joi.string().required()\n})\n\nconst relativeDateValueSchema = Joi.object<RelativeDateValueData>().keys({\n type: Joi.string().required(),\n period: Joi.string().required(),\n unit: Joi.string().required(),\n direction: Joi.string().required()\n})\n\nconst conditionRefSchema = Joi.object<ConditionRefData>().keys({\n conditionName: Joi.string().required(),\n conditionDisplayName: Joi.string().required(),\n coordinator: Joi.string().optional()\n})\n\nconst conditionSchema = Joi.object<ConditionData>().keys({\n field: conditionFieldSchema,\n operator: Joi.string().required(),\n value: Joi.alternatives().try(conditionValueSchema, relativeDateValueSchema),\n coordinator: Joi.string().optional()\n})\n\nconst conditionGroupSchema = Joi.object<ConditionGroupData>()\n .keys({\n conditions: Joi.array().items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n Joi.link('#conditionGroupSchema')\n )\n )\n })\n .id('conditionGroupSchema')\n\nconst conditionsModelSchema = Joi.object<ConditionsModelData>().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 conditionWrapperSchema = Joi.object<ConditionWrapper>().keys({\n name: Joi.string().required(),\n displayName: Joi.string(),\n value: conditionsModelSchema.required()\n})\n\nexport const componentSchema = Joi.object<ComponentDef>()\n .keys({\n id: Joi.string().uuid().optional(),\n type: Joi.string<ComponentType>().required(),\n shortDescription: Joi.string().optional(),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown\n ),\n then: Joi.string().optional(),\n otherwise: Joi.string()\n }),\n title: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown\n ),\n then: Joi.string().optional(),\n otherwise: Joi.string().allow('')\n }),\n hint: Joi.string().allow('').optional(),\n options: Joi.object({\n rows: Joi.number().empty(''),\n maxWords: Joi.number().empty(''),\n maxDaysInPast: Joi.number().empty(''),\n maxDaysInFuture: Joi.number().empty(''),\n customValidationMessage: Joi.string().allow(''),\n customValidationMessages: Joi.object<LanguageMessages>()\n .unknown(true)\n .optional()\n })\n .default({})\n .unknown(true),\n schema: Joi.object({\n min: Joi.number().empty(''),\n max: Joi.number().empty(''),\n length: Joi.number().empty('')\n })\n .unknown(true)\n .default({}),\n list: Joi.string().optional()\n })\n .unknown(true)\n\nconst componentSchemaV2 = componentSchema.keys({\n id: Joi.string().uuid().default(uuidV4())\n})\n\nconst nextSchema = Joi.object<Link>().keys({\n path: Joi.string().required(),\n condition: Joi.string().allow('').optional(),\n redirect: Joi.string().optional()\n})\n\nconst repeatOptions = Joi.object<RepeatOptions>().keys({\n name: Joi.string().required(),\n title: Joi.string().required()\n})\n\nconst repeatSchema = Joi.object<RepeatSchema>().keys({\n min: Joi.number().empty('').required(),\n max: Joi.number().empty('').required()\n})\n\nconst pageRepeatSchema = Joi.object<Repeat>().keys({\n options: repeatOptions.required(),\n schema: repeatSchema.required()\n})\n\nconst eventSchema = Joi.object<Event>().keys({\n type: Joi.string().allow('http').required(),\n options: Joi.object<EventOptions>().keys({\n method: Joi.string().allow('POST').required(),\n url: Joi.string()\n .uri({ scheme: ['http', 'https'] })\n .required()\n })\n})\n\nconst eventsSchema = Joi.object<Events>().keys({\n onLoad: eventSchema.optional(),\n onSave: eventSchema.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 */\nexport const pageSchema = Joi.object<Page>().keys({\n id: Joi.string().uuid().optional(),\n path: Joi.string().required().disallow('/status'),\n title: Joi.string().required(),\n section: Joi.string(),\n controller: Joi.string().optional(),\n components: Joi.array<ComponentDef>().items(componentSchema).unique('name'),\n repeat: Joi.when('controller', {\n is: Joi.string().valid('RepeatPageController').required(),\n then: pageRepeatSchema.required(),\n otherwise: Joi.any().strip()\n }),\n condition: Joi.string().allow('').optional(),\n next: Joi.array<Link>().items(nextSchema).default([]),\n events: eventsSchema.optional(),\n view: Joi.string().optional()\n})\n\n/**\n * V2 engine schema - used with new editor\n */\nexport const pageSchemaV2 = pageSchema.append({\n title: Joi.string().allow('').required()\n})\n\nexport const pageSchemaPayloadV2 = pageSchemaV2.keys({\n id: Joi.string().uuid().default(uuidV4()),\n components: Joi.array<ComponentDef>()\n .items(componentSchemaV2)\n .unique('name')\n .unique('id')\n})\n\nconst baseListItemSchema = Joi.object<Item>().keys({\n text: Joi.string().allow(''),\n description: Joi.string().allow('').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 .optional(),\n condition: Joi.string().allow('').optional()\n})\n\nconst stringListItemSchema = baseListItemSchema.append({\n value: Joi.string().required()\n})\n\nconst numberListItemSchema = baseListItemSchema.append({\n value: Joi.number().required()\n})\n\nconst listSchema = Joi.object<List>().keys({\n name: Joi.string().required(),\n title: Joi.string().required(),\n type: Joi.string().required().valid('string', 'number'),\n items: Joi.when('type', {\n is: 'string',\n then: Joi.array()\n .items(stringListItemSchema)\n .unique('text')\n .unique('value'),\n otherwise: Joi.array()\n .items(numberListItemSchema)\n .unique('text')\n .unique('value')\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 outputSchema = Joi.object<FormDefinition['output']>().keys({\n audience: Joi.string().valid('human', 'machine').required(),\n version: Joi.string().required()\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 engine: Joi.string().allow('V1', 'V2').default('V1'),\n name: Joi.string().allow('').optional(),\n feedback: feedbackSchema.optional(),\n startPage: Joi.string().optional(),\n pages: Joi.array<Page>()\n .required()\n .when('engine', {\n is: 'V2',\n then: Joi.array<Page>().items(pageSchemaV2),\n otherwise: Joi.array<Page>().items(pageSchema)\n })\n .unique('path')\n .unique('id', { ignoreUndefined: true }),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .unique('title')\n .required(),\n conditions: Joi.array<ConditionWrapper>()\n .items(conditionWrapperSchema)\n .unique('name')\n .unique('displayName'),\n lists: Joi.array<List>().items(listSchema).unique('name').unique('title'),\n metadata: Joi.object({ a: Joi.any() }).unknown().optional(),\n declaration: Joi.string().allow('').optional(),\n skipSummary: Joi.any().strip(),\n phaseBanner: phaseBannerSchema.optional(),\n outputEmail: Joi.string()\n .email({ tlds: { allow: ['uk'] } })\n .trim()\n .optional(),\n output: outputSchema.optional()\n })\n\nexport const formDefinitionSchemaV2Payload = formDefinitionSchema.keys({\n pages: Joi.array<Page>()\n .items(pageSchemaPayloadV2)\n .required()\n .unique('path')\n .unique('id', { ignoreUndefined: true })\n})\n\n// Maintain compatibility with legacy named export\n// E.g. `import { Schema } from '@defra/forms-model'`\nexport const Schema = formDefinitionSchema\n"],"mappings":"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","ignoreList":[]}
|
@@ -11,10 +11,12 @@ export declare const pageSchema: Joi.ObjectSchema<Page>;
|
|
11
11
|
* V2 engine schema - used with new editor
|
12
12
|
*/
|
13
13
|
export declare const pageSchemaV2: Joi.ObjectSchema<Page>;
|
14
|
+
export declare const pageSchemaPayloadV2: Joi.ObjectSchema<Page>;
|
14
15
|
/**
|
15
16
|
* Joi schema for `FormDefinition` interface
|
16
17
|
* @see {@link FormDefinition}
|
17
18
|
*/
|
18
19
|
export declare const formDefinitionSchema: Joi.ObjectSchema<FormDefinition>;
|
20
|
+
export declare const formDefinitionSchemaV2Payload: Joi.ObjectSchema<FormDefinition>;
|
19
21
|
export declare const Schema: Joi.ObjectSchema<FormDefinition>;
|
20
22
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAA8B,MAAM,KAAK,CAAA;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAA8B,MAAM,KAAK,CAAA;AAIhD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAU7D,OAAO,EAKL,KAAK,cAAc,EAInB,KAAK,IAAI,EAMV,MAAM,qCAAqC,CAAA;AAqE5C,eAAO,MAAM,eAAe,gCA+CZ,CAAA;AA0ChB;;;GAGG;AACH,eAAO,MAAM,UAAU,wBAgBrB,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,wBAEvB,CAAA;AAEF,eAAO,MAAM,mBAAmB,wBAM9B,CAAA;AAiEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,kCAmC7B,CAAA;AAEJ,eAAO,MAAM,6BAA6B,kCAMxC,CAAA;AAIF,eAAO,MAAM,MAAM,kCAAuB,CAAA"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@defra/forms-model",
|
3
|
-
"version": "3.0.
|
3
|
+
"version": "3.0.410",
|
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": {
|
@@ -22,7 +22,8 @@
|
|
22
22
|
},
|
23
23
|
"dependencies": {
|
24
24
|
"marked": "^15.0.6",
|
25
|
-
"slug": "^10.0.0"
|
25
|
+
"slug": "^10.0.0",
|
26
|
+
"uuid": "^11.1.0"
|
26
27
|
},
|
27
28
|
"devDependencies": {
|
28
29
|
"@types/slug": "^5.0.9",
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import Joi, { type LanguageMessages } from 'joi'
|
2
|
+
import { v4 as uuidV4 } from 'uuid'
|
2
3
|
|
3
4
|
import { ComponentType } from '~/src/components/enums.js'
|
4
5
|
import { type ComponentDef } from '~/src/components/types.js'
|
@@ -144,6 +145,10 @@ export const componentSchema = Joi.object<ComponentDef>()
|
|
144
145
|
})
|
145
146
|
.unknown(true)
|
146
147
|
|
148
|
+
const componentSchemaV2 = componentSchema.keys({
|
149
|
+
id: Joi.string().uuid().default(uuidV4())
|
150
|
+
})
|
151
|
+
|
147
152
|
const nextSchema = Joi.object<Link>().keys({
|
148
153
|
path: Joi.string().required(),
|
149
154
|
condition: Joi.string().allow('').optional(),
|
@@ -209,6 +214,14 @@ export const pageSchemaV2 = pageSchema.append({
|
|
209
214
|
title: Joi.string().allow('').required()
|
210
215
|
})
|
211
216
|
|
217
|
+
export const pageSchemaPayloadV2 = pageSchemaV2.keys({
|
218
|
+
id: Joi.string().uuid().default(uuidV4()),
|
219
|
+
components: Joi.array<ComponentDef>()
|
220
|
+
.items(componentSchemaV2)
|
221
|
+
.unique('name')
|
222
|
+
.unique('id')
|
223
|
+
})
|
224
|
+
|
212
225
|
const baseListItemSchema = Joi.object<Item>().keys({
|
213
226
|
text: Joi.string().allow(''),
|
214
227
|
description: Joi.string().allow('').optional(),
|
@@ -313,6 +326,14 @@ export const formDefinitionSchema = Joi.object<FormDefinition>()
|
|
313
326
|
output: outputSchema.optional()
|
314
327
|
})
|
315
328
|
|
329
|
+
export const formDefinitionSchemaV2Payload = formDefinitionSchema.keys({
|
330
|
+
pages: Joi.array<Page>()
|
331
|
+
.items(pageSchemaPayloadV2)
|
332
|
+
.required()
|
333
|
+
.unique('path')
|
334
|
+
.unique('id', { ignoreUndefined: true })
|
335
|
+
})
|
336
|
+
|
316
337
|
// Maintain compatibility with legacy named export
|
317
338
|
// E.g. `import { Schema } from '@defra/forms-model'`
|
318
339
|
export const Schema = formDefinitionSchema
|