@defra/forms-model 3.0.493 → 3.0.495

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.
@@ -8,8 +8,8 @@ export let FormDefinitionErrorType = /*#__PURE__*/function (FormDefinitionErrorT
8
8
 
9
9
  // Enum for errors that can exist in a form definition
10
10
  export let FormDefinitionError = /*#__PURE__*/function (FormDefinitionError) {
11
- FormDefinitionError["UniquePagePath"] = "unique_page_path";
12
11
  FormDefinitionError["UniquePageId"] = "unique_page_id";
12
+ FormDefinitionError["UniquePagePath"] = "unique_page_path";
13
13
  FormDefinitionError["UniquePageComponentId"] = "unique_page_component_id";
14
14
  FormDefinitionError["UniquePageComponentName"] = "unique_page_component_name";
15
15
  FormDefinitionError["UniqueSectionName"] = "unique_section_name";
@@ -31,111 +31,89 @@ export let FormDefinitionError = /*#__PURE__*/function (FormDefinitionError) {
31
31
  FormDefinitionError["Other"] = "other";
32
32
  return FormDefinitionError;
33
33
  }({});
34
- export const N = Symbol('AnyNumber');
35
34
  // The errors that can exist in the form definition
36
35
  export const formDefinitionErrors = {
37
36
  [FormDefinitionError.UniquePagePath]: {
38
- path: ['pages', N],
39
37
  key: 'path',
40
38
  type: FormDefinitionErrorType.Unique
41
39
  },
42
40
  [FormDefinitionError.UniquePageId]: {
43
- path: ['pages', N],
44
41
  key: 'id',
45
42
  type: FormDefinitionErrorType.Unique
46
43
  },
47
44
  [FormDefinitionError.UniquePageComponentId]: {
48
- path: ['pages', N, 'components', N],
49
45
  key: 'id',
50
46
  type: FormDefinitionErrorType.Unique
51
47
  },
52
48
  [FormDefinitionError.UniquePageComponentName]: {
53
- path: ['pages', N, 'components', N],
54
49
  key: 'name',
55
50
  type: FormDefinitionErrorType.Unique
56
51
  },
57
52
  [FormDefinitionError.UniqueSectionName]: {
58
- path: ['sections', N],
59
53
  key: 'name',
60
54
  type: FormDefinitionErrorType.Unique
61
55
  },
62
56
  [FormDefinitionError.UniqueSectionTitle]: {
63
- path: ['sections', N],
64
57
  key: 'title',
65
58
  type: FormDefinitionErrorType.Unique
66
59
  },
67
60
  [FormDefinitionError.UniqueListId]: {
68
- path: ['lists', N],
69
61
  key: 'id',
70
62
  type: FormDefinitionErrorType.Unique
71
63
  },
72
64
  [FormDefinitionError.UniqueListTitle]: {
73
- path: ['lists', N],
74
65
  key: 'title',
75
66
  type: FormDefinitionErrorType.Unique
76
67
  },
77
68
  [FormDefinitionError.UniqueListName]: {
78
- path: ['lists', N],
79
69
  key: 'name',
80
70
  type: FormDefinitionErrorType.Unique
81
71
  },
82
72
  [FormDefinitionError.UniqueConditionDisplayName]: {
83
- path: ['conditions', N],
84
73
  key: 'displayName',
85
74
  type: FormDefinitionErrorType.Unique
86
75
  },
87
76
  [FormDefinitionError.UniqueConditionId]: {
88
- path: ['conditions', N],
89
77
  key: 'id',
90
78
  type: FormDefinitionErrorType.Unique
91
79
  },
92
80
  [FormDefinitionError.UniqueListItemId]: {
93
- path: ['lists', N, 'items', N],
94
81
  key: 'id',
95
82
  type: FormDefinitionErrorType.Unique
96
83
  },
97
84
  [FormDefinitionError.UniqueListItemText]: {
98
- path: ['lists', N, 'items', N],
99
85
  key: 'text',
100
86
  type: FormDefinitionErrorType.Unique
101
87
  },
102
88
  [FormDefinitionError.UniqueListItemValue]: {
103
- path: ['lists', N, 'items', N],
104
89
  key: 'value',
105
90
  type: FormDefinitionErrorType.Unique
106
91
  },
107
92
  [FormDefinitionError.RefPageCondition]: {
108
- path: ['pages', N, 'condition'],
109
93
  key: 'condition',
110
94
  type: FormDefinitionErrorType.Ref
111
95
  },
112
96
  [FormDefinitionError.RefConditionComponentId]: {
113
- path: ['conditions', N, 'items', N, 'componentId'],
114
97
  key: 'componentId',
115
98
  type: FormDefinitionErrorType.Ref
116
99
  },
117
100
  [FormDefinitionError.RefConditionListId]: {
118
- path: ['conditions', N, 'items', N, 'value', 'listId'],
119
101
  key: 'listId',
120
102
  type: FormDefinitionErrorType.Ref
121
103
  },
122
104
  [FormDefinitionError.RefConditionItemId]: {
123
- path: ['conditions', N, 'items', N, 'value', 'itemId'],
124
105
  key: 'itemId',
125
106
  type: FormDefinitionErrorType.Ref
126
107
  },
127
108
  [FormDefinitionError.RefConditionConditionId]: {
128
- path: ['conditions', N, 'items', N, 'conditionId'],
129
109
  key: 'conditionId',
130
110
  type: FormDefinitionErrorType.Ref
131
111
  },
132
112
  [FormDefinitionError.RefPageComponentList]: {
133
- path: ['pages', N, 'components', N, 'list'],
134
113
  key: 'list',
135
114
  type: FormDefinitionErrorType.Ref
136
115
  },
137
116
  [FormDefinitionError.Other]: {
138
- path: [],
139
117
  key: '',
140
118
  type: FormDefinitionErrorType.Type
141
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["FormDefinitionErrorType","FormDefinitionError","N","Symbol","formDefinitionErrors","UniquePagePath","path","key","type","Unique","UniquePageId","UniquePageComponentId","UniquePageComponentName","UniqueSectionName","UniqueSectionTitle","UniqueListId","UniqueListTitle","UniqueListName","UniqueConditionDisplayName","UniqueConditionId","UniqueListItemId","UniqueListItemText","UniqueListItemValue","RefPageCondition","Ref","RefConditionComponentId","RefConditionListId","RefConditionItemId","RefConditionConditionId","RefPageComponentList","Other","Type"],"sources":["../../../../src/form/form-manager/types.ts"],"sourcesContent":["import { type Context } from 'joi'\n\nimport { type ControllerType, type Repeat } from '~/src/index.js'\n\nexport interface PatchPageFields {\n title?: string\n path?: string\n controller?: ControllerType | null\n repeat?: Repeat\n condition?: string | null\n}\n\nexport interface AddComponentQueryOptions {\n prepend?: boolean\n}\n\n// Enum of error types that can be raised through validating the form definition\nexport enum FormDefinitionErrorType {\n Unique = 'unique', // Unique constraint\n Ref = 'ref', // Referential integrity\n Type = 'type' // General schema type error\n}\n\n// Enum for errors that can exist in a form definition\nexport enum FormDefinitionError {\n UniquePagePath = 'unique_page_path',\n UniquePageId = 'unique_page_id',\n UniquePageComponentId = 'unique_page_component_id',\n UniquePageComponentName = 'unique_page_component_name',\n UniqueSectionName = 'unique_section_name',\n UniqueSectionTitle = 'unique_section_title',\n UniqueListId = 'unique_list_id',\n UniqueListTitle = 'unique_list_title',\n UniqueListName = 'unique_list_name',\n UniqueConditionId = 'unique_condition_id',\n UniqueConditionDisplayName = 'unique_condition_displayname',\n UniqueListItemId = 'unique_list_item_id',\n UniqueListItemText = 'unique_list_item_text',\n UniqueListItemValue = 'unique_list_item_value',\n RefPageCondition = 'ref_page_condition',\n RefConditionComponentId = 'ref_condition_component_id',\n RefConditionListId = 'ref_condition_list_id',\n RefConditionItemId = 'ref_condition_item_id',\n RefConditionConditionId = 'ref_condition_condition_id',\n RefPageComponentList = 'ref_page_component_list',\n Other = 'other'\n}\n\nexport const N = Symbol('AnyNumber')\n\nexport type ErrorMatchPath = (string | typeof N)[]\nexport interface ErrorMatchValue {\n path: ErrorMatchPath\n key: string\n type: FormDefinitionErrorType\n}\n\nexport type FormDefinitionErrors = Record<FormDefinitionError, ErrorMatchValue>\n\n// The errors that can exist in the form definition\nexport const formDefinitionErrors: FormDefinitionErrors = {\n [FormDefinitionError.UniquePagePath]: {\n path: ['pages', N],\n key: 'path',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniquePageId]: {\n path: ['pages', N],\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniquePageComponentId]: {\n path: ['pages', N, 'components', N],\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniquePageComponentName]: {\n path: ['pages', N, 'components', N],\n key: 'name',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueSectionName]: {\n path: ['sections', N],\n key: 'name',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueSectionTitle]: {\n path: ['sections', N],\n key: 'title',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListId]: {\n path: ['lists', N],\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListTitle]: {\n path: ['lists', N],\n key: 'title',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListName]: {\n path: ['lists', N],\n key: 'name',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueConditionDisplayName]: {\n path: ['conditions', N],\n key: 'displayName',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueConditionId]: {\n path: ['conditions', N],\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListItemId]: {\n path: ['lists', N, 'items', N],\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListItemText]: {\n path: ['lists', N, 'items', N],\n key: 'text',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListItemValue]: {\n path: ['lists', N, 'items', N],\n key: 'value',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.RefPageCondition]: {\n path: ['pages', N, 'condition'],\n key: 'condition',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefConditionComponentId]: {\n path: ['conditions', N, 'items', N, 'componentId'],\n key: 'componentId',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefConditionListId]: {\n path: ['conditions', N, 'items', N, 'value', 'listId'],\n key: 'listId',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefConditionItemId]: {\n path: ['conditions', N, 'items', N, 'value', 'itemId'],\n key: 'itemId',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefConditionConditionId]: {\n path: ['conditions', N, 'items', N, 'conditionId'],\n key: 'conditionId',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefPageComponentList]: {\n path: ['pages', N, 'components', N, 'list'],\n key: 'list',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.Other]: {\n path: [],\n key: '',\n type: FormDefinitionErrorType.Type\n }\n}\n\nexport type FormDefinitionErrorCauseDetailPath = (string | number)[]\n\nexport interface FormDefinitionErrorCauseDetailUnique {\n path: FormDefinitionErrorCauseDetailPath\n pos: number\n dupePos: number\n}\n\nexport interface FormDefinitionErrorCauseDetailRef {\n path: FormDefinitionErrorCauseDetailPath\n}\n\nexport type FormDefinitionErrorCause =\n | {\n id: FormDefinitionError\n type: FormDefinitionErrorType.Unique\n message: string\n detail: FormDefinitionErrorCauseDetailUnique\n }\n | {\n id: FormDefinitionError\n type: FormDefinitionErrorType.Ref\n message: string\n detail: FormDefinitionErrorCauseDetailRef\n }\n | {\n id: FormDefinitionError\n type: FormDefinitionErrorType.Type\n message: string /* */\n detail: Context | undefined\n }\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":["FormDefinitionErrorType","FormDefinitionError","formDefinitionErrors","UniquePagePath","key","type","Unique","UniquePageId","UniquePageComponentId","UniquePageComponentName","UniqueSectionName","UniqueSectionTitle","UniqueListId","UniqueListTitle","UniqueListName","UniqueConditionDisplayName","UniqueConditionId","UniqueListItemId","UniqueListItemText","UniqueListItemValue","RefPageCondition","Ref","RefConditionComponentId","RefConditionListId","RefConditionItemId","RefConditionConditionId","RefPageComponentList","Other","Type"],"sources":["../../../../src/form/form-manager/types.ts"],"sourcesContent":["import { type Context } from 'joi'\n\nimport { type ControllerType, type Repeat } from '~/src/index.js'\n\nexport interface PatchPageFields {\n title?: string\n path?: string\n controller?: ControllerType | null\n repeat?: Repeat\n condition?: string | null\n}\n\nexport interface AddComponentQueryOptions {\n prepend?: boolean\n}\n\n// Enum of error types that can be raised through validating the form definition\nexport enum FormDefinitionErrorType {\n Unique = 'unique', // Unique constraint\n Ref = 'ref', // Referential integrity\n Type = 'type' // General schema type error\n}\n\n// Enum for errors that can exist in a form definition\nexport enum FormDefinitionError {\n UniquePageId = 'unique_page_id',\n UniquePagePath = 'unique_page_path',\n UniquePageComponentId = 'unique_page_component_id',\n UniquePageComponentName = 'unique_page_component_name',\n UniqueSectionName = 'unique_section_name',\n UniqueSectionTitle = 'unique_section_title',\n UniqueListId = 'unique_list_id',\n UniqueListTitle = 'unique_list_title',\n UniqueListName = 'unique_list_name',\n UniqueConditionId = 'unique_condition_id',\n UniqueConditionDisplayName = 'unique_condition_displayname',\n UniqueListItemId = 'unique_list_item_id',\n UniqueListItemText = 'unique_list_item_text',\n UniqueListItemValue = 'unique_list_item_value',\n RefPageCondition = 'ref_page_condition',\n RefConditionComponentId = 'ref_condition_component_id',\n RefConditionListId = 'ref_condition_list_id',\n RefConditionItemId = 'ref_condition_item_id',\n RefConditionConditionId = 'ref_condition_condition_id',\n RefPageComponentList = 'ref_page_component_list',\n Other = 'other'\n}\n\nexport interface ErrorMatchValue {\n key: string\n type: FormDefinitionErrorType\n}\n\nexport type FormDefinitionErrors = Record<FormDefinitionError, ErrorMatchValue>\n\n// The errors that can exist in the form definition\nexport const formDefinitionErrors: FormDefinitionErrors = {\n [FormDefinitionError.UniquePagePath]: {\n key: 'path',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniquePageId]: {\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniquePageComponentId]: {\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniquePageComponentName]: {\n key: 'name',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueSectionName]: {\n key: 'name',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueSectionTitle]: {\n key: 'title',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListId]: {\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListTitle]: {\n key: 'title',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListName]: {\n key: 'name',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueConditionDisplayName]: {\n key: 'displayName',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueConditionId]: {\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListItemId]: {\n key: 'id',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListItemText]: {\n key: 'text',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.UniqueListItemValue]: {\n key: 'value',\n type: FormDefinitionErrorType.Unique\n },\n [FormDefinitionError.RefPageCondition]: {\n key: 'condition',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefConditionComponentId]: {\n key: 'componentId',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefConditionListId]: {\n key: 'listId',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefConditionItemId]: {\n key: 'itemId',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefConditionConditionId]: {\n key: 'conditionId',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.RefPageComponentList]: {\n key: 'list',\n type: FormDefinitionErrorType.Ref\n },\n [FormDefinitionError.Other]: {\n key: '',\n type: FormDefinitionErrorType.Type\n }\n}\n\nexport type FormDefinitionErrorCauseDetailPath = (string | number)[]\n\nexport interface FormDefinitionErrorCauseDetailUnique {\n path: FormDefinitionErrorCauseDetailPath\n pos: number\n dupePos: number\n}\n\nexport interface FormDefinitionErrorCauseDetailRef {\n path: FormDefinitionErrorCauseDetailPath\n}\n\nexport type FormDefinitionErrorCause =\n | {\n id: FormDefinitionError\n type: FormDefinitionErrorType.Unique\n message: string\n detail: FormDefinitionErrorCauseDetailUnique\n }\n | {\n id: FormDefinitionError\n type: FormDefinitionErrorType.Ref\n message: string\n detail: FormDefinitionErrorCauseDetailRef\n }\n | {\n id: FormDefinitionError\n type: FormDefinitionErrorType.Type\n message: string /* */\n detail: Context | undefined\n }\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { ComponentType } from "../index.js";
1
+ import { ComponentType, hasFormField } from "../index.js";
2
2
  import { ControllerNames, ControllerTypes } from "./controller-types.js";
3
3
  import { ControllerType } from "./enums.js";
4
4
  import { PageTypes } from "./page-types.js";
@@ -110,4 +110,22 @@ export function omitFileUploadComponent(page) {
110
110
  }
111
111
  return false;
112
112
  }
113
+
114
+ /**
115
+ * Gets page title, or title of first question (if no page title set)
116
+ * @param {Page} page
117
+ * @returns {string}
118
+ */
119
+ export function getPageTitle(page) {
120
+ if (page.title !== '') {
121
+ return page.title;
122
+ }
123
+ if (hasComponentsEvenIfNoNext(page)) {
124
+ const firstComp = page.components.find(hasFormField);
125
+ if (firstComp) {
126
+ return firstComp.title;
127
+ }
128
+ }
129
+ return 'Page title unknown';
130
+ }
113
131
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["ComponentType","ControllerNames","ControllerTypes","ControllerType","PageTypes","getPageDefaults","page","nameOrPath","controller","Page","controllerNameFromPath","defaults","find","pageType","Error","structuredClone","hasComponents","hasNext","Array","isArray","components","hasComponentsEvenIfNoNext","undefined","hasFormComponents","Start","hasRepeater","Repeat","isControllerName","map","String","includes","Terminal","FileUpload","options","path","name","includesFileUploadField","some","component","type","FileUploadField","SHOW_REPEATER_CONTROLLERS","showRepeaterSettings","omitFileUploadComponent","length"],"sources":["../../../src/pages/helpers.ts"],"sourcesContent":["import { type ComponentDef } from '~/src/components/types.js'\nimport {\n type Link,\n type Page,\n type PageFileUpload,\n type PageQuestion,\n type PageRepeat\n} from '~/src/form/form-definition/types.js'\nimport { ComponentType } from '~/src/index.js'\nimport {\n ControllerNames,\n ControllerTypes\n} from '~/src/pages/controller-types.js'\nimport { ControllerType } from '~/src/pages/enums.js'\nimport { PageTypes } from '~/src/pages/page-types.js'\n\n/**\n * Return component defaults by type\n */\nexport function getPageDefaults<PageType extends Page>(\n page?: Pick<PageType, 'controller'>\n) {\n const nameOrPath = page?.controller ?? ControllerType.Page\n const controller = controllerNameFromPath(nameOrPath)\n\n const defaults = PageTypes.find(\n (pageType) => pageType.controller === controller\n )\n\n if (!defaults) {\n throw new Error(`Defaults not found for page type '${nameOrPath}'`)\n }\n\n return structuredClone(defaults) as PageType\n}\n\n/**\n * Check page has components\n */\nexport function hasComponents(\n page?: Partial<Page>\n): page is Extract<Page, { components: ComponentDef[] }> {\n return hasNext(page) && Array.isArray(page.components)\n}\n\n/**\n * Check if the page has components (the page can be any page type e.g. SummaryPage)\n */\nexport function hasComponentsEvenIfNoNext(\n page?: Partial<Page>\n): page is Extract<Page, { components: ComponentDef[] }> {\n return (\n page !== undefined && 'components' in page && Array.isArray(page.components)\n )\n}\n\n/**\n * Check page has form components\n */\nexport function hasFormComponents(\n page?: Partial<Page>\n): page is PageQuestion | PageFileUpload {\n const controller = controllerNameFromPath(page?.controller)\n return hasComponents(page) && controller !== ControllerType.Start\n}\n\n/**\n * Check page has repeater\n */\nexport function hasRepeater(page?: Partial<Page>): page is PageRepeat {\n return controllerNameFromPath(page?.controller) === ControllerType.Repeat\n}\n\n/**\n * Check for known page controller names\n */\nexport function isControllerName(\n nameOrPath?: ControllerType | string\n): nameOrPath is ControllerType {\n return !!nameOrPath && ControllerNames.map(String).includes(nameOrPath)\n}\n\n/**\n * Check page has next link\n */\nexport function hasNext(\n page?: Partial<Page>\n): page is Extract<Page, { next: Link[] }> {\n if (!page || !('next' in page)) {\n return false\n }\n\n const controller = controllerNameFromPath(page.controller)\n\n return (\n !controller ||\n controller === ControllerType.Start ||\n controller === ControllerType.Page ||\n controller === ControllerType.Terminal ||\n controller === ControllerType.FileUpload ||\n controller === ControllerType.Repeat\n )\n}\n\n/**\n * Check and optionally replace legacy path with controller name\n * @param {string} [nameOrPath] - Controller name or legacy controller path\n */\nexport function controllerNameFromPath(nameOrPath?: ControllerType | string) {\n if (isControllerName(nameOrPath)) {\n return nameOrPath\n }\n\n const options = ControllerTypes.find(({ path }) => path === nameOrPath)\n return options?.name\n}\n\nfunction includesFileUploadField(components: ComponentDef[]): boolean {\n return components.some(\n (component) => component.type === ComponentType.FileUploadField\n )\n}\n\nconst SHOW_REPEATER_CONTROLLERS = [ControllerType.Page, ControllerType.Repeat]\n\nexport function showRepeaterSettings(page: Page): boolean {\n if (page.controller && !SHOW_REPEATER_CONTROLLERS.includes(page.controller)) {\n return false\n }\n if (hasComponents(page) && includesFileUploadField(page.components)) {\n return false\n }\n return true\n}\n\n/**\n * High level check for whether file upload component should be omitted\n * @param { Page | undefined } page\n * @returns {boolean}\n */\nexport function omitFileUploadComponent(page: Page | undefined): boolean {\n if (page?.controller === ControllerType.Repeat) {\n return true\n }\n if (!hasComponents(page)) {\n return false\n }\n if (page.components.length > 1) {\n return true\n }\n if (includesFileUploadField(page.components)) {\n return true\n }\n return false\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"helpers.js","names":["ComponentType","hasFormField","ControllerNames","ControllerTypes","ControllerType","PageTypes","getPageDefaults","page","nameOrPath","controller","Page","controllerNameFromPath","defaults","find","pageType","Error","structuredClone","hasComponents","hasNext","Array","isArray","components","hasComponentsEvenIfNoNext","undefined","hasFormComponents","Start","hasRepeater","Repeat","isControllerName","map","String","includes","Terminal","FileUpload","options","path","name","includesFileUploadField","some","component","type","FileUploadField","SHOW_REPEATER_CONTROLLERS","showRepeaterSettings","omitFileUploadComponent","length","getPageTitle","title","firstComp"],"sources":["../../../src/pages/helpers.ts"],"sourcesContent":["import { type ComponentDef } from '~/src/components/types.js'\nimport {\n type Link,\n type Page,\n type PageFileUpload,\n type PageQuestion,\n type PageRepeat\n} from '~/src/form/form-definition/types.js'\nimport { ComponentType, hasFormField } from '~/src/index.js'\nimport {\n ControllerNames,\n ControllerTypes\n} from '~/src/pages/controller-types.js'\nimport { ControllerType } from '~/src/pages/enums.js'\nimport { PageTypes } from '~/src/pages/page-types.js'\n\n/**\n * Return component defaults by type\n */\nexport function getPageDefaults<PageType extends Page>(\n page?: Pick<PageType, 'controller'>\n) {\n const nameOrPath = page?.controller ?? ControllerType.Page\n const controller = controllerNameFromPath(nameOrPath)\n\n const defaults = PageTypes.find(\n (pageType) => pageType.controller === controller\n )\n\n if (!defaults) {\n throw new Error(`Defaults not found for page type '${nameOrPath}'`)\n }\n\n return structuredClone(defaults) as PageType\n}\n\n/**\n * Check page has components\n */\nexport function hasComponents(\n page?: Partial<Page>\n): page is Extract<Page, { components: ComponentDef[] }> {\n return hasNext(page) && Array.isArray(page.components)\n}\n\n/**\n * Check if the page has components (the page can be any page type e.g. SummaryPage)\n */\nexport function hasComponentsEvenIfNoNext(\n page?: Partial<Page>\n): page is Extract<Page, { components: ComponentDef[] }> {\n return (\n page !== undefined && 'components' in page && Array.isArray(page.components)\n )\n}\n\n/**\n * Check page has form components\n */\nexport function hasFormComponents(\n page?: Partial<Page>\n): page is PageQuestion | PageFileUpload {\n const controller = controllerNameFromPath(page?.controller)\n return hasComponents(page) && controller !== ControllerType.Start\n}\n\n/**\n * Check page has repeater\n */\nexport function hasRepeater(page?: Partial<Page>): page is PageRepeat {\n return controllerNameFromPath(page?.controller) === ControllerType.Repeat\n}\n\n/**\n * Check for known page controller names\n */\nexport function isControllerName(\n nameOrPath?: ControllerType | string\n): nameOrPath is ControllerType {\n return !!nameOrPath && ControllerNames.map(String).includes(nameOrPath)\n}\n\n/**\n * Check page has next link\n */\nexport function hasNext(\n page?: Partial<Page>\n): page is Extract<Page, { next: Link[] }> {\n if (!page || !('next' in page)) {\n return false\n }\n\n const controller = controllerNameFromPath(page.controller)\n\n return (\n !controller ||\n controller === ControllerType.Start ||\n controller === ControllerType.Page ||\n controller === ControllerType.Terminal ||\n controller === ControllerType.FileUpload ||\n controller === ControllerType.Repeat\n )\n}\n\n/**\n * Check and optionally replace legacy path with controller name\n * @param {string} [nameOrPath] - Controller name or legacy controller path\n */\nexport function controllerNameFromPath(nameOrPath?: ControllerType | string) {\n if (isControllerName(nameOrPath)) {\n return nameOrPath\n }\n\n const options = ControllerTypes.find(({ path }) => path === nameOrPath)\n return options?.name\n}\n\nfunction includesFileUploadField(components: ComponentDef[]): boolean {\n return components.some(\n (component) => component.type === ComponentType.FileUploadField\n )\n}\n\nconst SHOW_REPEATER_CONTROLLERS = [ControllerType.Page, ControllerType.Repeat]\n\nexport function showRepeaterSettings(page: Page): boolean {\n if (page.controller && !SHOW_REPEATER_CONTROLLERS.includes(page.controller)) {\n return false\n }\n if (hasComponents(page) && includesFileUploadField(page.components)) {\n return false\n }\n return true\n}\n\n/**\n * High level check for whether file upload component should be omitted\n * @param { Page | undefined } page\n * @returns {boolean}\n */\nexport function omitFileUploadComponent(page: Page | undefined): boolean {\n if (page?.controller === ControllerType.Repeat) {\n return true\n }\n if (!hasComponents(page)) {\n return false\n }\n if (page.components.length > 1) {\n return true\n }\n if (includesFileUploadField(page.components)) {\n return true\n }\n return false\n}\n\n/**\n * Gets page title, or title of first question (if no page title set)\n * @param {Page} page\n * @returns {string}\n */\nexport function getPageTitle(page: Page) {\n if (page.title !== '') {\n return page.title\n }\n\n if (hasComponentsEvenIfNoNext(page)) {\n const firstComp = page.components.find(hasFormField)\n if (firstComp) {\n return firstComp.title\n }\n }\n return 'Page title unknown'\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  export { ControllerNames, ControllerTypes } from "./controller-types.js";
2
2
  export { PageTypes } from "./page-types.js";
3
- export { controllerNameFromPath, getPageDefaults, hasComponents, hasComponentsEvenIfNoNext, hasFormComponents, hasNext, hasRepeater, isControllerName, omitFileUploadComponent, showRepeaterSettings } from "./helpers.js";
3
+ export { controllerNameFromPath, getPageDefaults, getPageTitle, hasComponents, hasComponentsEvenIfNoNext, hasFormComponents, hasNext, hasRepeater, isControllerName, omitFileUploadComponent, showRepeaterSettings } from "./helpers.js";
4
4
  export { ControllerPath, ControllerType } from "./enums.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ControllerNames","ControllerTypes","PageTypes","controllerNameFromPath","getPageDefaults","hasComponents","hasComponentsEvenIfNoNext","hasFormComponents","hasNext","hasRepeater","isControllerName","omitFileUploadComponent","showRepeaterSettings","ControllerPath","ControllerType"],"sources":["../../../src/pages/index.ts"],"sourcesContent":["export {\n ControllerNames,\n ControllerTypes\n} from '~/src/pages/controller-types.js'\n\nexport { PageTypes } from '~/src/pages/page-types.js'\n\nexport {\n controllerNameFromPath,\n getPageDefaults,\n hasComponents,\n hasComponentsEvenIfNoNext,\n hasFormComponents,\n hasNext,\n hasRepeater,\n isControllerName,\n omitFileUploadComponent,\n showRepeaterSettings\n} from '~/src/pages/helpers.js'\n\nexport { ControllerPath, ControllerType } from '~/src/pages/enums.js'\n"],"mappings":"AAAA,SACEA,eAAe,EACfC,eAAe;AAGjB,SAASC,SAAS;AAElB,SACEC,sBAAsB,EACtBC,eAAe,EACfC,aAAa,EACbC,yBAAyB,EACzBC,iBAAiB,EACjBC,OAAO,EACPC,WAAW,EACXC,gBAAgB,EAChBC,uBAAuB,EACvBC,oBAAoB;AAGtB,SAASC,cAAc,EAAEC,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["ControllerNames","ControllerTypes","PageTypes","controllerNameFromPath","getPageDefaults","getPageTitle","hasComponents","hasComponentsEvenIfNoNext","hasFormComponents","hasNext","hasRepeater","isControllerName","omitFileUploadComponent","showRepeaterSettings","ControllerPath","ControllerType"],"sources":["../../../src/pages/index.ts"],"sourcesContent":["export {\n ControllerNames,\n ControllerTypes\n} from '~/src/pages/controller-types.js'\n\nexport { PageTypes } from '~/src/pages/page-types.js'\n\nexport {\n controllerNameFromPath,\n getPageDefaults,\n getPageTitle,\n hasComponents,\n hasComponentsEvenIfNoNext,\n hasFormComponents,\n hasNext,\n hasRepeater,\n isControllerName,\n omitFileUploadComponent,\n showRepeaterSettings\n} from '~/src/pages/helpers.js'\n\nexport { ControllerPath, ControllerType } from '~/src/pages/enums.js'\n"],"mappings":"AAAA,SACEA,eAAe,EACfC,eAAe;AAGjB,SAASC,SAAS;AAElB,SACEC,sBAAsB,EACtBC,eAAe,EACfC,YAAY,EACZC,aAAa,EACbC,yBAAyB,EACzBC,iBAAiB,EACjBC,OAAO,EACPC,WAAW,EACXC,gBAAgB,EAChBC,uBAAuB,EACvBC,oBAAoB;AAGtB,SAASC,cAAc,EAAEC,cAAc","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AACA,OAAO,OAAkC,MAAM,KAAK,CAAA;AAIpD,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAEL,KAAK,eAAe,EAWrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAGL,KAAK,kBAAkB,EAIvB,KAAK,cAAc,EAGnB,KAAK,IAAI,EACT,KAAK,IAAI,EAET,KAAK,MAAM,EAIZ,MAAM,qCAAqC,CAAA;AAuN5C,eAAO,MAAM,qBAAqB,uCAmD9B,CAAA;AAoDJ,eAAO,MAAM,wBAAwB,0CAyBU,CAAA;AAE/C,eAAO,MAAM,eAAe,oCAkGZ,CAAA;AAEhB,eAAO,MAAM,iBAAiB,oCAaiB,CAAA;AAE/C,eAAO,MAAM,wBAAwB,oCASsB,CAAA;AAE3D,eAAO,MAAM,yBAAyB,oCAMpC,CAAA;AAEF,eAAO,MAAM,sBAAsB,oCAUjC,CAAA;AAoDF,eAAO,MAAM,gBAAgB,8BASzB,CAAA;AAyCJ,eAAO,MAAM,0BAA0B,sEAWmB,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4BAmDnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAgCiB,CAAA;AAE1C,eAAO,MAAM,mBAAmB,4BAgBkB,CAAA;AAwDlD,eAAO,MAAM,UAAU,4BAgCnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAIiB,CAAA;AAsD1C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,sCAsE7B,CAAA;AAEJ,eAAO,MAAM,sBAAsB,sCAwBY,CAAA;AAI/C,eAAO,MAAM,MAAM,sCAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AACA,OAAO,OAAkC,MAAM,KAAK,CAAA;AAIpD,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAEL,KAAK,eAAe,EAWrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAGL,KAAK,kBAAkB,EAIvB,KAAK,cAAc,EAGnB,KAAK,IAAI,EACT,KAAK,IAAI,EAET,KAAK,MAAM,EAIZ,MAAM,qCAAqC,CAAA;AA4N5C,eAAO,MAAM,qBAAqB,uCAoD9B,CAAA;AAoDJ,eAAO,MAAM,wBAAwB,0CAyBU,CAAA;AAE/C,eAAO,MAAM,eAAe,oCAkGZ,CAAA;AAEhB,eAAO,MAAM,iBAAiB,oCAciB,CAAA;AAE/C,eAAO,MAAM,wBAAwB,oCASsB,CAAA;AAE3D,eAAO,MAAM,yBAAyB,oCAMpC,CAAA;AAEF,eAAO,MAAM,sBAAsB,oCAUjC,CAAA;AAoDF,eAAO,MAAM,gBAAgB,8BASzB,CAAA;AAyCJ,eAAO,MAAM,0BAA0B,sEAWmB,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4BAmDnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAuCiB,CAAA;AAE1C,eAAO,MAAM,mBAAmB,4BAgBkB,CAAA;AAwDlD,eAAO,MAAM,UAAU,4BA8CnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAIiB,CAAA;AAsD1C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,sCA4E7B,CAAA;AAEJ,eAAO,MAAM,sBAAsB,sCA2CY,CAAA;AAI/C,eAAO,MAAM,MAAM,sCAAuB,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type Joi from 'joi';
2
+ import { type ValidationError } from 'joi';
3
+ import { FormDefinitionError, type FormDefinitionErrorCause } from '../../form/form-manager/types.js';
4
+ /**
5
+ * Checks and applies an `errorType` and also an `errorCode` for known errors
6
+ */
7
+ export declare const checkErrors: (formErrors: FormDefinitionError | FormDefinitionError[]) => (errors: Joi.ErrorReport[]) => Joi.ErrorReport[];
8
+ /**
9
+ * Get the custom errors from a form definition joi validation error
10
+ */
11
+ export declare function getErrors(validationError: ValidationError | undefined): FormDefinitionErrorCause[];
12
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/form/form-manager/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,KAAK,CAAA;AAE1C,OAAO,EACL,mBAAmB,EAGnB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAA;AAEzC;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,YAAY,mBAAmB,GAAG,mBAAmB,EAAE,MAItC,QAAQ,GAAG,CAAC,WAAW,EAAE,sBAuC3C,CAAA;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,eAAe,EAAE,eAAe,GAAG,SAAS,GAC3C,wBAAwB,EAAE,CA0C5B"}
@@ -16,8 +16,8 @@ export declare enum FormDefinitionErrorType {
16
16
  Type = "type"
17
17
  }
18
18
  export declare enum FormDefinitionError {
19
- UniquePagePath = "unique_page_path",
20
19
  UniquePageId = "unique_page_id",
20
+ UniquePagePath = "unique_page_path",
21
21
  UniquePageComponentId = "unique_page_component_id",
22
22
  UniquePageComponentName = "unique_page_component_name",
23
23
  UniqueSectionName = "unique_section_name",
@@ -38,10 +38,7 @@ export declare enum FormDefinitionError {
38
38
  RefPageComponentList = "ref_page_component_list",
39
39
  Other = "other"
40
40
  }
41
- export declare const N: unique symbol;
42
- export type ErrorMatchPath = (string | typeof N)[];
43
41
  export interface ErrorMatchValue {
44
- path: ErrorMatchPath;
45
42
  key: string;
46
43
  type: FormDefinitionErrorType;
47
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-manager/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEjE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAGD,oBAAY,uBAAuB;IACjC,MAAM,WAAW,CAAE,oBAAoB;IACvC,GAAG,QAAQ,CAAE,wBAAwB;IACrC,IAAI,SAAS;CACd;AAGD,oBAAY,mBAAmB;IAC7B,cAAc,qBAAqB;IACnC,YAAY,mBAAmB;IAC/B,qBAAqB,6BAA6B;IAClD,uBAAuB,+BAA+B;IACtD,iBAAiB,wBAAwB;IACzC,kBAAkB,yBAAyB;IAC3C,YAAY,mBAAmB;IAC/B,eAAe,sBAAsB;IACrC,cAAc,qBAAqB;IACnC,iBAAiB,wBAAwB;IACzC,0BAA0B,iCAAiC;IAC3D,gBAAgB,wBAAwB;IACxC,kBAAkB,0BAA0B;IAC5C,mBAAmB,2BAA2B;IAC9C,gBAAgB,uBAAuB;IACvC,uBAAuB,+BAA+B;IACtD,kBAAkB,0BAA0B;IAC5C,kBAAkB,0BAA0B;IAC5C,uBAAuB,+BAA+B;IACtD,oBAAoB,4BAA4B;IAChD,KAAK,UAAU;CAChB;AAED,eAAO,MAAM,CAAC,eAAsB,CAAA;AAEpC,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAA;AAClD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,uBAAuB,CAAA;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;AAG/E,eAAO,MAAM,oBAAoB,EAAE,oBA0GlC,CAAA;AAED,MAAM,MAAM,kCAAkC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;AAEpE,MAAM,WAAW,oCAAoC;IACnD,IAAI,EAAE,kCAAkC,CAAA;IACxC,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,kCAAkC,CAAA;CACzC;AAED,MAAM,MAAM,wBAAwB,GAChC;IACE,EAAE,EAAE,mBAAmB,CAAA;IACvB,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oCAAoC,CAAA;CAC7C,GACD;IACE,EAAE,EAAE,mBAAmB,CAAA;IACvB,IAAI,EAAE,uBAAuB,CAAC,GAAG,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,iCAAiC,CAAA;CAC1C,GACD;IACE,EAAE,EAAE,mBAAmB,CAAA;IACvB,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAA;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;CAC5B,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-manager/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEjE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAGD,oBAAY,uBAAuB;IACjC,MAAM,WAAW,CAAE,oBAAoB;IACvC,GAAG,QAAQ,CAAE,wBAAwB;IACrC,IAAI,SAAS;CACd;AAGD,oBAAY,mBAAmB;IAC7B,YAAY,mBAAmB;IAC/B,cAAc,qBAAqB;IACnC,qBAAqB,6BAA6B;IAClD,uBAAuB,+BAA+B;IACtD,iBAAiB,wBAAwB;IACzC,kBAAkB,yBAAyB;IAC3C,YAAY,mBAAmB;IAC/B,eAAe,sBAAsB;IACrC,cAAc,qBAAqB;IACnC,iBAAiB,wBAAwB;IACzC,0BAA0B,iCAAiC;IAC3D,gBAAgB,wBAAwB;IACxC,kBAAkB,0BAA0B;IAC5C,mBAAmB,2BAA2B;IAC9C,gBAAgB,uBAAuB;IACvC,uBAAuB,+BAA+B;IACtD,kBAAkB,0BAA0B;IAC5C,kBAAkB,0BAA0B;IAC5C,uBAAuB,+BAA+B;IACtD,oBAAoB,4BAA4B;IAChD,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,uBAAuB,CAAA;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;AAG/E,eAAO,MAAM,oBAAoB,EAAE,oBAqFlC,CAAA;AAED,MAAM,MAAM,kCAAkC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;AAEpE,MAAM,WAAW,oCAAoC;IACnD,IAAI,EAAE,kCAAkC,CAAA;IACxC,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,kCAAkC,CAAA;CACzC;AAED,MAAM,MAAM,wBAAwB,GAChC;IACE,EAAE,EAAE,mBAAmB,CAAA;IACvB,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oCAAoC,CAAA;CAC7C,GACD;IACE,EAAE,EAAE,mBAAmB,CAAA;IACvB,IAAI,EAAE,uBAAuB,CAAC,GAAG,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,iCAAiC,CAAA;CAC1C,GACD;IACE,EAAE,EAAE,mBAAmB,CAAA;IACvB,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAA;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;CAC5B,CAAA"}
@@ -47,4 +47,10 @@ export declare function showRepeaterSettings(page: Page): boolean;
47
47
  * @returns {boolean}
48
48
  */
49
49
  export declare function omitFileUploadComponent(page: Page | undefined): boolean;
50
+ /**
51
+ * Gets page title, or title of first question (if no page title set)
52
+ * @param {Page} page
53
+ * @returns {string}
54
+ */
55
+ export declare function getPageTitle(page: Page): string;
50
56
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/pages/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EACL,KAAK,IAAI,EACT,KAAK,IAAI,EACT,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,qCAAqC,CAAA;AAM5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,SAAS,IAAI,EACnD,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,GAaC,QAAQ,CAC7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACnB,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACnB,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAIvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACnB,IAAI,IAAI,YAAY,GAAG,cAAc,CAGvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,UAAU,CAEpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,CAAC,EAAE,cAAc,GAAG,MAAM,GACnC,UAAU,IAAI,cAAc,CAE9B;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACnB,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAezC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,MAAM,8BAO1E;AAUD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAcvE"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/pages/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EACL,KAAK,IAAI,EACT,KAAK,IAAI,EACT,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,qCAAqC,CAAA;AAM5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,SAAS,IAAI,EACnD,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,GAaC,QAAQ,CAC7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACnB,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACnB,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAIvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACnB,IAAI,IAAI,YAAY,GAAG,cAAc,CAGvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,UAAU,CAEpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,CAAC,EAAE,cAAc,GAAG,MAAM,GACnC,UAAU,IAAI,cAAc,CAE9B;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACnB,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAezC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,MAAM,8BAO1E;AAUD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAcvE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,UAYtC"}
@@ -1,5 +1,5 @@
1
1
  export { ControllerNames, ControllerTypes } from '../pages/controller-types.js';
2
2
  export { PageTypes } from '../pages/page-types.js';
3
- export { controllerNameFromPath, getPageDefaults, hasComponents, hasComponentsEvenIfNoNext, hasFormComponents, hasNext, hasRepeater, isControllerName, omitFileUploadComponent, showRepeaterSettings } from '../pages/helpers.js';
3
+ export { controllerNameFromPath, getPageDefaults, getPageTitle, hasComponents, hasComponentsEvenIfNoNext, hasFormComponents, hasNext, hasRepeater, isControllerName, omitFileUploadComponent, showRepeaterSettings } from '../pages/helpers.js';
4
4
  export { ControllerPath, ControllerType } from '../pages/enums.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EAChB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,yBAAyB,EACzB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EAChB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,yBAAyB,EACzB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.493",
3
+ "version": "3.0.495",
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
  "types": "dist/types/index.d.ts",
@@ -41,6 +41,8 @@ import {
41
41
  type RepeatSchema,
42
42
  type Section
43
43
  } from '~/src/form/form-definition/types.js'
44
+ import { checkErrors } from '~/src/form/form-manager/errors.js'
45
+ import { FormDefinitionError } from '~/src/form/form-manager/types.js'
44
46
  import { ControllerType } from '~/src/pages/enums.js'
45
47
  import { hasComponents } from '~/src/pages/helpers.js'
46
48
 
@@ -148,7 +150,8 @@ const conditionListItemRefDataSchemaV2 =
148
150
  is: Joi.exist(),
149
151
  then: Joi.valid(listIdRef)
150
152
  })
151
- .description('The id of the list'),
153
+ .description('The id of the list')
154
+ .error(checkErrors(FormDefinitionError.RefConditionListId)),
152
155
  itemId: Joi.string()
153
156
  .trim()
154
157
  .when('/lists', {
@@ -157,6 +160,7 @@ const conditionListItemRefDataSchemaV2 =
157
160
  })
158
161
  .required()
159
162
  .description('The id of the list item')
163
+ .error(checkErrors(FormDefinitionError.RefConditionItemId))
160
164
  })
161
165
 
162
166
  const relativeDateValueDataSchemaV2 = Joi.object<RelativeDateValueDataV2>()
@@ -230,6 +234,7 @@ const conditionRefDataSchemaV2 = Joi.object<ConditionRefDataV2>()
230
234
  then: Joi.valid(conditionIdRef)
231
235
  })
232
236
  .description('Name of the referenced condition')
237
+ .error(checkErrors(FormDefinitionError.RefConditionConditionId))
233
238
  })
