@defra/forms-model 3.0.253 → 3.0.254

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.
@@ -1,7 +1,7 @@
1
1
  import { isConditionalType } from "../components/helpers.js";
2
2
  import { ComponentType } from "../components/enums.js";
3
3
  import { ConditionValue, RelativeDateValue } from "./condition-values.js";
4
- import { DateDirections, Operator, OperatorName } from "./enums.js";
4
+ import { ConditionType, DateDirections, Operator, OperatorName } from "./enums.js";
5
5
  const defaultOperators = {
6
6
  [OperatorName.Is]: inline(Operator.Is),
7
7
  [OperatorName.IsNot]: inline(Operator.IsNot)
@@ -103,8 +103,8 @@ function not(operatorDefinition) {
103
103
  };
104
104
  }
105
105
  function formatValue(field, value) {
106
- if ('value' in value && (field.type === ComponentType.YesNoField || field.type === ComponentType.NumberField)) {
107
- return value.value;
106
+ if (field.type === ComponentType.DatePartsField && value.type === ConditionType.RelativeDate || field.type === ComponentType.NumberField || field.type === ComponentType.YesNoField) {
107
+ return value.toExpression();
108
108
  }
109
109
  return `'${value.toExpression()}'`;
110
110
  }
@@ -116,7 +116,7 @@ function absoluteDate(operator) {
116
116
  if (!(value instanceof ConditionValue)) {
117
117
  throw new Error("Expression param 'value' must be ConditionValue instance");
118
118
  }
119
- return `${field.name} ${operator} '${formatValue(field, value)}'`;
119
+ return `${field.name} ${operator} ${formatValue(field, value)}`;
120
120
  }
121
121
  };
122
122
  }
@@ -127,7 +127,7 @@ function relativeDate(pastOperator, futureOperator) {
127
127
  throw new Error("Expression param 'value' must be RelativeDateValue instance");
128
128
  }
129
129
  const isPast = value.direction === DateDirections.PAST;
130
- return `${field.name} ${isPast ? pastOperator : futureOperator} ${value.toExpression()}`;
130
+ return `${field.name} ${isPast ? pastOperator : futureOperator} ${formatValue(field, value)}`;
131
131
  }
132
132
  };
