Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import {
listNumber,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import {
listNumber,
Expand Down
4 changes: 2 additions & 2 deletions src/server/plugins/engine/components/ComponentBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import joi, {
} from 'joi'

import { type ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
import { type Component } from '~/src/server/plugins/engine/components/helpers.js'
import { type Component } from '~/src/server/plugins/engine/components/helpers/components.js'
import { type ViewModel } from '~/src/server/plugins/engine/components/types.js'
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'

export class ComponentBase {
page?: PageControllerClass
Expand Down
4 changes: 2 additions & 2 deletions src/server/plugins/engine/components/ComponentCollection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ import {
type Component,
type Field,
type Guidance
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { type ComponentViewModel } from '~/src/server/plugins/engine/components/types.js'
import { getErrors } from '~/src/server/plugins/engine/helpers.js'
import { type FormModel } from '~/src/server/plugins/engine/models/index.js'
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers.js'
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
import { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
import {
type FormPayload,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { type DateInputItem } from '~/src/server/plugins/engine/components/types.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import {
Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/Details.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ComponentType, type DetailsComponent } from '@defra/forms-model'

import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/basic.js'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/blank.js'
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
Expand Down
4 changes: 2 additions & 2 deletions src/server/plugins/engine/components/FileUploadField.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ import { tempItemSchema } from '~/src/server/plugins/engine/components/FileUploa
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import {
createPage,
type PageControllerClass
} from '~/src/server/plugins/engine/pageControllers/helpers.js'
} from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
import { validationOptions as opts } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
import {
FileStatus,
Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/Html.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ComponentType, type HtmlComponent } from '@defra/forms-model'

import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/basic.js'

Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/InsetText.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ComponentType, type InsetTextComponent } from '@defra/forms-model'

import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/basic.js'

Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/List.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ComponentType, type ListComponent } from '@defra/forms-model'

import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/basic.js'

Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/Markdown.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ComponentType, type MarkdownComponent } from '@defra/forms-model'

import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers.js'
import { type Guidance } from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/basic.js'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { type DateInputItem } from '~/src/server/plugins/engine/components/types.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { MultilineTextField } from '~/src/server/plugins/engine/components/Multi
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/blank.js'
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/NumberField.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { NumberField } from '~/src/server/plugins/engine/components/NumberField.
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/blank.js'
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/RadiosField.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { RadiosField } from '~/src/server/plugins/engine/components/RadiosField.
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import {
listNumber,
Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/SelectField.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { SelectField } from '~/src/server/plugins/engine/components/SelectField.
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import {
listNumber,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/blank.js'
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { type TelephoneNumberFieldComponent } from '@defra/forms-model'
import joi, { type StringSchema } from 'joi'

import { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers.js'
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'
import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
import {
type ErrorMessageTemplateList,
Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/TextField.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/blank.js'
import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { UkAddressField } from '~/src/server/plugins/engine/components/UkAddress
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { type ViewModel } from '~/src/server/plugins/engine/components/types.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import {
Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/YesNoField.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ComponentCollection } from '~/src/server/plugins/engine/components/Comp
import {
getAnswer,
type Field
} from '~/src/server/plugins/engine/components/helpers.js'
} from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import { listYesNoExamples } from '~/test/fixtures/list.js'
import definition from '~/test/form/definitions/blank.js'
Expand Down
2 changes: 1 addition & 1 deletion src/server/plugins/engine/components/YesNoField.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
} from '@defra/forms-model'

import { SelectionControlField } from '~/src/server/plugins/engine/components/SelectionControlField.js'
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers.js'
import { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'
import { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'
import { type ErrorMessageTemplateList } from '~/src/server/plugins/engine/types.js'
import { convertToLanguageMessages } from '~/src/server/utils/type-utils.js'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,49 +4,10 @@ import { Marked, type Token } from 'marked'
import { config } from '~/src/config/index.js'
import { type ComponentBase } from '~/src/server/plugins/engine/components/ComponentBase.js'
import { ListFormComponent } from '~/src/server/plugins/engine/components/ListFormComponent.js'
import { escapeMarkdown } from '~/src/server/plugins/engine/components/helpers/index.js'
import * as Components from '~/src/server/plugins/engine/components/index.js'
import { type FormState } from '~/src/server/plugins/engine/types.js'

const designerUrl = config.get('designerUrl')

const markdown = new Marked({
breaks: true,
gfm: true,

/**
* Render paragraphs without `<p>` wrappers
* for check answers summary list `<dd>`
*/
extensions: [
{
name: 'paragraph',
renderer({ tokens = [] }) {
const text = this.parser.parseInline(tokens)
return tokens.length > 1 ? `${text}<br>` : text
}
}
],

/**
* Restrict allowed Markdown tokens
*/
walkTokens(token) {
const tokens: Token['type'][] = [
'br',
'escape',
'list',
'list_item',
'paragraph',
'space',
'text'
]

if (!tokens.includes(token.type)) {
token.type = 'text'
}
}
})

// All component instances
export type Component = InstanceType<
(typeof Components)[keyof typeof Components]
Expand Down Expand Up @@ -88,6 +49,46 @@ export type ListField = InstanceType<
| typeof Components.YesNoField
>

export const designerUrl = config.get('designerUrl')

export const markdown = new Marked({
breaks: true,
gfm: true,

/**
* Render paragraphs without `<p>` wrappers
* for check answers summary list `<dd>`
*/
extensions: [
{
name: 'paragraph',
renderer({ tokens = [] }) {
const text = this.parser.parseInline(tokens)
return tokens.length > 1 ? `${text}<br>` : text
}
}
],

/**
* Restrict allowed Markdown tokens
*/
walkTokens(token) {
const tokens: Token['type'][] = [
'br',
'escape',
'list',
'list_item',
'paragraph',
'space',
'text'
]

if (!tokens.includes(token.type)) {
token.type = 'text'
}
}
})

/**
* Filter known components with lists
*/
Expand Down Expand Up @@ -328,40 +329,3 @@ export function getAnswerMarkdown(

return answerEscaped
}

/**
* Prevent Markdown formatting
* @see {@link https://pandoc.org/chunkedhtml-demo/8.11-backslash-escapes.html}
*/
export function escapeMarkdown(answer: string) {
const punctuation = [
'`',
"'",
'*',
'_',
'{',
'}',
'[',
']',
'(',
')',
'#',
'+',
'-',
'.',
'!'
]

for (const character of punctuation) {
answer = answer.toString().replaceAll(character, `\\${character}`)
}

return answer
}

export const addClassOptionIfNone = (
options: Extract<ComponentDef, { options: { classes?: string } }>['options'],
className: string
) => {
options.classes ??= className
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { type ComponentDef } from '@defra/forms-model'

import { ComponentBase } from '~/src/server/plugins/engine/components/ComponentBase.js'
import { createComponent } from '~/src/server/plugins/engine/components/helpers.js'
import { createComponent } from '~/src/server/plugins/engine/components/helpers/components.js'
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
import definition from '~/test/form/definitions/basic.js'

Expand Down
Loading
Loading