234
239
 
235
240
  const conditionSchema = Joi.object<ConditionData>()
@@ -270,7 +275,8 @@ export const conditionDataSchemaV2 = Joi.object<ConditionDataV2>()
270
275
  })
271
276
  .description(
272
277
  'Reference to the component id being evaluated in this condition'
273
- ),
278
+ )
279
+ .error(checkErrors(FormDefinitionError.RefConditionComponentId)),
274
280
  operator: Joi.string()
275
281
  .trim()
276
282
  .valid(...Object.values(OperatorName))
@@ -497,6 +503,7 @@ export const componentSchemaV2 = componentSchema
497
503
  .description(
498
504
  'List id reference to a predefined list of options for select components'
499
505
  )
506
+ .error(checkErrors(FormDefinitionError.RefPageComponentList))
500
507
  })
501
508
  .description('Component schema for V2 forms')
502
509
 
@@ -638,8 +645,8 @@ export const pageUploadComponentsSchema = Joi.array<
638
645
  fileUploadComponentSchema.required(),
639
646
  contentComponentSchema.optional()
640
647
  )
641
- .unique('name')
642
648
  .unique('id')
649
+ .unique('name')
643
650
  .min(1)
644
651
  .max(2)
645
652
  .description('Components allowed on Page Upload schema')
