@defra/forms-engine-plugin 2.1.5 → 2.1.7
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/.server/server/plugins/engine/components/ComponentBase.d.ts +2 -2
- package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.d.ts +2 -2
- package/.server/server/plugins/engine/components/ComponentCollection.js +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/TelephoneNumberField.js +1 -1
- package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/YesNoField.js +1 -1
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
- package/.server/server/plugins/engine/components/{helpers.d.ts → helpers/components.d.ts} +3 -10
- package/.server/server/plugins/engine/components/{helpers.js → helpers/components.js} +16 -29
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -0
- package/.server/server/plugins/engine/components/helpers/index.d.ts +11 -0
- package/.server/server/plugins/engine/components/helpers/index.js +15 -0
- package/.server/server/plugins/engine/components/helpers/index.js.map +1 -0
- package/.server/server/plugins/engine/helpers.d.ts +1 -1
- package/.server/server/plugins/engine/helpers.js +1 -1
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.d.ts +2 -2
- package/.server/server/plugins/engine/models/FormModel.js +2 -2
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.js +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/models/types.d.ts +2 -2
- package/.server/server/plugins/engine/models/types.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +1 -1
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js +1 -1
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/index.d.ts +9 -0
- package/.server/server/plugins/engine/pageControllers/helpers/index.js +15 -0
- package/.server/server/plugins/engine/pageControllers/helpers/index.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/{helpers.d.ts → helpers/pages.d.ts} +1 -10
- package/.server/server/plugins/engine/pageControllers/{helpers.js → helpers/pages.js} +2 -17
- package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -0
- package/.server/server/plugins/engine/routes/index.d.ts +1 -1
- package/.server/server/plugins/engine/routes/index.js.map +1 -1
- package/.server/server/plugins/engine/routes/questions.js.map +1 -1
- package/.server/server/plugins/engine/services/notifyService.js +1 -1
- package/.server/server/plugins/engine/services/notifyService.js.map +1 -1
- package/.server/server/plugins/engine/types/enums.d.ts +13 -0
- package/.server/server/plugins/engine/types/enums.js +17 -0
- package/.server/server/plugins/engine/types/enums.js.map +1 -0
- package/.server/server/plugins/engine/types/index.d.ts +2 -1
- package/.server/server/plugins/engine/types/index.js +2 -1
- package/.server/server/plugins/engine/types/index.js.map +1 -1
- package/.server/server/plugins/engine/types/schema.js +1 -1
- package/.server/server/plugins/engine/types/schema.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +5 -17
- package/.server/server/plugins/engine/types.js +1 -16
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.js +2 -2
- package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.test.js +2 -2
- package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
- package/package.json +1 -1
- package/src/server/plugins/engine/components/AutocompleteField.test.ts +1 -1
- package/src/server/plugins/engine/components/CheckboxesField.test.ts +1 -1
- package/src/server/plugins/engine/components/ComponentBase.ts +2 -2
- package/src/server/plugins/engine/components/ComponentCollection.ts +2 -2
- package/src/server/plugins/engine/components/DatePartsField.test.ts +1 -1
- package/src/server/plugins/engine/components/Details.test.ts +1 -1
- package/src/server/plugins/engine/components/EmailAddressField.test.ts +1 -1
- package/src/server/plugins/engine/components/FileUploadField.test.ts +2 -2
- package/src/server/plugins/engine/components/Html.test.ts +1 -1
- package/src/server/plugins/engine/components/InsetText.test.ts +1 -1
- package/src/server/plugins/engine/components/List.test.ts +1 -1
- package/src/server/plugins/engine/components/Markdown.test.ts +1 -1
- package/src/server/plugins/engine/components/MonthYearField.test.ts +1 -1
- package/src/server/plugins/engine/components/MultilineTextField.test.ts +1 -1
- package/src/server/plugins/engine/components/NumberField.test.ts +1 -1
- package/src/server/plugins/engine/components/RadiosField.test.ts +1 -1
- package/src/server/plugins/engine/components/SelectField.test.ts +1 -1
- package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +1 -1
- package/src/server/plugins/engine/components/TelephoneNumberField.ts +1 -1
- package/src/server/plugins/engine/components/TextField.test.ts +1 -1
- package/src/server/plugins/engine/components/UkAddressField.test.ts +1 -1
- package/src/server/plugins/engine/components/YesNoField.test.ts +1 -1
- package/src/server/plugins/engine/components/YesNoField.ts +1 -1
- package/src/server/plugins/engine/components/{helpers.ts → helpers/components.ts} +41 -77
- package/src/server/plugins/engine/components/{helpers.test.ts → helpers/helpers.test.ts} +1 -1
- package/src/server/plugins/engine/components/helpers/index.ts +38 -0
- package/src/server/plugins/engine/helpers.test.ts +1 -1
- package/src/server/plugins/engine/helpers.ts +2 -2
- package/src/server/plugins/engine/models/FormModel.ts +2 -2
- package/src/server/plugins/engine/models/SummaryViewModel.test.ts +1 -1
- package/src/server/plugins/engine/models/SummaryViewModel.ts +2 -2
- package/src/server/plugins/engine/models/types.ts +4 -4
- package/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +2 -2
- package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +1 -1
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -4
- package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +1 -1
- package/src/server/plugins/engine/outputFormatters/machine/v1.ts +1 -1
- package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +1 -1
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +1 -1
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +1 -1
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +1 -1
- package/src/server/plugins/engine/pageControllers/{helpers.test.ts → helpers/helpers.test.ts} +2 -2
- package/src/server/plugins/engine/pageControllers/helpers/index.ts +20 -0
- package/src/server/plugins/engine/pageControllers/{helpers.ts → helpers/pages.ts} +1 -22
- package/src/server/plugins/engine/routes/index.ts +1 -1
- package/src/server/plugins/engine/routes/questions.test.ts +1 -1
- package/src/server/plugins/engine/routes/questions.ts +1 -1
- package/src/server/plugins/engine/services/notifyService.test.ts +1 -1
- package/src/server/plugins/engine/services/notifyService.ts +1 -1
- package/src/server/plugins/engine/types/enums.ts +15 -0
- package/src/server/plugins/engine/types/index.ts +2 -5
- package/src/server/plugins/engine/types/schema.test.ts +1 -1
- package/src/server/plugins/engine/types/schema.ts +1 -1
- package/src/server/plugins/engine/types.ts +12 -18
- package/src/server/plugins/nunjucks/filters/answer.js +2 -2
- package/src/server/plugins/nunjucks/filters/answer.test.js +7 -4
- package/.server/server/plugins/engine/components/helpers.js.map +0 -1
- package/.server/server/plugins/engine/pageControllers/helpers.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["UploadStatus","FileStatus","FormAdapterSubmissionSchemaVersion"],"sources":["../../../../src/server/plugins/engine/types.ts"],"sourcesContent":["import {\n type ComponentDef,\n type Event,\n type FormDefinition,\n type FormMetadata,\n type Item,\n type List,\n type Page\n} from '@defra/forms-model'\nimport { type PluginProperties, type Request } from '@hapi/hapi'\nimport { type JoiExpression, type ValidationErrorItem } from 'joi'\n\nimport { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { type Component } from '~/src/server/plugins/engine/components/helpers.js'\nimport {\n type BackLink,\n type ComponentText,\n type ComponentViewModel\n} from '~/src/server/plugins/engine/components/types.js'\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'\nimport { type ViewContext } from '~/src/server/plugins/nunjucks/types.js'\nimport {\n type FormAction,\n type FormParams,\n type FormRequest,\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\nimport { type RequestOptions } from '~/src/server/services/httpService.js'\nimport { type Services } from '~/src/server/types.js'\n\ntype RequestType = Request | FormRequest | FormRequestPayload\n\n/**\n * Form submission state stores the following in Redis:\n * Props containing user's submitted values as `{ [inputId]: value }` or as `{ [sectionName]: { [inputName]: value } }`\n * a) . e.g:\n * ```ts\n * {\n * _C9PRHmsgt: 'Ben',\n * WfLk9McjzX: 'Music',\n * IK7jkUFCBL: 'Royal Academy of Music'\n * }\n * ```\n *\n * b)\n * ```ts\n * {\n * checkBeforeYouStart: { ukPassport: true },\n * applicantDetails: {\n * numberOfApplicants: 1,\n * phoneNumber: '77777777',\n * emailAddress: 'aaa@aaa.com'\n * },\n * applicantOneDetails: {\n * firstName: 'a',\n * middleName: 'a',\n * lastName: 'a',\n * address: { addressLine1: 'a', addressLine2: 'a', town: 'a', postcode: 'a' }\n * }\n * }\n * ```\n */\n\n/**\n * Form submission state\n */\nexport type FormSubmissionState = {\n upload?: Record<string, TempFileState>\n} & FormState\n\nexport interface FormSubmissionError\n extends Pick<ValidationErrorItem, 'context' | 'path'> {\n href: string // e.g: '#dateField__day'\n name: string // e.g: 'dateField__day'\n text: string // e.g: 'Date field must be a real date'\n}\n\nexport interface FormPayloadParams {\n action?: FormAction\n confirm?: true\n crumb?: string\n itemId?: string\n}\n\n/**\n * Form POST for question pages\n * (after Joi has converted value types)\n */\nexport type FormPayload = FormPayloadParams & Partial<Record<string, FormValue>>\n\nexport type FormValue =\n | Item['value']\n | Item['value'][]\n | UploadState\n | RepeatListState\n | undefined\n\nexport type FormState = Partial<Record<string, FormStateValue>>\nexport type FormStateValue = Exclude<FormValue, undefined> | null\n\nexport interface FormValidationResult<\n ValueType extends FormPayload | FormSubmissionState\n> {\n value: ValueType\n errors: FormSubmissionError[] | undefined\n}\n\nexport interface FormContext {\n /**\n * Evaluation form state only (filtered by visited paths),\n * with values formatted for condition evaluation using\n * {@link FormComponent.getContextValueFromState}\n */\n evaluationState: FormState\n\n /**\n * Relevant form state only (filtered by visited paths)\n */\n relevantState: FormState\n\n /**\n * Relevant pages only (filtered by visited paths)\n */\n relevantPages: PageControllerClass[]\n\n /**\n * Form submission payload (single page)\n */\n payload: FormPayload\n\n /**\n * Form submission state (entire form)\n */\n state: FormSubmissionState\n\n /**\n * Validation errors (entire form)\n */\n errors?: FormSubmissionError[]\n\n /**\n * Visited paths evaluated from form state\n */\n paths: string[]\n\n /**\n * Preview URL direct access is allowed\n */\n isForceAccess: boolean\n\n /**\n * Miscellaneous extra data from event responses\n */\n data: object\n\n pageDefMap: Map<string, Page>\n listDefMap: Map<string, List>\n componentDefMap: Map<string, ComponentDef>\n pageMap: Map<string, PageControllerClass>\n componentMap: Map<string, Component>\n referenceNumber: string\n}\n\nexport type FormContextRequest = (\n | {\n method: 'get'\n payload?: undefined\n }\n | {\n method: 'post'\n payload: FormPayload\n }\n | {\n method: FormRequest['method']\n payload?: object | undefined\n }\n) &\n Pick<\n FormRequest,\n 'app' | 'method' | 'params' | 'path' | 'query' | 'url' | 'server'\n >\n\nexport interface UploadInitiateResponse {\n uploadId: string\n uploadUrl: string\n statusUrl: string\n}\n\nexport enum UploadStatus {\n initiated = 'initiated',\n pending = 'pending',\n ready = 'ready'\n}\n\nexport enum FileStatus {\n complete = 'complete',\n rejected = 'rejected',\n pending = 'pending'\n}\n\nexport type UploadState = FileState[]\n\nexport type FileUpload = {\n fileId: string\n filename: string\n contentLength: number\n} & (\n | {\n fileStatus: FileStatus.complete | FileStatus.rejected | FileStatus.pending\n errorMessage?: string\n }\n | {\n fileStatus: FileStatus.complete\n errorMessage?: undefined\n }\n)\n\nexport interface FileUploadMetadata {\n retrievalKey: string\n}\n\nexport type UploadStatusResponse =\n | {\n uploadStatus: UploadStatus.initiated\n metadata: FileUploadMetadata\n form: { file?: undefined }\n }\n | {\n uploadStatus: UploadStatus.pending | UploadStatus.ready\n metadata: FileUploadMetadata\n form: { file: FileUpload }\n numberOfRejectedFiles?: number\n }\n | {\n uploadStatus: UploadStatus.ready\n metadata: FileUploadMetadata\n form: { file: FileUpload }\n numberOfRejectedFiles: 0\n }\n\nexport type UploadStatusFileResponse = Exclude<\n UploadStatusResponse,\n { uploadStatus: UploadStatus.initiated }\n>\n\nexport interface FileState {\n uploadId: string\n status: UploadStatusFileResponse\n}\n\nexport interface TempFileState {\n upload?: UploadInitiateResponse\n files: UploadState\n}\n\nexport interface RepeatItemState extends FormPayload {\n itemId: string\n}\n\nexport type RepeatListState = RepeatItemState[]\n\nexport interface CheckAnswers {\n title?: ComponentText\n summaryList: SummaryList\n}\n\nexport interface SummaryList {\n classes?: string\n rows: SummaryListRow[]\n}\n\nexport interface SummaryListRow {\n key: ComponentText\n value: ComponentText\n actions?: { items: SummaryListAction[] }\n}\n\nexport type SummaryListAction = ComponentText & {\n href: string\n visuallyHiddenText: string\n}\n\nexport interface PageViewModelBase extends Partial<ViewContext> {\n page: PageController\n name?: string\n pageTitle: string\n sectionTitle?: string\n showTitle: boolean\n isStartPage: boolean\n backLink?: BackLink\n feedbackLink?: string\n serviceUrl: string\n phaseTag?: string\n}\n\nexport interface ItemDeletePageViewModel extends PageViewModelBase {\n context: FormContext\n itemTitle: string\n confirmation?: ComponentText\n buttonConfirm: ComponentText\n buttonCancel: ComponentText\n}\n\nexport interface FormPageViewModel extends PageViewModelBase {\n components: ComponentViewModel[]\n context: FormContext\n errors?: FormSubmissionError[]\n hasMissingNotificationEmail?: boolean\n allowSaveAndReturn: boolean\n}\n\nexport interface RepeaterSummaryPageViewModel extends PageViewModelBase {\n context: FormContext\n errors?: FormSubmissionError[]\n checkAnswers: CheckAnswers[]\n repeatTitle: string\n}\n\nexport interface FeaturedFormPageViewModel extends FormPageViewModel {\n formAction?: string\n formComponent: ComponentViewModel\n componentsBefore: ComponentViewModel[]\n uploadId: string | undefined\n proxyUrl: string | null\n}\n\nexport type PageViewModel =\n | PageViewModelBase\n | ItemDeletePageViewModel\n | FormPageViewModel\n | RepeaterSummaryPageViewModel\n | FeaturedFormPageViewModel\n\nexport type GlobalFunction = (value: unknown) => unknown\nexport type FilterFunction = (value: unknown) => unknown\nexport interface ErrorMessageTemplate {\n type: string\n template: JoiExpression\n}\n\nexport interface ErrorMessageTemplateList {\n baseErrors: ErrorMessageTemplate[]\n advancedSettingsErrors: ErrorMessageTemplate[]\n}\n\nexport type PreparePageEventRequestOptions = (\n options: RequestOptions,\n event: Event,\n page: PageControllerClass,\n context: FormContext\n) => void\n\nexport type OnRequestCallback = (\n request: FormRequest | FormRequestPayload,\n params: FormParams,\n definition: FormDefinition,\n metadata: FormMetadata\n) => void\n\nexport interface PluginOptions {\n model?: FormModel\n services?: Services\n controllers?: Record<string, typeof PageController>\n cacheName?: string\n globals?: Record<string, GlobalFunction>\n filters?: Record<string, FilterFunction>\n saveAndReturn?: {\n keyGenerator: (request: RequestType) => string\n sessionHydrator: (request: RequestType) => Promise<FormSubmissionState>\n sessionPersister: (\n state: FormSubmissionState,\n request: RequestType\n ) => Promise<void>\n }\n pluginPath?: string\n nunjucks: {\n baseLayoutPath: string\n paths: string[]\n }\n viewContext: PluginProperties['forms-engine-plugin']['viewContext']\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n baseUrl: string // base URL of the application, protocol and hostname e.g. \"https://myapp.com\"\n}\n\nexport interface FormAdapterSubmissionMessageMeta {\n schemaVersion: FormAdapterSubmissionSchemaVersion\n timestamp: Date\n referenceNumber: string\n formName: string\n formId: string\n formSlug: string\n status: FormStatus\n isPreview: boolean\n notificationEmail: string\n}\n\nexport type FormAdapterSubmissionMessageMetaSerialised = Omit<\n FormAdapterSubmissionMessageMeta,\n 'schemaVersion' | 'timestamp' | 'status'\n> & {\n schemaVersion: string\n status: string\n timestamp: string\n}\n\nexport interface FormAdapterSubmissionMessageData {\n main: Record<string, RichFormValue>\n repeaters: Record<string, Record<string, RichFormValue>[]>\n files: Record<string, Record<string, string>[]>\n}\n\nexport enum FormAdapterSubmissionSchemaVersion {\n V1 = 1\n}\n\nexport interface FormAdapterSubmissionMessagePayload {\n meta: FormAdapterSubmissionMessageMeta\n data: FormAdapterSubmissionMessageData\n}\n\nexport interface FormAdapterSubmissionMessage\n extends FormAdapterSubmissionMessagePayload {\n messageId: string\n recordCreatedAt: Date\n}\n\nexport interface FormAdapterSubmissionService {\n handleFormSubmission: (\n submissionMessage: FormAdapterSubmissionMessage\n ) => unknown\n}\n"],"mappings":"AAoCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAmBA;AACA;AACA;AACA;;AAqGA,WAAYA,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAMxB,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AA0NtB,WAAYC,kCAAkC,0BAAlCA,kCAAkC;EAAlCA,kCAAkC,CAAlCA,kCAAkC;EAAA,OAAlCA,kCAAkC;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":["FileStatus","UploadStatus"],"sources":["../../../../src/server/plugins/engine/types.ts"],"sourcesContent":["import {\n type ComponentDef,\n type Event,\n type FormDefinition,\n type FormMetadata,\n type Item,\n type List,\n type Page\n} from '@defra/forms-model'\nimport { type PluginProperties, type Request } from '@hapi/hapi'\nimport { type JoiExpression, type ValidationErrorItem } from 'joi'\n\nimport { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { type Component } from '~/src/server/plugins/engine/components/helpers/components.js'\nimport {\n type BackLink,\n type ComponentText,\n type ComponentViewModel\n} from '~/src/server/plugins/engine/components/types.js'\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type RichFormValue } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'\nimport {\n type FileStatus,\n type FormAdapterSubmissionSchemaVersion,\n type UploadStatus\n} from '~/src/server/plugins/engine/types/enums.js'\nimport { type ViewContext } from '~/src/server/plugins/nunjucks/types.js'\nimport {\n type FormAction,\n type FormParams,\n type FormRequest,\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\nimport { type RequestOptions } from '~/src/server/services/httpService.js'\nimport { type Services } from '~/src/server/types.js'\n\ntype RequestType = Request | FormRequest | FormRequestPayload\n\n/**\n * Form submission state stores the following in Redis:\n * Props containing user's submitted values as `{ [inputId]: value }` or as `{ [sectionName]: { [inputName]: value } }`\n * a) . e.g:\n * ```ts\n * {\n * _C9PRHmsgt: 'Ben',\n * WfLk9McjzX: 'Music',\n * IK7jkUFCBL: 'Royal Academy of Music'\n * }\n * ```\n *\n * b)\n * ```ts\n * {\n * checkBeforeYouStart: { ukPassport: true },\n * applicantDetails: {\n * numberOfApplicants: 1,\n * phoneNumber: '77777777',\n * emailAddress: 'aaa@aaa.com'\n * },\n * applicantOneDetails: {\n * firstName: 'a',\n * middleName: 'a',\n * lastName: 'a',\n * address: { addressLine1: 'a', addressLine2: 'a', town: 'a', postcode: 'a' }\n * }\n * }\n * ```\n */\n\n/**\n * Form submission state\n */\nexport type FormSubmissionState = {\n upload?: Record<string, TempFileState>\n} & FormState\n\nexport interface FormSubmissionError\n extends Pick<ValidationErrorItem, 'context' | 'path'> {\n href: string // e.g: '#dateField__day'\n name: string // e.g: 'dateField__day'\n text: string // e.g: 'Date field must be a real date'\n}\n\nexport interface FormPayloadParams {\n action?: FormAction\n confirm?: true\n crumb?: string\n itemId?: string\n}\n\n/**\n * Form POST for question pages\n * (after Joi has converted value types)\n */\nexport type FormPayload = FormPayloadParams & Partial<Record<string, FormValue>>\n\nexport type FormValue =\n | Item['value']\n | Item['value'][]\n | UploadState\n | RepeatListState\n | undefined\n\nexport type FormState = Partial<Record<string, FormStateValue>>\nexport type FormStateValue = Exclude<FormValue, undefined> | null\n\nexport interface FormValidationResult<\n ValueType extends FormPayload | FormSubmissionState\n> {\n value: ValueType\n errors: FormSubmissionError[] | undefined\n}\n\nexport interface FormContext {\n /**\n * Evaluation form state only (filtered by visited paths),\n * with values formatted for condition evaluation using\n * {@link FormComponent.getContextValueFromState}\n */\n evaluationState: FormState\n\n /**\n * Relevant form state only (filtered by visited paths)\n */\n relevantState: FormState\n\n /**\n * Relevant pages only (filtered by visited paths)\n */\n relevantPages: PageControllerClass[]\n\n /**\n * Form submission payload (single page)\n */\n payload: FormPayload\n\n /**\n * Form submission state (entire form)\n */\n state: FormSubmissionState\n\n /**\n * Validation errors (entire form)\n */\n errors?: FormSubmissionError[]\n\n /**\n * Visited paths evaluated from form state\n */\n paths: string[]\n\n /**\n * Preview URL direct access is allowed\n */\n isForceAccess: boolean\n\n /**\n * Miscellaneous extra data from event responses\n */\n data: object\n\n pageDefMap: Map<string, Page>\n listDefMap: Map<string, List>\n componentDefMap: Map<string, ComponentDef>\n pageMap: Map<string, PageControllerClass>\n componentMap: Map<string, Component>\n referenceNumber: string\n}\n\nexport type FormContextRequest = (\n | {\n method: 'get'\n payload?: undefined\n }\n | {\n method: 'post'\n payload: FormPayload\n }\n | {\n method: FormRequest['method']\n payload?: object | undefined\n }\n) &\n Pick<\n FormRequest,\n 'app' | 'method' | 'params' | 'path' | 'query' | 'url' | 'server'\n >\n\nexport interface UploadInitiateResponse {\n uploadId: string\n uploadUrl: string\n statusUrl: string\n}\n\nexport {\n FileStatus,\n UploadStatus\n} from '~/src/server/plugins/engine/types/enums.js'\n\nexport type UploadState = FileState[]\n\nexport type FileUpload = {\n fileId: string\n filename: string\n contentLength: number\n} & (\n | {\n fileStatus: FileStatus.complete | FileStatus.rejected | FileStatus.pending\n errorMessage?: string\n }\n | {\n fileStatus: FileStatus.complete\n errorMessage?: undefined\n }\n)\n\nexport interface FileUploadMetadata {\n retrievalKey: string\n}\n\nexport type UploadStatusResponse =\n | {\n uploadStatus: UploadStatus.initiated\n metadata: FileUploadMetadata\n form: { file?: undefined }\n }\n | {\n uploadStatus: UploadStatus.pending | UploadStatus.ready\n metadata: FileUploadMetadata\n form: { file: FileUpload }\n numberOfRejectedFiles?: number\n }\n | {\n uploadStatus: UploadStatus.ready\n metadata: FileUploadMetadata\n form: { file: FileUpload }\n numberOfRejectedFiles: 0\n }\n\nexport type UploadStatusFileResponse = Exclude<\n UploadStatusResponse,\n { uploadStatus: UploadStatus.initiated }\n>\n\nexport interface FileState {\n uploadId: string\n status: UploadStatusFileResponse\n}\n\nexport interface TempFileState {\n upload?: UploadInitiateResponse\n files: UploadState\n}\n\nexport interface RepeatItemState extends FormPayload {\n itemId: string\n}\n\nexport type RepeatListState = RepeatItemState[]\n\nexport interface CheckAnswers {\n title?: ComponentText\n summaryList: SummaryList\n}\n\nexport interface SummaryList {\n classes?: string\n rows: SummaryListRow[]\n}\n\nexport interface SummaryListRow {\n key: ComponentText\n value: ComponentText\n actions?: { items: SummaryListAction[] }\n}\n\nexport type SummaryListAction = ComponentText & {\n href: string\n visuallyHiddenText: string\n}\n\nexport interface PageViewModelBase extends Partial<ViewContext> {\n page: PageController\n name?: string\n pageTitle: string\n sectionTitle?: string\n showTitle: boolean\n isStartPage: boolean\n backLink?: BackLink\n feedbackLink?: string\n serviceUrl: string\n phaseTag?: string\n}\n\nexport interface ItemDeletePageViewModel extends PageViewModelBase {\n context: FormContext\n itemTitle: string\n confirmation?: ComponentText\n buttonConfirm: ComponentText\n buttonCancel: ComponentText\n}\n\nexport interface FormPageViewModel extends PageViewModelBase {\n components: ComponentViewModel[]\n context: FormContext\n errors?: FormSubmissionError[]\n hasMissingNotificationEmail?: boolean\n allowSaveAndReturn: boolean\n}\n\nexport interface RepeaterSummaryPageViewModel extends PageViewModelBase {\n context: FormContext\n errors?: FormSubmissionError[]\n checkAnswers: CheckAnswers[]\n repeatTitle: string\n}\n\nexport interface FeaturedFormPageViewModel extends FormPageViewModel {\n formAction?: string\n formComponent: ComponentViewModel\n componentsBefore: ComponentViewModel[]\n uploadId: string | undefined\n proxyUrl: string | null\n}\n\nexport type PageViewModel =\n | PageViewModelBase\n | ItemDeletePageViewModel\n | FormPageViewModel\n | RepeaterSummaryPageViewModel\n | FeaturedFormPageViewModel\n\nexport type GlobalFunction = (value: unknown) => unknown\nexport type FilterFunction = (value: unknown) => unknown\nexport interface ErrorMessageTemplate {\n type: string\n template: JoiExpression\n}\n\nexport interface ErrorMessageTemplateList {\n baseErrors: ErrorMessageTemplate[]\n advancedSettingsErrors: ErrorMessageTemplate[]\n}\n\nexport type PreparePageEventRequestOptions = (\n options: RequestOptions,\n event: Event,\n page: PageControllerClass,\n context: FormContext\n) => void\n\nexport type OnRequestCallback = (\n request: FormRequest | FormRequestPayload,\n params: FormParams,\n definition: FormDefinition,\n metadata: FormMetadata\n) => void\n\nexport interface PluginOptions {\n model?: FormModel\n services?: Services\n controllers?: Record<string, typeof PageController>\n cacheName?: string\n globals?: Record<string, GlobalFunction>\n filters?: Record<string, FilterFunction>\n saveAndReturn?: {\n keyGenerator: (request: RequestType) => string\n sessionHydrator: (request: RequestType) => Promise<FormSubmissionState>\n sessionPersister: (\n state: FormSubmissionState,\n request: RequestType\n ) => Promise<void>\n }\n pluginPath?: string\n nunjucks: {\n baseLayoutPath: string\n paths: string[]\n }\n viewContext: PluginProperties['forms-engine-plugin']['viewContext']\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n baseUrl: string // base URL of the application, protocol and hostname e.g. \"https://myapp.com\"\n}\n\nexport interface FormAdapterSubmissionMessageMeta {\n schemaVersion: FormAdapterSubmissionSchemaVersion\n timestamp: Date\n referenceNumber: string\n formName: string\n formId: string\n formSlug: string\n status: FormStatus\n isPreview: boolean\n notificationEmail: string\n}\n\nexport type FormAdapterSubmissionMessageMetaSerialised = Omit<\n FormAdapterSubmissionMessageMeta,\n 'schemaVersion' | 'timestamp' | 'status'\n> & {\n schemaVersion: number\n status: string\n timestamp: string\n}\n\nexport interface FormAdapterSubmissionMessageData {\n main: Record<string, RichFormValue>\n repeaters: Record<string, Record<string, RichFormValue>[]>\n files: Record<string, Record<string, string>[]>\n}\n\nexport interface FormAdapterSubmissionMessagePayload {\n meta: FormAdapterSubmissionMessageMeta\n data: FormAdapterSubmissionMessageData\n}\n\nexport interface FormAdapterSubmissionMessage\n extends FormAdapterSubmissionMessagePayload {\n messageId: string\n recordCreatedAt: Date\n}\n\nexport interface FormAdapterSubmissionService {\n handleFormSubmission: (\n submissionMessage: FormAdapterSubmissionMessage\n ) => unknown\n}\n"],"mappings":"AAyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAmBA;AACA;AACA;AACA;;AAqGA,SACEA,UAAU,EACVC,YAAY","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getAnswer } from "../../engine/components/helpers.js";
|
|
1
|
+
import { getAnswer } from "../../engine/components/helpers/components.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Nunjucks filter to get the answer for a component
|
|
@@ -21,6 +21,6 @@ export function answer(name) {
|
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'
|
|
24
|
-
* @import { Field } from '~/src/server/plugins/engine/components/helpers.js'
|
|
24
|
+
* @import { Field } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
25
25
|
*/
|
|
26
26
|
//# sourceMappingURL=answer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"answer.js","names":["getAnswer","answer","name","context","ctx","undefined","component","componentMap","get","isFormComponent","relevantState"],"sources":["../../../../../src/server/plugins/nunjucks/filters/answer.js"],"sourcesContent":["import { getAnswer } from '~/src/server/plugins/engine/components/helpers.js'\n\n/**\n * Nunjucks filter to get the answer for a component\n * @this {NunjucksContext}\n * @param {string} name - The name of the component to check\n */\nexport function answer(name) {\n const { context } = this.ctx\n\n if (!context) {\n return undefined\n }\n\n const component = context.componentMap.get(name)\n\n if (!component?.isFormComponent) {\n return undefined\n }\n\n return getAnswer(/** @type {Field} */ (component), context.relevantState)\n}\n\n/**\n * @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'\n * @import { Field } from '~/src/server/plugins/engine/components/helpers.js'\n */\n"],"mappings":"AAAA,SAASA,SAAS;;AAElB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAACC,IAAI,EAAE;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAG,IAAI,CAACC,GAAG;EAE5B,IAAI,CAACD,OAAO,EAAE;IACZ,OAAOE,SAAS;EAClB;EAEA,MAAMC,SAAS,GAAGH,OAAO,CAACI,YAAY,CAACC,GAAG,CAACN,IAAI,CAAC;EAEhD,IAAI,CAACI,SAAS,EAAEG,eAAe,EAAE;IAC/B,OAAOJ,SAAS;EAClB;EAEA,OAAOL,SAAS,CAAC,oBAAsBM,SAAS,EAAGH,OAAO,CAACO,aAAa,CAAC;AAC3E;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"answer.js","names":["getAnswer","answer","name","context","ctx","undefined","component","componentMap","get","isFormComponent","relevantState"],"sources":["../../../../../src/server/plugins/nunjucks/filters/answer.js"],"sourcesContent":["import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'\n\n/**\n * Nunjucks filter to get the answer for a component\n * @this {NunjucksContext}\n * @param {string} name - The name of the component to check\n */\nexport function answer(name) {\n const { context } = this.ctx\n\n if (!context) {\n return undefined\n }\n\n const component = context.componentMap.get(name)\n\n if (!component?.isFormComponent) {\n return undefined\n }\n\n return getAnswer(/** @type {Field} */ (component), context.relevantState)\n}\n\n/**\n * @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'\n * @import { Field } from '~/src/server/plugins/engine/components/helpers/components.js'\n */\n"],"mappings":"AAAA,SAASA,SAAS;;AAElB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAACC,IAAI,EAAE;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAG,IAAI,CAACC,GAAG;EAE5B,IAAI,CAACD,OAAO,EAAE;IACZ,OAAOE,SAAS;EAClB;EAEA,MAAMC,SAAS,GAAGH,OAAO,CAACI,YAAY,CAACC,GAAG,CAACN,IAAI,CAAC;EAEhD,IAAI,CAACI,SAAS,EAAEG,eAAe,EAAE;IAC/B,OAAOJ,SAAS;EAClB;EAEA,OAAOL,SAAS,CAAC,oBAAsBM,SAAS,EAAGH,OAAO,CAACO,aAAa,CAAC;AAC3E;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { getAnswer } from "../../engine/components/helpers.js";
|
|
1
|
+
import { getAnswer } from "../../engine/components/helpers/components.js";
|
|
2
2
|
import { answer } from "./answer.js";
|
|
3
|
-
jest.mock("../../engine/components/helpers.ts", () => ({
|
|
3
|
+
jest.mock("../../engine/components/helpers/components.ts", () => ({
|
|
4
4
|
getAnswer: jest.fn()
|
|
5
5
|
}));
|
|
6
6
|
describe('answer Nunjucks filter', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"answer.test.js","names":["getAnswer","answer","jest","mock","fn","describe","mockThis","beforeEach","clearAllMocks","ctx","context","componentMap","Map","relevantState","someState","mocked","mockReturnValue","it","undefined","result","call","expect","toBeUndefined","not","toHaveBeenCalled","set","isFormComponent","mockFormComponent","someProperty","toHaveBeenCalledWith","toBe"],"sources":["../../../../../src/server/plugins/nunjucks/filters/answer.test.js"],"sourcesContent":["import { getAnswer } from '~/src/server/plugins/engine/components/helpers.js'\nimport { answer } from '~/src/server/plugins/nunjucks/filters/answer.js'\n\njest.mock('~/src/server/plugins/engine/components/helpers.ts'
|
|
1
|
+
{"version":3,"file":"answer.test.js","names":["getAnswer","answer","jest","mock","fn","describe","mockThis","beforeEach","clearAllMocks","ctx","context","componentMap","Map","relevantState","someState","mocked","mockReturnValue","it","undefined","result","call","expect","toBeUndefined","not","toHaveBeenCalled","set","isFormComponent","mockFormComponent","someProperty","toHaveBeenCalledWith","toBe"],"sources":["../../../../../src/server/plugins/nunjucks/filters/answer.test.js"],"sourcesContent":["import { getAnswer } from '~/src/server/plugins/engine/components/helpers/components.js'\nimport { answer } from '~/src/server/plugins/nunjucks/filters/answer.js'\n\njest.mock(\n '~/src/server/plugins/engine/components/helpers/components.ts',\n () => ({\n getAnswer: jest.fn()\n })\n)\n\ndescribe('answer Nunjucks filter', () => {\n /** @type { NunjucksContext } */\n let mockThis\n\n beforeEach(() => {\n jest.clearAllMocks()\n\n mockThis = /** @type {NunjucksContext} */ (\n /** @type {unknown} */ ({\n ctx: {\n context: {\n componentMap: new Map(),\n relevantState: { someState: 'value' }\n }\n }\n })\n )\n\n jest.mocked(getAnswer).mockReturnValue('test answer')\n })\n\n describe('missing context', () => {\n it('returns undefined', () => {\n mockThis.ctx.context = undefined\n\n const result = answer.call(mockThis, 'componentName')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('component lookup', () => {\n it('returns undefined for non-existent component', () => {\n const result = answer.call(mockThis, 'nonExistentComponent')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('non-form component', () => {\n it('returns undefined', () => {\n mockThis.ctx.context?.componentMap.set(\n 'nonFormComponent',\n // @ts-expect-error - simplified mock component for testing\n { isFormComponent: false }\n )\n\n const result = answer.call(mockThis, 'nonFormComponent')\n\n expect(result).toBeUndefined()\n expect(getAnswer).not.toHaveBeenCalled()\n })\n })\n\n describe('valid form component', () => {\n it('returns the answer', () => {\n const mockFormComponent = {\n isFormComponent: true,\n someProperty: 'value'\n }\n mockThis.ctx.context?.componentMap.set(\n 'validFormComponent',\n // @ts-expect-error - simplified mock component for testing\n mockFormComponent\n )\n\n const result = answer.call(mockThis, 'validFormComponent')\n\n expect(getAnswer).toHaveBeenCalledWith(\n mockFormComponent,\n mockThis.ctx.context?.relevantState\n )\n expect(result).toBe('test answer')\n })\n })\n})\n\n/**\n * @import { NunjucksContext } from '~/src/server/plugins/nunjucks/types.js'\n */\n"],"mappings":"AAAA,SAASA,SAAS;AAClB,SAASC,MAAM;AAEfC,IAAI,CAACC,IAAI,kDAEP,OAAO;EACLH,SAAS,EAAEE,IAAI,CAACE,EAAE,CAAC;AACrB,CAAC,CACH,CAAC;AAEDC,QAAQ,CAAC,wBAAwB,EAAE,MAAM;EACvC;EACA,IAAIC,QAAQ;EAEZC,UAAU,CAAC,MAAM;IACfL,IAAI,CAACM,aAAa,CAAC,CAAC;IAEpBF,QAAQ,GAAG;IACT,sBAAwB;MACtBG,GAAG,EAAE;QACHC,OAAO,EAAE;UACPC,YAAY,EAAE,IAAIC,GAAG,CAAC,CAAC;UACvBC,aAAa,EAAE;YAAEC,SAAS,EAAE;UAAQ;QACtC;MACF;IACF,CACD;IAEDZ,IAAI,CAACa,MAAM,CAACf,SAAS,CAAC,CAACgB,eAAe,CAAC,aAAa,CAAC;EACvD,CAAC,CAAC;EAEFX,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAChCY,EAAE,CAAC,mBAAmB,EAAE,MAAM;MAC5BX,QAAQ,CAACG,GAAG,CAACC,OAAO,GAAGQ,SAAS;MAEhC,MAAMC,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,eAAe,CAAC;MAErDe,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IACjCY,EAAE,CAAC,8CAA8C,EAAE,MAAM;MACvD,MAAME,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,sBAAsB,CAAC;MAE5De,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACnCY,EAAE,CAAC,mBAAmB,EAAE,MAAM;MAC5BX,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEC,YAAY,CAACc,GAAG,CACpC,kBAAkB;MAClB;MACA;QAAEC,eAAe,EAAE;MAAM,CAC3B,CAAC;MAED,MAAMP,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,kBAAkB,CAAC;MAExDe,MAAM,CAACF,MAAM,CAAC,CAACG,aAAa,CAAC,CAAC;MAC9BD,MAAM,CAACrB,SAAS,CAAC,CAACuB,GAAG,CAACC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnB,QAAQ,CAAC,sBAAsB,EAAE,MAAM;IACrCY,EAAE,CAAC,oBAAoB,EAAE,MAAM;MAC7B,MAAMU,iBAAiB,GAAG;QACxBD,eAAe,EAAE,IAAI;QACrBE,YAAY,EAAE;MAChB,CAAC;MACDtB,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEC,YAAY,CAACc,GAAG,CACpC,oBAAoB;MACpB;MACAE,iBACF,CAAC;MAED,MAAMR,MAAM,GAAGlB,MAAM,CAACmB,IAAI,CAACd,QAAQ,EAAE,oBAAoB,CAAC;MAE1De,MAAM,CAACrB,SAAS,CAAC,CAAC6B,oBAAoB,CACpCF,iBAAiB,EACjBrB,QAAQ,CAACG,GAAG,CAACC,OAAO,EAAEG,aACxB,CAAC;MACDQ,MAAM,CAACF,MAAM,CAAC,CAACW,IAAI,CAAC,aAAa,CAAC;IACpC,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC;;AAEF;AACA;AACA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
|
|
|
9
9
|
import {
|
|
10
10
|
getAnswer,
|
|
11
11
|
type Field
|
|
12
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
12
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
13
13
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
14
14
|
import {
|
|
15
15
|
listNumber,
|
|
@@ -11,7 +11,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
|
|
|
11
11
|
import {
|
|
12
12
|
getAnswer,
|
|
13
13
|
type Field
|
|
14
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
14
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
15
15
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
16
16
|
import {
|
|
17
17
|
listNumber,
|
|
@@ -9,10 +9,10 @@ import joi, {
|
|
|
9
9
|
} from 'joi'
|
|
10
10
|
|
|
11
11
|
import { type ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
|
|
12
|
-
import { type Component } from '~/src/server/plugins/engine/components/helpers.js'
|
|
12
|
+
import { type Component } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
13
13
|
import { type ViewModel } from '~/src/server/plugins/engine/components/types.js'
|
|
14
14
|
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
15
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
15
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
16
16
|
|
|
17
17
|
export class ComponentBase {
|
|
18
18
|
page?: PageControllerClass
|
|
@@ -15,11 +15,11 @@ import {
|
|
|
15
15
|
type Component,
|
|
16
16
|
type Field,
|
|
17
17
|
type Guidance
|
|
18
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
18
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
19
19
|
import { type ComponentViewModel } from '~/src/server/plugins/engine/components/types.js'
|
|
20
20
|
import { getErrors } from '~/src/server/plugins/engine/helpers.js'
|
|
21
21
|
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
|
|
22
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
22
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
23
23
|
import { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
|
|
24
24
|
import {
|
|
25
25
|
type FormPayload,
|
|
@@ -5,7 +5,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
|
|
|
5
5
|
import {
|
|
6
6
|
getAnswer,
|
|
7
7
|
type Field
|
|
8
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
8
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
9
9
|
import { type DateInputItem } from '~/src/server/plugins/engine/components/types.js'
|
|
10
10
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
11
11
|
import {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentType, type DetailsComponent } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
|
|
4
|
-
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
6
6
|
import definition from '~/test/form/definitions/basic.js'
|
|
7
7
|
|
|
@@ -7,7 +7,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
|
|
|
7
7
|
import {
|
|
8
8
|
getAnswer,
|
|
9
9
|
type Field
|
|
10
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
10
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
11
11
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
12
12
|
import definition from '~/test/form/definitions/blank.js'
|
|
13
13
|
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
|
|
@@ -8,12 +8,12 @@ import { tempItemSchema } from '~/src/server/plugins/engine/components/FileUploa
|
|
|
8
8
|
import {
|
|
9
9
|
getAnswer,
|
|
10
10
|
type Field
|
|
11
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
11
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
12
12
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
13
13
|
import {
|
|
14
14
|
createPage,
|
|
15
15
|
type PageControllerClass
|
|
16
|
-
} from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
16
|
+
} from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
17
17
|
import { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
|
|
18
18
|
import {
|
|
19
19
|
FileStatus,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentType, type HtmlComponent } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
|
|
4
|
-
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
6
6
|
import definition from '~/test/form/definitions/basic.js'
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentType, type InsetTextComponent } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
|
|
4
|
-
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
6
6
|
import definition from '~/test/form/definitions/basic.js'
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentType, type ListComponent } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
|
|
4
|
-
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
6
6
|
import definition from '~/test/form/definitions/basic.js'
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentType, type MarkdownComponent } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
|
|
4
|
-
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
6
6
|
import definition from '~/test/form/definitions/basic.js'
|
|
7
7
|
|
|
@@ -5,7 +5,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
|
|
|
5
5
|
import {
|
|
6
6
|
getAnswer,
|
|
7
7
|
type Field
|
|
8
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
8
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
9
9
|
import { type DateInputItem } from '~/src/server/plugins/engine/components/types.js'
|
|
10
10
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
11
11
|
import {
|
|
@@ -8,7 +8,7 @@ import { MultilineTextField } from '~/src/server/plugins/engine/components/Multi
|
|
|
8
8
|
import {
|
|
9
9
|
getAnswer,
|
|
10
10
|
type Field
|
|
11
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
11
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
12
12
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
13
13
|
import definition from '~/test/form/definitions/blank.js'
|
|
14
14
|
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
|
|
@@ -5,7 +5,7 @@ import { NumberField } from '~/src/server/plugins/engine/components/NumberField.
|
|
|
5
5
|
import {
|
|
6
6
|
getAnswer,
|
|
7
7
|
type Field
|
|
8
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
8
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
9
9
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
10
10
|
import definition from '~/test/form/definitions/blank.js'
|
|
11
11
|
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
|
|
@@ -6,7 +6,7 @@ import { RadiosField } from '~/src/server/plugins/engine/components/RadiosField.
|
|
|
6
6
|
import {
|
|
7
7
|
getAnswer,
|
|
8
8
|
type Field
|
|
9
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
9
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
10
10
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
11
11
|
import {
|
|
12
12
|
listNumber,
|
|
@@ -6,7 +6,7 @@ import { SelectField } from '~/src/server/plugins/engine/components/SelectField.
|
|
|
6
6
|
import {
|
|
7
7
|
getAnswer,
|
|
8
8
|
type Field
|
|
9
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
9
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
10
10
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
11
11
|
import {
|
|
12
12
|
listNumber,
|
|
@@ -7,7 +7,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
|
|
|
7
7
|
import {
|
|
8
8
|
getAnswer,
|
|
9
9
|
type Field
|
|
10
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
10
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
11
11
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
12
12
|
import definition from '~/test/form/definitions/blank.js'
|
|
13
13
|
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
|
|
@@ -2,7 +2,7 @@ import { type TelephoneNumberFieldComponent } from '@defra/forms-model'
|
|
|
2
2
|
import joi, { type StringSchema } from 'joi'
|
|
3
3
|
|
|
4
4
|
import { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'
|
|
5
|
-
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers.js'
|
|
5
|
+
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'
|
|
6
6
|
import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
|
|
7
7
|
import {
|
|
8
8
|
type ErrorMessageTemplateList,
|
|
@@ -4,7 +4,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
|
|
|
4
4
|
import {
|
|
5
5
|
getAnswer,
|
|
6
6
|
type Field
|
|
7
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
7
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
8
8
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
9
9
|
import definition from '~/test/form/definitions/blank.js'
|
|
10
10
|
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
|
|
@@ -9,7 +9,7 @@ import { UkAddressField } from '~/src/server/plugins/engine/components/UkAddress
|
|
|
9
9
|
import {
|
|
10
10
|
getAnswer,
|
|
11
11
|
type Field
|
|
12
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
12
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
13
13
|
import { type ViewModel } from '~/src/server/plugins/engine/components/types.js'
|
|
14
14
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
15
15
|
import {
|
|
@@ -4,7 +4,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
|
|
|
4
4
|
import {
|
|
5
5
|
getAnswer,
|
|
6
6
|
type Field
|
|
7
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
7
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
8
8
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
9
9
|
import { listYesNoExamples } from '~/test/fixtures/list.js'
|
|
10
10
|
import definition from '~/test/form/definitions/blank.js'
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from '@defra/forms-model'
|
|
7
7
|
|
|
8
8
|
import { SelectionControlField } from '~/src/server/plugins/engine/components/SelectionControlField.js'
|
|
9
|
-
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers.js'
|
|
9
|
+
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'
|
|
10
10
|
import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
|
|
11
11
|
import { type ErrorMessageTemplateList } from '~/src/server/plugins/engine/types.js'
|
|
12
12
|
import { convertToLanguageMessages } from '~/src/server/utils/type-utils.js'
|
|
@@ -4,49 +4,10 @@ import { Marked, type Token } from 'marked'
|
|
|
4
4
|
import { config } from '~/src/config/index.js'
|
|
5
5
|
import { type ComponentBase } from '~/src/server/plugins/engine/components/ComponentBase.js'
|
|
6
6
|
import { ListFormComponent } from '~/src/server/plugins/engine/components/ListFormComponent.js'
|
|
7
|
+
import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers/index.js'
|
|
7
8
|
import * as Components from '~/src/server/plugins/engine/components/index.js'
|
|
8
9
|
import { type FormState } from '~/src/server/plugins/engine/types.js'
|
|
9
10
|
|
|
10
|
-
const designerUrl = config.get('designerUrl')
|
|
11
|
-
|
|
12
|
-
const markdown = new Marked({
|
|
13
|
-
breaks: true,
|
|
14
|
-
gfm: true,
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Render paragraphs without `<p>` wrappers
|
|
18
|
-
* for check answers summary list `<dd>`
|
|
19
|
-
*/
|
|
20
|
-
extensions: [
|
|
21
|
-
{
|
|
22
|
-
name: 'paragraph',
|
|
23
|
-
renderer({ tokens = [] }) {
|
|
24
|
-
const text = this.parser.parseInline(tokens)
|
|
25
|
-
return tokens.length > 1 ? `${text}<br>` : text
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
],
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Restrict allowed Markdown tokens
|
|
32
|
-
*/
|
|
33
|
-
walkTokens(token) {
|
|
34
|
-
const tokens: Token['type'][] = [
|
|
35
|
-
'br',
|
|
36
|
-
'escape',
|
|
37
|
-
'list',
|
|
38
|
-
'list_item',
|
|
39
|
-
'paragraph',
|
|
40
|
-
'space',
|
|
41
|
-
'text'
|
|
42
|
-
]
|
|
43
|
-
|
|
44
|
-
if (!tokens.includes(token.type)) {
|
|
45
|
-
token.type = 'text'
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
})
|
|
49
|
-
|
|
50
11
|
// All component instances
|
|
51
12
|
export type Component = InstanceType<
|
|
52
13
|
(typeof Components)[keyof typeof Components]
|
|
@@ -88,6 +49,46 @@ export type ListField = InstanceType<
|
|
|
88
49
|
| typeof Components.YesNoField
|
|
89
50
|
>
|
|
90
51
|
|
|
52
|
+
export const designerUrl = config.get('designerUrl')
|
|
53
|
+
|
|
54
|
+
export const markdown = new Marked({
|
|
55
|
+
breaks: true,
|
|
56
|
+
gfm: true,
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Render paragraphs without `<p>` wrappers
|
|
60
|
+
* for check answers summary list `<dd>`
|
|
61
|
+
*/
|
|
62
|
+
extensions: [
|
|
63
|
+
{
|
|
64
|
+
name: 'paragraph',
|
|
65
|
+
renderer({ tokens = [] }) {
|
|
66
|
+
const text = this.parser.parseInline(tokens)
|
|
67
|
+
return tokens.length > 1 ? `${text}<br>` : text
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Restrict allowed Markdown tokens
|
|
74
|
+
*/
|
|
75
|
+
walkTokens(token) {
|
|
76
|
+
const tokens: Token['type'][] = [
|
|
77
|
+
'br',
|
|
78
|
+
'escape',
|
|
79
|
+
'list',
|
|
80
|
+
'list_item',
|
|
81
|
+
'paragraph',
|
|
82
|
+
'space',
|
|
83
|
+
'text'
|
|
84
|
+
]
|
|
85
|
+
|
|
86
|
+
if (!tokens.includes(token.type)) {
|
|
87
|
+
token.type = 'text'
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
|
|
91
92
|
/**
|
|
92
93
|
* Filter known components with lists
|
|
93
94
|
*/
|
|
@@ -328,40 +329,3 @@ export function getAnswerMarkdown(
|
|
|
328
329
|
|
|
329
330
|
return answerEscaped
|
|
330
331
|
}
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Prevent Markdown formatting
|
|
334
|
-
* @see {@link https://pandoc.org/chunkedhtml-demo/8.11-backslash-escapes.html}
|
|
335
|
-
*/
|
|
336
|
-
export function escapeMarkdown(answer: string) {
|
|
337
|
-
const punctuation = [
|
|
338
|
-
'`',
|
|
339
|
-
"'",
|
|
340
|
-
'*',
|
|
341
|
-
'_',
|
|
342
|
-
'{',
|
|
343
|
-
'}',
|
|
344
|
-
'[',
|
|
345
|
-
']',
|
|
346
|
-
'(',
|
|
347
|
-
')',
|
|
348
|
-
'#',
|
|
349
|
-
'+',
|
|
350
|
-
'-',
|
|
351
|
-
'.',
|
|
352
|
-
'!'
|
|
353
|
-
]
|
|
354
|
-
|
|
355
|
-
for (const character of punctuation) {
|
|
356
|
-
answer = answer.toString().replaceAll(character, `\\${character}`)
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
return answer
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
export const addClassOptionIfNone = (
|
|
363
|
-
options: Extract<ComponentDef, { options: { classes?: string } }>['options'],
|
|
364
|
-
className: string
|
|
365
|
-
) => {
|
|
366
|
-
options.classes ??= className
|
|
367
|
-
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ComponentDef } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { ComponentBase } from '~/src/server/plugins/engine/components/ComponentBase.js'
|
|
4
|
-
import { createComponent } from '~/src/server/plugins/engine/components/helpers.js'
|
|
4
|
+
import { createComponent } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
5
5
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
6
6
|
import definition from '~/test/form/definitions/basic.js'
|
|
7
7
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ComponentDef } from '@defra/forms-model'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Prevent Markdown formatting
|
|
5
|
+
* @see {@link https://pandoc.org/chunkedhtml-demo/8.11-backslash-escapes.html}
|
|
6
|
+
*/
|
|
7
|
+
export function escapeMarkdown(answer: string) {
|
|
8
|
+
const punctuation = [
|
|
9
|
+
'`',
|
|
10
|
+
"'",
|
|
11
|
+
'*',
|
|
12
|
+
'_',
|
|
13
|
+
'{',
|
|
14
|
+
'}',
|
|
15
|
+
'[',
|
|
16
|
+
']',
|
|
17
|
+
'(',
|
|
18
|
+
')',
|
|
19
|
+
'#',
|
|
20
|
+
'+',
|
|
21
|
+
'-',
|
|
22
|
+
'.',
|
|
23
|
+
'!'
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
for (const character of punctuation) {
|
|
27
|
+
answer = answer.toString().replaceAll(character, `\\${character}`)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return answer
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const addClassOptionIfNone = (
|
|
34
|
+
options: Extract<ComponentDef, { options: { classes?: string } }>['options'],
|
|
35
|
+
className: string
|
|
36
|
+
) => {
|
|
37
|
+
options.classes ??= className
|
|
38
|
+
}
|
|
@@ -22,7 +22,7 @@ import { buildFormContextRequest } from '~/src/server/plugins/engine/pageControl
|
|
|
22
22
|
import {
|
|
23
23
|
createPage,
|
|
24
24
|
type PageControllerClass
|
|
25
|
-
} from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
25
|
+
} from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
26
26
|
import {
|
|
27
27
|
type FormContext,
|
|
28
28
|
type FormContextRequest
|
|
@@ -19,9 +19,9 @@ import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
|
|
|
19
19
|
import {
|
|
20
20
|
getAnswer,
|
|
21
21
|
type Field
|
|
22
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
22
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
23
23
|
import { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
24
|
-
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
24
|
+
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
25
25
|
import {
|
|
26
26
|
type FormContext,
|
|
27
27
|
type FormContextRequest,
|
|
@@ -33,7 +33,7 @@ import {} from '~/src/server/plugins/engine/components/YesNoField.js'
|
|
|
33
33
|
import {
|
|
34
34
|
hasListFormField,
|
|
35
35
|
type Component
|
|
36
|
-
} from '~/src/server/plugins/engine/components/helpers.js'
|
|
36
|
+
} from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
37
37
|
import { todayAsDateOnly } from '~/src/server/plugins/engine/date-helper.js'
|
|
38
38
|
import {
|
|
39
39
|
findPage,
|
|
@@ -46,7 +46,7 @@ import { type PageController } from '~/src/server/plugins/engine/pageControllers
|
|
|
46
46
|
import {
|
|
47
47
|
createPage,
|
|
48
48
|
type PageControllerClass
|
|
49
|
-
} from '~/src/server/plugins/engine/pageControllers/helpers.js'
|
|
49
|
+
} from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
|
|
50
50
|
import { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
|
|
51
51
|
import * as defaultServices from '~/src/server/plugins/engine/services/index.js'
|
|
52
52
|
import {
|