@defra/forms-model 3.0.395 → 3.0.397

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.
@@ -89,6 +89,19 @@ const pageRepeatSchema = Joi.object().keys({
89
89
  options: repeatOptions.required(),
90
90
  schema: repeatSchema.required()
91
91
  });
92
+ const eventSchema = Joi.object().keys({
93
+ type: Joi.string().allow('http').required(),
94
+ options: Joi.object().keys({
95
+ method: Joi.string().allow('POST').required(),
96
+ url: Joi.string().uri({
97
+ scheme: ['http', 'https']
98
+ }).required()
99
+ })
100
+ });
101
+ const eventsSchema = Joi.object().keys({
102
+ onLoad: eventSchema,
103
+ onSave: eventSchema
104
+ });
92
105
 
93
106
  /**
94
107
  * `/status` is a special route for providing a user's application status.
@@ -106,7 +119,9 @@ const pageSchema = Joi.object().keys({
106
119
  otherwise: Joi.any().strip()
107
120
  }),
108
121
  condition: Joi.string().allow('').optional(),
109
- next: Joi.array().items(nextSchema)
122
+ next: Joi.array().items(nextSchema),
123
+ events: eventsSchema.optional(),
124
+ view: Joi.string().optional()
110
125
  });
111
126
  const baseListItemSchema = Joi.object().keys({
112
127
  text: Joi.string().allow(''),
@@ -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","when","is","valid","Details","Html","InsetText","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","pageSchema","disallow","section","controller","components","unique","repeat","any","strip","next","baseListItemSchema","text","description","conditional","stringListItemSchema","append","numberListItemSchema","listSchema","feedbackSchema","feedbackForm","url","emailAddress","email","tlds","phaseBannerSchema","phase","formDefinitionSchema","engine","feedback","startPage","pages","sections","lists","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","trim","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 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 type: Joi.string<ComponentType>().required(),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText\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 ),\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\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>().keys({\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)\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\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>().required().items(pageSchema).unique('path'),\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 })\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","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","when","is","valid","Details","Html","InsetText","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","baseListItemSchema","text","description","conditional","stringListItemSchema","append","numberListItemSchema","listSchema","feedbackSchema","feedbackForm","emailAddress","email","tlds","phaseBannerSchema","phase","formDefinitionSchema","engine","feedback","startPage","pages","sections","lists","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","trim","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 type: Joi.string<ComponentType>().required(),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText\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 ),\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,\n onSave: eventSchema\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>().keys({\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),\n events: eventsSchema.optional(),\n view: Joi.string().optional()\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\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>().required().items(pageSchema).unique('path'),\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 })\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 +1 @@
1
- {"version":3,"file":"types.js","names":["Engine"],"sources":["../../../../src/form/form-definition/types.ts"],"sourcesContent":["import { type ComponentDef } from '~/src/components/types.js'\nimport { type ConditionsModelData } from '~/src/conditions/types.js'\nimport { formDefinitionSchema } from '~/src/form/form-definition/index.js'\nimport { type ControllerPath, type ControllerType } from '~/src/pages/enums.js'\n\nexport enum Engine {\n V1 = 'V1',\n V2 = 'V2'\n}\n\nexport interface Link {\n path: string\n condition?: string\n redirect?: string\n}\n\nexport interface PageBase {\n title: string\n path: string\n condition?: string\n}\n\nexport interface RepeatOptions {\n name: string\n title: string\n}\n\nexport interface RepeatSchema {\n min: number\n max: number\n}\n\nexport interface Repeat {\n options: RepeatOptions\n schema: RepeatSchema\n}\n\nexport interface PageStart extends PageBase {\n path: ControllerPath.Start | string\n controller: ControllerType.Start\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageQuestion extends PageBase {\n controller?: ControllerType.Page\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageTerminal extends PageBase {\n controller?: ControllerType.Terminal\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageRepeat extends PageBase {\n controller: ControllerType.Repeat\n repeat: Repeat\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageFileUpload extends PageBase {\n controller: ControllerType.FileUpload\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageSummary extends PageBase {\n path: ControllerPath.Summary | string\n controller: ControllerType.Summary\n section?: undefined\n}\n\nexport interface PageStatus extends PageBase {\n path: ControllerPath.Status | string\n controller: ControllerType.Status\n section?: undefined\n}\n\nexport type Page =\n | PageStart\n | PageQuestion\n | PageTerminal\n | PageFileUpload\n | PageRepeat\n | PageSummary\n | PageStatus\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[] }\n condition?: string\n}\n\nexport interface List {\n name: string\n title: string\n type: ListTypeContent\n items: Item[]\n}\n\nexport type ListTypeOption = 'bulleted' | 'numbered'\nexport type ListTypeContent = 'string' | 'number' | 'boolean'\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 ConditionWrapper {\n name: string\n displayName: string\n value: ConditionsModelData\n}\n\n/**\n * Interface for `formDefinitionSchema` Joi schema\n * @see {@link formDefinitionSchema}\n */\nexport interface FormDefinition {\n engine?: Engine\n pages: Page[]\n conditions: ConditionWrapper[]\n lists: List[]\n sections: Section[]\n startPage?: string\n name?: string\n feedback?: Feedback\n phaseBanner?: PhaseBanner\n declaration?: string\n skipSummary?: never\n metadata?: Record<string, unknown>\n outputEmail?: string\n}\n"],"mappings":"AAKA,WAAYA,MAAM,0BAANA,MAAM;EAANA,MAAM;EAANA,MAAM;EAAA,OAANA,MAAM;AAAA;;AAmIlB;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":["Engine"],"sources":["../../../../src/form/form-definition/types.ts"],"sourcesContent":["import { type ComponentDef } from '~/src/components/types.js'\nimport { type ConditionsModelData } from '~/src/conditions/types.js'\nimport { formDefinitionSchema } from '~/src/form/form-definition/index.js'\nimport { type ControllerPath, type ControllerType } from '~/src/pages/enums.js'\n\nexport enum Engine {\n V1 = 'V1',\n V2 = 'V2'\n}\n\nexport interface Link {\n path: string\n condition?: string\n redirect?: string\n}\n\nexport interface EventOptions {\n method: string\n url: string\n}\n\nexport interface Event {\n type: string\n options: EventOptions\n}\n\nexport interface Events {\n onLoad: Event\n onSave: Event\n}\n\nexport interface PageBase {\n title: string\n path: string\n condition?: string\n events?: Events\n view?: string\n}\n\nexport interface RepeatOptions {\n name: string\n title: string\n}\n\nexport interface RepeatSchema {\n min: number\n max: number\n}\n\nexport interface Repeat {\n options: RepeatOptions\n schema: RepeatSchema\n}\n\nexport interface PageStart extends PageBase {\n path: ControllerPath.Start | string\n controller: ControllerType.Start\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageQuestion extends PageBase {\n controller?: ControllerType.Page\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageTerminal extends PageBase {\n controller?: ControllerType.Terminal\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageRepeat extends PageBase {\n controller: ControllerType.Repeat\n repeat: Repeat\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageFileUpload extends PageBase {\n controller: ControllerType.FileUpload\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageSummary extends PageBase {\n path: ControllerPath.Summary | string\n controller: ControllerType.Summary\n section?: undefined\n}\n\nexport interface PageStatus extends PageBase {\n path: ControllerPath.Status | string\n controller: ControllerType.Status\n section?: undefined\n}\n\nexport type Page =\n | PageStart\n | PageQuestion\n | PageTerminal\n | PageFileUpload\n | PageRepeat\n | PageSummary\n | PageStatus\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[] }\n condition?: string\n}\n\nexport interface List {\n name: string\n title: string\n type: ListTypeContent\n items: Item[]\n}\n\nexport type ListTypeOption = 'bulleted' | 'numbered'\nexport type ListTypeContent = 'string' | 'number' | 'boolean'\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 ConditionWrapper {\n name: string\n displayName: string\n value: ConditionsModelData\n}\n\n/**\n * Interface for `formDefinitionSchema` Joi schema\n * @see {@link formDefinitionSchema}\n */\nexport interface FormDefinition {\n engine?: Engine\n pages: Page[]\n conditions: ConditionWrapper[]\n lists: List[]\n sections: Section[]\n startPage?: string\n name?: string\n feedback?: Feedback\n phaseBanner?: PhaseBanner\n declaration?: string\n skipSummary?: never\n metadata?: Record<string, unknown>\n outputEmail?: string\n}\n"],"mappings":"AAKA,WAAYA,MAAM,0BAANA,MAAM;EAANA,MAAM;EAANA,MAAM;EAAA,OAANA,MAAM;AAAA;;AAoJlB;AACA;AACA;AACA","ignoreList":[]}
@@ -9,13 +9,14 @@ export const marked = new Marked({
9
9
  });
10
10
 
11
11
  /**
12
- * Convert markdown to HTML
12
+ * Convert markdown to HTML, escaping any HTML tags first
13
13
  */
14
14
  export function markdownToHtml(markdown) {
15
15
  if (markdown === undefined || markdown === null) {
16
16
  return '';
17
17
  }
18
- return marked.parse(markdown, {
18
+ const escaped = markdown.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
19
+ return marked.parse(escaped, {
19
20
  async: false
20
21
  });
21
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","names":["Marked","marked","breaks","gfm","markdownToHtml","markdown","undefined","parse","async"],"sources":["../../../src/utils/markdown.ts"],"sourcesContent":["import { Marked } from 'marked'\n\n/**\n * Marked instance (avoids global option/extension scope)\n */\nexport const marked = new Marked({\n breaks: true,\n gfm: true\n})\n\n/**\n * Convert markdown to HTML\n */\nexport function markdownToHtml(markdown?: string | null) {\n if (markdown === undefined || markdown === null) {\n return ''\n }\n\n return marked.parse(markdown, { async: false })\n}\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,QAAQ;;AAE/B;AACA;AACA;AACA,OAAO,MAAMC,MAAM,GAAG,IAAID,MAAM,CAAC;EAC/BE,MAAM,EAAE,IAAI;EACZC,GAAG,EAAE;AACP,CAAC,CAAC;;AAEF;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACC,QAAwB,EAAE;EACvD,IAAIA,QAAQ,KAAKC,SAAS,IAAID,QAAQ,KAAK,IAAI,EAAE;IAC/C,OAAO,EAAE;EACX;EAEA,OAAOJ,MAAM,CAACM,KAAK,CAACF,QAAQ,EAAE;IAAEG,KAAK,EAAE;EAAM,CAAC,CAAC;AACjD","ignoreList":[]}
1
+ {"version":3,"file":"markdown.js","names":["Marked","marked","breaks","gfm","markdownToHtml","markdown","undefined","escaped","replace","parse","async"],"sources":["../../../src/utils/markdown.ts"],"sourcesContent":["import { Marked } from 'marked'\n\n/**\n * Marked instance (avoids global option/extension scope)\n */\nexport const marked = new Marked({\n breaks: true,\n gfm: true\n})\n\n/**\n * Convert markdown to HTML, escaping any HTML tags first\n */\nexport function markdownToHtml(markdown?: string | null) {\n if (markdown === undefined || markdown === null) {\n return ''\n }\n\n const escaped = markdown\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n\n return marked.parse(escaped, { async: false })\n}\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,QAAQ;;AAE/B;AACA;AACA;AACA,OAAO,MAAMC,MAAM,GAAG,IAAID,MAAM,CAAC;EAC/BE,MAAM,EAAE,IAAI;EACZC,GAAG,EAAE;AACP,CAAC,CAAC;;AAEF;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACC,QAAwB,EAAE;EACvD,IAAIA,QAAQ,KAAKC,SAAS,IAAID,QAAQ,KAAK,IAAI,EAAE;IAC/C,OAAO,EAAE;EACX;EAEA,MAAME,OAAO,GAAGF,QAAQ,CACrBG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CACtBA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CACrBA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CACrBA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CACvBA,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;EAEzB,OAAOP,MAAM,CAACQ,KAAK,CAACF,OAAO,EAAE;IAAEG,KAAK,EAAE;EAAM,CAAC,CAAC;AAChD","ignoreList":[]}
@@ -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;AAGhD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAU7D,OAAO,EAEL,KAAK,cAAc,EAUpB,MAAM,qCAAqC,CAAA;AAqE5C,eAAO,MAAM,eAAe,gCA2CZ,CAAA;AAoGhB;;;GAGG;AACH,eAAO,MAAM,oBAAoB,kCA0B7B,CAAA;AAIJ,eAAO,MAAM,MAAM,kCAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAA8B,MAAM,KAAK,CAAA;AAGhD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAU7D,OAAO,EAKL,KAAK,cAAc,EAUpB,MAAM,qCAAqC,CAAA;AAqE5C,eAAO,MAAM,eAAe,gCA2CZ,CAAA;AAqHhB;;;GAGG;AACH,eAAO,MAAM,oBAAoB,kCA0B7B,CAAA;AAIJ,eAAO,MAAM,MAAM,kCAAuB,CAAA"}
@@ -10,10 +10,24 @@ export interface Link {
10
10
  condition?: string;
11
11
  redirect?: string;
12
12
  }
13
+ export interface EventOptions {
14
+ method: string;
15
+ url: string;
16
+ }
17
+ export interface Event {
18
+ type: string;
19
+ options: EventOptions;
20
+ }
21
+ export interface Events {
22
+ onLoad: Event;
23
+ onSave: Event;
24
+ }
13
25
  export interface PageBase {
14
26
  title: string;
15
27
  path: string;
16
28
  condition?: string;
29
+ events?: Events;
30
+ view?: string;
17
31
  }
18
32
  export interface RepeatOptions {
19
33
  name: string;
@@ -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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"}
@@ -4,7 +4,7 @@ import { Marked } from 'marked';
4
4
  */
5
5
  export declare const marked: Marked;
6
6
  /**
7
- * Convert markdown to HTML
7
+ * Convert markdown to HTML, escaping any HTML tags first
8
8
  */
9
9
  export declare function markdownToHtml(markdown?: string | null): string;
10
10
  //# sourceMappingURL=markdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;GAEG;AACH,eAAO,MAAM,MAAM,QAGjB,CAAA;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,UAMtD"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;GAEG;AACH,eAAO,MAAM,MAAM,QAGjB,CAAA;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,UAatD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.395",
3
+ "version": "3.0.397",
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": {
@@ -13,6 +13,9 @@ import {
13
13
  } from '~/src/conditions/types.js'
14
14
  import {
15
15
  type ConditionWrapper,
16
+ type Event,
17
+ type EventOptions,
18
+ type Events,
16
19
  type FormDefinition,
17
20
  type Item,
18
21
  type Link,
@@ -158,6 +161,21 @@ const pageRepeatSchema = Joi.object<Repeat>().keys({
158
161
  schema: repeatSchema.required()
159
162
  })
160
163
 
164
+ const eventSchema = Joi.object<Event>().keys({
165
+ type: Joi.string().allow('http').required(),
166
+ options: Joi.object<EventOptions>().keys({
167
+ method: Joi.string().allow('POST').required(),
168
+ url: Joi.string()
169
+ .uri({ scheme: ['http', 'https'] })
170
+ .required()
171
+ })
172
+ })
173
+
174
+ const eventsSchema = Joi.object<Events>().keys({
175
+ onLoad: eventSchema,
176
+ onSave: eventSchema
177
+ })
178
+
161
179
  /**
162
180
  * `/status` is a special route for providing a user's application status.
163
181
  * It should not be configured via the designer.
@@ -174,7 +192,9 @@ const pageSchema = Joi.object<Page>().keys({
174
192
  otherwise: Joi.any().strip()
175
193
  }),
176
194
  condition: Joi.string().allow('').optional(),
177
- next: Joi.array<Link>().items(nextSchema)
195
+ next: Joi.array<Link>().items(nextSchema),
196
+ events: eventsSchema.optional(),
197
+ view: Joi.string().optional()
178
198
  })
179
199
 
180
200
  const baseListItemSchema = Joi.object<Item>().keys({
@@ -14,10 +14,27 @@ export interface Link {
14
14
  redirect?: string
15
15
  }
16
16
 
17
+ export interface EventOptions {
18
+ method: string
19
+ url: string
20
+ }
21
+
22
+ export interface Event {
23
+ type: string
24
+ options: EventOptions
25
+ }
26
+
27
+ export interface Events {
28
+ onLoad: Event
29
+ onSave: Event
30
+ }
31
+
17
32
  export interface PageBase {
18
33
  title: string
19
34
  path: string
20
35
  condition?: string
36
+ events?: Events
37
+ view?: string
21
38
  }
22
39
 
23
40
  export interface RepeatOptions {
@@ -9,12 +9,19 @@ export const marked = new Marked({
9
9
  })
10
10
 
11
11
  /**
12
- * Convert markdown to HTML
12
+ * Convert markdown to HTML, escaping any HTML tags first
13
13
  */
14
14
  export function markdownToHtml(markdown?: string | null) {
15
15
  if (markdown === undefined || markdown === null) {
16
16
  return ''
17
17
  }
18
18
 
19
- return marked.parse(markdown, { async: false })
19
+ const escaped = markdown
20
+ .replace(/&/g, '&amp;')
21
+ .replace(/</g, '&lt;')
22
+ .replace(/>/g, '&gt;')
23
+ .replace(/"/g, '&quot;')
24
+ .replace(/'/g, '&#39;')
25
+
26
+ return marked.parse(escaped, { async: false })
20
27
  }