@@ -723,9 +730,15 @@ export const pageSchemaV2 = pageSchema
723
730
  ],
724
731
  otherwise: Joi.array<ComponentDef>()
725
732
  .items(componentSchemaV2)
726
- .unique('name')
727
733
  .unique('id')
734
+ .unique('name')
728
735
  .description('Components schema for V2 forms')
736
+ .error(
737
+ checkErrors([
738
+ FormDefinitionError.UniquePageComponentId,
739
+ FormDefinitionError.UniquePageComponentName
740
+ ])
741
+ )
729
742
  }),
730
743
  condition: Joi.string()
731
744
  .trim()
@@ -735,6 +748,7 @@ export const pageSchemaV2 = pageSchema
735
748
  })
736
749
  .optional()
737
750
  .description('Optional condition that determines if this page is shown')
751
+ .error(checkErrors(FormDefinitionError.RefPageCondition))
738
752
  })
739
753
  .description('Page schema for V2 forms')
740
754
 
@@ -749,8 +763,8 @@ export const pagePayloadSchemaV2 = pageSchemaV2
749
763
  ],
750
764
  otherwise: Joi.array<ComponentDef>()
751
765
  .items(componentPayloadSchemaV2)
752
- .unique('name')
753
766
  .unique('id')
767
+ .unique('name')
754
768
  .description('Components schema for V2 forms')