133
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"condition-operators.js","names":["isConditionalType","ComponentType","ConditionValue","RelativeDateValue","DateDirections","Operator","OperatorName","defaultOperators","Is","inline","IsNot","withDefaults","param","Object","assign","textFieldOperators","IsLongerThan","lengthIs","IsMoreThan","IsShorterThan","IsLessThan","HasLength","absoluteDateOperators","absoluteDate","IsBefore","IsAfter","relativeDateOperators","IsAtLeast","relativeDate","IsAtMost","customOperators","RadiosField","CheckboxesField","Contains","reverseInline","DoesNotContain","not","NumberField","DatePartsField","TextField","MultilineTextField","EmailAddressField","SelectField","YesNoField","getOperatorNames","fieldType","conditionals","getConditionals","keys","sort","getExpression","fieldName","operator","value","expression","type","name","getOperatorConfig","field","formatValue","operatorDefinition","toExpression","absoluteDateOperatorNames","relativeDateOperatorNames","Error","pastOperator","futureOperator","isPast","direction","PAST"],"sources":["../../../src/conditions/condition-operators.ts"],"sourcesContent":["import { isConditionalType } from '../components/helpers.js'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport {\n ConditionValue,\n RelativeDateValue\n} from '~/src/conditions/condition-values.js'\nimport {\n DateDirections,\n Operator,\n OperatorName\n} from '~/src/conditions/enums.js'\nimport {\n type Conditionals,\n type OperatorDefinition\n} from '~/src/conditions/types.js'\n\nconst defaultOperators = {\n [OperatorName.Is]: inline(Operator.Is),\n [OperatorName.IsNot]: inline(Operator.IsNot)\n}\n\nfunction withDefaults<T>(param: T) {\n return Object.assign({}, param, defaultOperators)\n}\n\nconst textFieldOperators = {\n [OperatorName.IsLongerThan]: lengthIs(Operator.IsMoreThan),\n [OperatorName.IsShorterThan]: lengthIs(Operator.IsLessThan),\n [OperatorName.HasLength]: lengthIs(Operator.Is)\n}\n\nconst absoluteDateOperators = {\n [OperatorName.Is]: absoluteDate(Operator.Is),\n [OperatorName.IsNot]: absoluteDate(Operator.IsNot),\n [OperatorName.IsBefore]: absoluteDate(Operator.IsLessThan),\n [OperatorName.IsAfter]: absoluteDate(Operator.IsMoreThan)\n}\n\nconst relativeDateOperators = {\n [OperatorName.IsAtLeast]: relativeDate(Operator.IsAtMost, Operator.IsAtLeast),\n [OperatorName.IsAtMost]: relativeDate(Operator.IsAtLeast, Operator.IsAtMost),\n [OperatorName.IsLessThan]: relativeDate(\n Operator.IsMoreThan,\n Operator.IsLessThan\n ),\n [OperatorName.IsMoreThan]: relativeDate(\n Operator.IsLessThan,\n Operator.IsMoreThan\n )\n}\n\nexport const customOperators = {\n [ComponentType.RadiosField]: defaultOperators,\n [ComponentType.CheckboxesField]: {\n [OperatorName.Contains]: reverseInline(Operator.Contains),\n [OperatorName.DoesNotContain]: not(reverseInline(Operator.Contains))\n },\n [ComponentType.NumberField]: withDefaults({\n [OperatorName.IsAtLeast]: inline(Operator.IsAtLeast),\n [OperatorName.IsAtMost]: inline(Operator.IsAtMost),\n [OperatorName.IsLessThan]: inline(Operator.IsLessThan),\n [OperatorName.IsMoreThan]: inline(Operator.IsMoreThan)\n }),\n [ComponentType.DatePartsField]: {\n ...absoluteDateOperators,\n ...relativeDateOperators\n },\n [ComponentType.TextField]: withDefaults(textFieldOperators),\n [ComponentType.MultilineTextField]: withDefaults(textFieldOperators),\n [ComponentType.EmailAddressField]: withDefaults(textFieldOperators),\n [ComponentType.SelectField]: defaultOperators,\n [ComponentType.YesNoField]: defaultOperators\n}\n\nexport function getOperatorNames(fieldType?: ComponentType) {\n const conditionals = getConditionals(fieldType)\n if (!conditionals) {\n return []\n }\n\n return Object.keys(conditionals).sort()\n}\n\nexport function getExpression(\n fieldType: ComponentType,\n fieldName: string,\n operator: OperatorName,\n value: ConditionValue | RelativeDateValue\n) {\n const conditionals = getConditionals(fieldType)\n if (!conditionals) {\n return\n }\n\n return conditionals[operator]?.expression(\n { type: fieldType, name: fieldName },\n value\n )\n}\n\nexport function getOperatorConfig(\n fieldType: ComponentType,\n operator: OperatorName\n) {\n return getConditionals(fieldType)?.[operator]\n}\n\nfunction getConditionals(\n fieldType?: ComponentType\n): Partial<Conditionals> | undefined {\n if (!fieldType || !isConditionalType(fieldType)) {\n return\n }\n\n return fieldType in customOperators\n ? customOperators[fieldType]\n : defaultOperators\n}\n\nfunction inline(operator: Operator): OperatorDefinition {\n return {\n expression(field, value) {\n return `${field.name} ${operator} ${formatValue(field, value)}`\n }\n }\n}\n\nfunction lengthIs(operator: Operator): OperatorDefinition {\n return {\n expression(field, value) {\n return `length(${field.name}) ${operator} ${formatValue(field, value)}`\n }\n }\n}\n\nfunction reverseInline(operator: Operator.Contains): OperatorDefinition {\n return {\n expression(field, value) {\n return `${formatValue(field, value)} ${operator} ${field.name}`\n }\n }\n}\n\nfunction not(operatorDefinition: OperatorDefinition): OperatorDefinition {\n return {\n expression(field, value) {\n return `not (${operatorDefinition.expression(field, value)})`\n }\n }\n}\n\nfunction formatValue(\n field: Pick<ComponentDef, 'type'>,\n value: ConditionValue | RelativeDateValue\n) {\n if (\n 'value' in value &&\n (field.type === ComponentType.YesNoField ||\n field.type === ComponentType.NumberField)\n ) {\n return value.value\n }\n\n return `'${value.toExpression()}'`\n}\n\nexport const absoluteDateOperatorNames = Object.keys(\n absoluteDateOperators\n) as OperatorName[]\n\nexport const relativeDateOperatorNames = Object.keys(\n relativeDateOperators\n) as OperatorName[]\n\nfunction absoluteDate(operator: Operator): OperatorDefinition {\n return {\n expression(field, value) {\n if (!(value instanceof ConditionValue)) {\n throw new Error(\n \"Expression param 'value' must be ConditionValue instance\"\n )\n }\n\n return `${field.name} ${operator} '${formatValue(field, value)}'`\n }\n }\n}\n\nfunction relativeDate(\n pastOperator: Operator,\n futureOperator: Operator\n): OperatorDefinition {\n return {\n expression(field, value) {\n if (!(value instanceof RelativeDateValue)) {\n throw new Error(\n \"Expression param 'value' must be RelativeDateValue instance\"\n )\n }\n\n const isPast = value.direction === DateDirections.PAST\n return `${field.name} ${isPast ? pastOperator : futureOperator} ${value.toExpression()}`\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"condition-operators.js","names":["isConditionalType","ComponentType","ConditionValue","RelativeDateValue","ConditionType","DateDirections","Operator","OperatorName","defaultOperators","Is","inline","IsNot","withDefaults","param","Object","assign","textFieldOperators","IsLongerThan","lengthIs","IsMoreThan","IsShorterThan","IsLessThan","HasLength","absoluteDateOperators","absoluteDate","IsBefore","IsAfter","relativeDateOperators","IsAtLeast","relativeDate","IsAtMost","customOperators","RadiosField","CheckboxesField","Contains","reverseInline","DoesNotContain","not","NumberField","DatePartsField","TextField","MultilineTextField","EmailAddressField","SelectField","YesNoField","getOperatorNames","fieldType","conditionals","getConditionals","keys","sort","getExpression","fieldName","operator","value","expression","type","name","getOperatorConfig","field","formatValue","operatorDefinition","RelativeDate","toExpression","absoluteDateOperatorNames","relativeDateOperatorNames","Error","pastOperator","futureOperator","isPast","direction","PAST"],"sources":["../../../src/conditions/condition-operators.ts"],"sourcesContent":["import { isConditionalType } from '../components/helpers.js'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport {\n ConditionValue,\n RelativeDateValue\n} from '~/src/conditions/condition-values.js'\nimport {\n ConditionType,\n DateDirections,\n Operator,\n OperatorName\n} from '~/src/conditions/enums.js'\nimport {\n type Conditionals,\n type OperatorDefinition\n} from '~/src/conditions/types.js'\n\nconst defaultOperators = {\n [OperatorName.Is]: inline(Operator.Is),\n [OperatorName.IsNot]: inline(Operator.IsNot)\n}\n\nfunction withDefaults<T>(param: T) {\n return Object.assign({}, param, defaultOperators)\n}\n\nconst textFieldOperators = {\n [OperatorName.IsLongerThan]: lengthIs(Operator.IsMoreThan),\n [OperatorName.IsShorterThan]: lengthIs(Operator.IsLessThan),\n [OperatorName.HasLength]: lengthIs(Operator.Is)\n}\n\nconst absoluteDateOperators = {\n [OperatorName.Is]: absoluteDate(Operator.Is),\n [OperatorName.IsNot]: absoluteDate(Operator.IsNot),\n [OperatorName.IsBefore]: absoluteDate(Operator.IsLessThan),\n [OperatorName.IsAfter]: absoluteDate(Operator.IsMoreThan)\n}\n\nconst relativeDateOperators = {\n [OperatorName.IsAtLeast]: relativeDate(Operator.IsAtMost, Operator.IsAtLeast),\n [OperatorName.IsAtMost]: relativeDate(Operator.IsAtLeast, Operator.IsAtMost),\n [OperatorName.IsLessThan]: relativeDate(\n Operator.IsMoreThan,\n Operator.IsLessThan\n ),\n [OperatorName.IsMoreThan]: relativeDate(\n Operator.IsLessThan,\n Operator.IsMoreThan\n )\n}\n\nexport const customOperators = {\n [ComponentType.RadiosField]: defaultOperators,\n [ComponentType.CheckboxesField]: {\n [OperatorName.Contains]: reverseInline(Operator.Contains),\n [OperatorName.DoesNotContain]: not(reverseInline(Operator.Contains))\n },\n [ComponentType.NumberField]: withDefaults({\n [OperatorName.IsAtLeast]: inline(Operator.IsAtLeast),\n [OperatorName.IsAtMost]: inline(Operator.IsAtMost),\n [OperatorName.IsLessThan]: inline(Operator.IsLessThan),\n [OperatorName.IsMoreThan]: inline(Operator.IsMoreThan)\n }),\n [ComponentType.DatePartsField]: {\n ...absoluteDateOperators,\n ...relativeDateOperators\n },\n [ComponentType.TextField]: withDefaults(textFieldOperators),\n [ComponentType.MultilineTextField]: withDefaults(textFieldOperators),\n [ComponentType.EmailAddressField]: withDefaults(textFieldOperators),\n [ComponentType.SelectField]: defaultOperators,\n [ComponentType.YesNoField]: defaultOperators\n}\n\nexport function getOperatorNames(fieldType?: ComponentType) {\n const conditionals = getConditionals(fieldType)\n if (!conditionals) {\n return []\n }\n\n return Object.keys(conditionals).sort()\n}\n\nexport function getExpression(\n fieldType: ComponentType,\n fieldName: string,\n operator: OperatorName,\n value: ConditionValue | RelativeDateValue\n) {\n const conditionals = getConditionals(fieldType)\n if (!conditionals) {\n return\n }\n\n return conditionals[operator]?.expression(\n { type: fieldType, name: fieldName },\n value\n )\n}\n\nexport function getOperatorConfig(\n fieldType: ComponentType,\n operator: OperatorName\n) {\n return getConditionals(fieldType)?.[operator]\n}\n\nfunction getConditionals(\n fieldType?: ComponentType\n): Partial<Conditionals> | undefined {\n if (!fieldType || !isConditionalType(fieldType)) {\n return\n }\n\n return fieldType in customOperators\n ? customOperators[fieldType]\n : defaultOperators\n}\n\nfunction inline(operator: Operator): OperatorDefinition {\n return {\n expression(field, value) {\n return `${field.name} ${operator} ${formatValue(field, value)}`\n }\n }\n}\n\nfunction lengthIs(operator: Operator): OperatorDefinition {\n return {\n expression(field, value) {\n return `length(${field.name}) ${operator} ${formatValue(field, value)}`\n }\n }\n}\n\nfunction reverseInline(operator: Operator.Contains): OperatorDefinition {\n return {\n expression(field, value) {\n return `${formatValue(field, value)} ${operator} ${field.name}`\n }\n }\n}\n\nfunction not(operatorDefinition: OperatorDefinition): OperatorDefinition {\n return {\n expression(field, value) {\n return `not (${operatorDefinition.expression(field, value)})`\n }\n }\n}\n\nfunction formatValue(\n field: Pick<ComponentDef, 'type'>,\n value: ConditionValue | RelativeDateValue\n) {\n if (\n (field.type === ComponentType.DatePartsField &&\n value.type === ConditionType.RelativeDate) ||\n field.type === ComponentType.NumberField ||\n field.type === ComponentType.YesNoField\n ) {\n return value.toExpression()\n }\n\n return `'${value.toExpression()}'`\n}\n\nexport const absoluteDateOperatorNames = Object.keys(\n absoluteDateOperators\n) as OperatorName[]\n\nexport const relativeDateOperatorNames = Object.keys(\n relativeDateOperators\n) as OperatorName[]\n\nfunction absoluteDate(operator: Operator): OperatorDefinition {\n return {\n expression(field, value) {\n if (!(value instanceof ConditionValue)) {\n throw new Error(\n \"Expression param 'value' must be ConditionValue instance\"\n )\n }\n\n return `${field.name} ${operator} ${formatValue(field, value)}`\n }\n }\n}\n\nfunction relativeDate(\n pastOperator: Operator,\n futureOperator: Operator\n): OperatorDefinition {\n return {\n expression(field, value) {\n if (!(value instanceof RelativeDateValue)) {\n throw new Error(\n \"Expression param 'value' must be RelativeDateValue instance\"\n )\n }\n\n const isPast = value.direction === DateDirections.PAST\n return `${field.name} ${isPast ? pastOperator : futureOperator} ${formatValue(field, value)}`\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"condition-operators.d.ts","sourceRoot":"","sources":["../../../src/conditions/condition-operators.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EACL,cAAc,EACd,iBAAiB,EAClB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAGL,YAAY,EACb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAA;AAqClC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqB3B,CAAA;AAED,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,aAAa,YAOzD;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,cAAc,GAAG,iBAAiB,sBAW1C;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,YAAY,kCAGvB;AA6DD,eAAO,MAAM,yBAAyB,EAEjC,YAAY,EAAE,CAAA;AAEnB,eAAO,MAAM,yBAAyB,EAEjC,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"condition-operators.d.ts","sourceRoot":"","sources":["../../../src/conditions/condition-operators.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EACL,cAAc,EACd,iBAAiB,EAClB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAIL,YAAY,EACb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAA;AAqClC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqB3B,CAAA;AAED,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,aAAa,YAOzD;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,cAAc,GAAG,iBAAiB,sBAW1C;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,YAAY,kCAGvB;AA8DD,eAAO,MAAM,yBAAyB,EAEjC,YAAY,EAAE,CAAA;AAEnB,eAAO,MAAM,yBAAyB,EAEjC,YAAY,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.253",
3
+ "version": "3.0.254",
4
4
  "description": "A hapi plugin providing the model for Defra forms",
5
5
  "homepage": "https://github.com/DEFRA/forms-designer/tree/main/model#readme",
6
6
  "repository": {
@@ -7,6 +7,7 @@ import {
7
7
  RelativeDateValue
8
8
  } from '~/src/conditions/condition-values.js'
9
9
  import {
10
+ ConditionType,
10
11
  DateDirections,
11
12
  Operator,
12
13
  OperatorName
@@ -156,11 +157,12 @@ function formatValue(
156
157
  value: ConditionValue | RelativeDateValue
157
158
  ) {
158
159
  if (
159
- 'value' in value &&
160
- (field.type === ComponentType.YesNoField ||
161
- field.type === ComponentType.NumberField)
160
+ (field.type === ComponentType.DatePartsField &&
161
+ value.type === ConditionType.RelativeDate) ||
162
+ field.type === ComponentType.NumberField ||
163
+ field.type === ComponentType.YesNoField
162
164
  ) {
163
- return value.value
165
+ return value.toExpression()
164
166
  }
165
167
 
166
168
  return `'${value.toExpression()}'`
@@ -183,7 +185,7 @@ function absoluteDate(operator: Operator): OperatorDefinition {
183
185
  )
184
186
  }
185
187
 
186
- return `${field.name} ${operator} '${formatValue(field, value)}'`
188
+ return `${field.name} ${operator} ${formatValue(field, value)}`
187
189
  }
188
190
  }
189
191
  }
@@ -201,7 +203,7 @@ function relativeDate(
201
203
  }
202
204
 
203
205
  const isPast = value.direction === DateDirections.PAST
204
- return `${field.name} ${isPast ? pastOperator : futureOperator} ${value.toExpression()}`
206
+ return `${field.name} ${isPast ? pastOperator : futureOperator} ${formatValue(field, value)}`
205
207
  }
206
208
  }
207
209
  }