755
769
  })
756
770
  })
@@ -834,13 +848,27 @@ export const listSchema = Joi.object<List>()
834
848
  .unique('id')
835
849
  .unique('text')
836
850
  .unique('value')
837
- .description('Array of items with string values'),
851
+ .description('Array of items with string values')
852
+ .error(
853
+ checkErrors([
854
+ FormDefinitionError.UniqueListItemId,
855
+ FormDefinitionError.UniqueListItemText,
856
+ FormDefinitionError.UniqueListItemValue
857
+ ])
858
+ ),
838
859
  otherwise: Joi.array()
839
860
  .items(numberListItemSchema)
840
861
  .unique('id')
841
862
  .unique('text')
842
863
  .unique('value')
843
864
  .description('Array of items with numeric values')
865
+ .error(
866
+ checkErrors([
867
+ FormDefinitionError.UniqueListItemId,
868
+ FormDefinitionError.UniqueListItemText,
869
+ FormDefinitionError.UniqueListItemValue
870
+ ])
871
+ )
844
872
  })
845
873
  })
846
874
 
@@ -945,7 +973,13 @@ export const formDefinitionSchema = Joi.object<FormDefinition>()
945
973
  .unique('name')
946
974
  .unique('title')
947
975
  .required()
948
- .description('Sections grouping related pages together'),
976
+ .description('Sections grouping related pages together')
977
+ .error(
978
+ checkErrors([
979
+ FormDefinitionError.UniqueSectionName,
980
+ FormDefinitionError.UniqueSectionTitle
981
+ ])
982
+ ),
949
983
  conditions: Joi.array<ConditionWrapper>()
950
984
  .items(conditionWrapperSchema)
951
985
  .unique('name')
@@ -990,20 +1024,39 @@ export const formDefinitionV2Schema = formDefinitionSchema
990
1024
  pages: Joi.array<Page>()
991
1025
  .items(pageSchemaV2)
992
1026
  .required()
993
- .unique('path')
994
1027
  .unique('id')
995
- .description('Pages schema for V2 forms'),
1028
+ .unique('path')
1029
+ .description('Pages schema for V2 forms')
1030
+ .error(
1031
+ checkErrors([
1032
+ FormDefinitionError.UniquePageId,
1033
+ FormDefinitionError.UniquePagePath
1034
+ ])
1035
+ ),
996
1036
  lists: Joi.array<List>()
997
1037
  .items(listSchemaV2)
1038
+ .unique('id')
998
1039
  .unique('name')
999
1040
  .unique('title')
1000
- .unique('id')
1001
- .description('Lists schema for V2 forms'),
1041
+ .description('Lists schema for V2 forms')
1042
+ .error(
1043
+ checkErrors([
1044
+ FormDefinitionError.UniqueListId,
1045
+ FormDefinitionError.UniqueListName,
1046
+ FormDefinitionError.UniqueListTitle
1047
+ ])
1048
+ ),
1002
1049
  conditions: Joi.array<ConditionWrapperV2>()
1003
1050
  .items(conditionWrapperSchemaV2)
1004
1051
  .unique('id')
1005
1052
  .unique('displayName')
1006
1053
  .description('Named conditions used for form logic')
1054
+ .error(
1055
+ checkErrors([
1056
+ FormDefinitionError.UniqueConditionId,
1057
+ FormDefinitionError.UniqueConditionDisplayName
1058
+ ])
1059
+ )
1007
1060
  })
1008
1061
  .description('Form definition schema for V2')
1009
1062