@defra/forms-model 3.0.254 → 3.0.255

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.
Files changed (60) hide show
  1. package/dist/module/components/helpers.js +4 -1
  2. package/dist/module/components/helpers.js.map +1 -1
  3. package/dist/module/components/index.js +1 -1
  4. package/dist/module/components/index.js.map +1 -1
  5. package/dist/module/conditions/condition-field.js +6 -0
  6. package/dist/module/conditions/condition-field.js.map +1 -1
  7. package/dist/module/conditions/condition-group.js +15 -1
  8. package/dist/module/conditions/condition-group.js.map +1 -1
  9. package/dist/module/conditions/condition-model.js +9 -11
  10. package/dist/module/conditions/condition-model.js.map +1 -1
  11. package/dist/module/conditions/condition-operators.js +6 -3
  12. package/dist/module/conditions/condition-operators.js.map +1 -1
  13. package/dist/module/conditions/condition-ref.js +7 -1
  14. package/dist/module/conditions/condition-ref.js.map +1 -1
  15. package/dist/module/conditions/condition-values.js +16 -7
  16. package/dist/module/conditions/condition-values.js.map +1 -1
  17. package/dist/module/conditions/condition.js +8 -1
  18. package/dist/module/conditions/condition.js.map +1 -1
  19. package/dist/module/conditions/helpers.js +15 -0
  20. package/dist/module/conditions/helpers.js.map +1 -1
  21. package/dist/module/conditions/index.js +2 -2
  22. package/dist/module/conditions/index.js.map +1 -1
  23. package/dist/module/conditions/types.js.map +1 -1
  24. package/dist/types/components/helpers.d.ts +1 -0
  25. package/dist/types/components/helpers.d.ts.map +1 -1
  26. package/dist/types/components/index.d.ts +1 -1
  27. package/dist/types/components/index.d.ts.map +1 -1
  28. package/dist/types/conditions/condition-field.d.ts +2 -0
  29. package/dist/types/conditions/condition-field.d.ts.map +1 -1
  30. package/dist/types/conditions/condition-group.d.ts +3 -0
  31. package/dist/types/conditions/condition-group.d.ts.map +1 -1
  32. package/dist/types/conditions/condition-model.d.ts +8 -4
  33. package/dist/types/conditions/condition-model.d.ts.map +1 -1
  34. package/dist/types/conditions/condition-operators.d.ts +15 -15
  35. package/dist/types/conditions/condition-operators.d.ts.map +1 -1
  36. package/dist/types/conditions/condition-ref.d.ts +3 -0
  37. package/dist/types/conditions/condition-ref.d.ts.map +1 -1
  38. package/dist/types/conditions/condition-values.d.ts +4 -2
  39. package/dist/types/conditions/condition-values.d.ts.map +1 -1
  40. package/dist/types/conditions/condition.d.ts +3 -0
  41. package/dist/types/conditions/condition.d.ts.map +1 -1
  42. package/dist/types/conditions/helpers.d.ts +7 -0
  43. package/dist/types/conditions/helpers.d.ts.map +1 -1
  44. package/dist/types/conditions/index.d.ts +2 -2
  45. package/dist/types/conditions/index.d.ts.map +1 -1
  46. package/dist/types/conditions/types.d.ts +2 -2
  47. package/dist/types/conditions/types.d.ts.map +1 -1
  48. package/package.json +1 -1
  49. package/src/components/helpers.ts +7 -1
  50. package/src/components/index.ts +3 -1
  51. package/src/conditions/condition-field.ts +8 -0
  52. package/src/conditions/condition-group.ts +19 -1
  53. package/src/conditions/condition-model.ts +17 -27
  54. package/src/conditions/condition-operators.ts +6 -5
  55. package/src/conditions/condition-ref.ts +12 -3
  56. package/src/conditions/condition-values.ts +21 -9
  57. package/src/conditions/condition.ts +14 -4
  58. package/src/conditions/helpers.ts +35 -0
  59. package/src/conditions/index.ts +9 -2
  60. package/src/conditions/types.ts +2 -5
@@ -43,8 +43,11 @@ export function hasEditor(component) {
43
43
  * Filter known components with lists
44
44
  */
45
45
  export function hasListField(component) {
46
+ return isListType(component?.type);
47
+ }
48
+ export function isListType(type) {
46
49
  const allowedTypes = [ComponentType.AutocompleteField, ComponentType.List, ComponentType.RadiosField, ComponentType.SelectField, ComponentType.CheckboxesField];
47
- return !!component?.type && allowedTypes.includes(component.type);
50
+ return !!type && allowedTypes.includes(type);
48
51
  }
49
52
 
50
53
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["ComponentTypes","ComponentType","getComponentDefaults","component","type","find","hasConditionSupport","isConditionalType","allowedTypes","RadiosField","CheckboxesField","DatePartsField","EmailAddressField","MultilineTextField","NumberField","SelectField","TextField","YesNoField","includes","hasContentField","Details","Html","InsetText","hasEditor","TelephoneNumberField","AutocompleteField","List","hasListField","hasSelectionFields","hasTitle","deniedTypes"],"sources":["../../../src/components/helpers.ts"],"sourcesContent":["import { ComponentTypes } from '~/src/components/component-types.js'\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type ComponentDef,\n type ConditionalComponentsDef,\n type ConditionalComponentType,\n type ContentComponentsDef,\n type HtmlComponent,\n type InsetTextComponent,\n type ListComponentsDef,\n type SelectionComponentsDef,\n type EditorComponentsDef\n} from '~/src/components/types.js'\n\n/**\n * Return component defaults by type\n */\nexport function getComponentDefaults(component?: Partial<ComponentDef>) {\n if (!component?.type) {\n return\n }\n\n return ComponentTypes.find(({ type }) => type === component.type)\n}\n\n/**\n * Filter known components with support for conditions\n */\nexport function hasConditionSupport(\n component?: Partial<ComponentDef>\n): component is ConditionalComponentsDef {\n return isConditionalType(component?.type)\n}\n\nexport function isConditionalType(\n type?: ComponentType\n): type is ConditionalComponentType {\n const allowedTypes = [\n ComponentType.RadiosField,\n ComponentType.CheckboxesField,\n ComponentType.DatePartsField,\n ComponentType.EmailAddressField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField,\n ComponentType.SelectField,\n ComponentType.TextField,\n ComponentType.YesNoField\n ]\n\n return !!type && allowedTypes.includes(type)\n}\n\n/**\n * Filter known components with content fields\n */\nexport function hasContentField(\n component?: Partial<ComponentDef>\n): component is ContentComponentsDef {\n const allowedTypes = [\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText\n ]\n\n return !!component?.type && allowedTypes.includes(component.type)\n}\n\n/**\n * Filter known components with text editor or list select\n */\nexport function hasEditor(\n component?: Partial<ComponentDef>\n): component is EditorComponentsDef {\n const allowedTypes = [\n ComponentType.TextField,\n ComponentType.EmailAddressField,\n ComponentType.TelephoneNumberField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField,\n ComponentType.AutocompleteField,\n ComponentType.SelectField,\n ComponentType.RadiosField,\n ComponentType.CheckboxesField,\n ComponentType.List,\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.DatePartsField\n ]\n\n return !!component?.type && allowedTypes.includes(component.type)\n}\n\n/**\n * Filter known components with lists\n */\nexport function hasListField(\n component?: Partial<ComponentDef>\n): component is ListComponentsDef {\n const allowedTypes = [\n ComponentType.AutocompleteField,\n ComponentType.List,\n ComponentType.RadiosField,\n ComponentType.SelectField,\n ComponentType.CheckboxesField\n ]\n\n return !!component?.type && allowedTypes.includes(component.type)\n}\n\n/**\n * Filter known components with selection fields\n */\nexport function hasSelectionFields(\n component?: Partial<ComponentDef>\n): component is SelectionComponentsDef {\n const allowedTypes = [\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.SelectField,\n ComponentType.YesNoField\n ]\n\n return !!component?.type && allowedTypes.includes(component.type)\n}\n\n/**\n * Filter known components with titles\n */\nexport function hasTitle(\n component?: Partial<ComponentDef>\n): component is Exclude<ComponentDef, InsetTextComponent | HtmlComponent> {\n const deniedTypes = [ComponentType.InsetText, ComponentType.Html]\n return !!component?.type && !deniedTypes.includes(component.type)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"helpers.js","names":["ComponentTypes","ComponentType","getComponentDefaults","component","type","find","hasConditionSupport","isConditionalType","allowedTypes","RadiosField","CheckboxesField","DatePartsField","EmailAddressField","MultilineTextField","NumberField","SelectField","TextField","YesNoField","includes","hasContentField","Details","Html","InsetText","hasEditor","TelephoneNumberField","AutocompleteField","List","hasListField","isListType","hasSelectionFields","hasTitle","deniedTypes"],"sources":["../../../src/components/helpers.ts"],"sourcesContent":["import { ComponentTypes } from '~/src/components/component-types.js'\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type ComponentDef,\n type ConditionalComponentsDef,\n type ConditionalComponentType,\n type ContentComponentsDef,\n type HtmlComponent,\n type InsetTextComponent,\n type ListComponentsDef,\n type SelectionComponentsDef,\n type EditorComponentsDef\n} from '~/src/components/types.js'\n\n/**\n * Return component defaults by type\n */\nexport function getComponentDefaults(component?: Partial<ComponentDef>) {\n if (!component?.type) {\n return\n }\n\n return ComponentTypes.find(({ type }) => type === component.type)\n}\n\n/**\n * Filter known components with support for conditions\n */\nexport function hasConditionSupport(\n component?: Partial<ComponentDef>\n): component is ConditionalComponentsDef {\n return isConditionalType(component?.type)\n}\n\nexport function isConditionalType(\n type?: ComponentType\n): type is ConditionalComponentType {\n const allowedTypes = [\n ComponentType.RadiosField,\n ComponentType.CheckboxesField,\n ComponentType.DatePartsField,\n ComponentType.EmailAddressField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField,\n ComponentType.SelectField,\n ComponentType.TextField,\n ComponentType.YesNoField\n ]\n\n return !!type && allowedTypes.includes(type)\n}\n\n/**\n * Filter known components with content fields\n */\nexport function hasContentField(\n component?: Partial<ComponentDef>\n): component is ContentComponentsDef {\n const allowedTypes = [\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText\n ]\n\n return !!component?.type && allowedTypes.includes(component.type)\n}\n\n/**\n * Filter known components with text editor or list select\n */\nexport function hasEditor(\n component?: Partial<ComponentDef>\n): component is EditorComponentsDef {\n const allowedTypes = [\n ComponentType.TextField,\n ComponentType.EmailAddressField,\n ComponentType.TelephoneNumberField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField,\n ComponentType.AutocompleteField,\n ComponentType.SelectField,\n ComponentType.RadiosField,\n ComponentType.CheckboxesField,\n ComponentType.List,\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.DatePartsField\n ]\n\n return !!component?.type && allowedTypes.includes(component.type)\n}\n\n/**\n * Filter known components with lists\n */\nexport function hasListField(\n component?: Partial<ComponentDef>\n): component is ListComponentsDef {\n return isListType(component?.type)\n}\n\nexport function isListType(\n type?: ComponentType\n): type is ListComponentsDef['type'] {\n const allowedTypes = [\n ComponentType.AutocompleteField,\n ComponentType.List,\n ComponentType.RadiosField,\n ComponentType.SelectField,\n ComponentType.CheckboxesField\n ]\n\n return !!type && allowedTypes.includes(type)\n}\n\n/**\n * Filter known components with selection fields\n */\nexport function hasSelectionFields(\n component?: Partial<ComponentDef>\n): component is SelectionComponentsDef {\n const allowedTypes = [\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.SelectField,\n ComponentType.YesNoField\n ]\n\n return !!component?.type && allowedTypes.includes(component.type)\n}\n\n/**\n * Filter known components with titles\n */\nexport function hasTitle(\n component?: Partial<ComponentDef>\n): component is Exclude<ComponentDef, InsetTextComponent | HtmlComponent> {\n const deniedTypes = [ComponentType.InsetText, ComponentType.Html]\n return !!component?.type && !deniedTypes.includes(component.type)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
1
  export { ComponentTypes } from "./component-types.js";
2
- export { getComponentDefaults, hasConditionSupport, hasContentField, hasEditor, hasListField, hasSelectionFields, hasTitle } from "./helpers.js";
2
+ export { getComponentDefaults, hasConditionSupport, hasContentField, hasEditor, hasListField, hasSelectionFields, hasTitle, isConditionalType, isListType } from "./helpers.js";
3
3
  export { ComponentType } from "./enums.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ComponentTypes","getComponentDefaults","hasConditionSupport","hasContentField","hasEditor","hasListField","hasSelectionFields","hasTitle","ComponentType"],"sources":["../../../src/components/index.ts"],"sourcesContent":["export { ComponentTypes } from '~/src/components/component-types.js'\nexport {\n getComponentDefaults,\n hasConditionSupport,\n hasContentField,\n hasEditor,\n hasListField,\n hasSelectionFields,\n hasTitle\n} from '~/src/components/helpers.js'\n\nexport { ComponentType } from '~/src/components/enums.js'\n"],"mappings":"AAAA,SAASA,cAAc;AACvB,SACEC,oBAAoB,EACpBC,mBAAmB,EACnBC,eAAe,EACfC,SAAS,EACTC,YAAY,EACZC,kBAAkB,EAClBC,QAAQ;AAGV,SAASC,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["ComponentTypes","getComponentDefaults","hasConditionSupport","hasContentField","hasEditor","hasListField","hasSelectionFields","hasTitle","isConditionalType","isListType","ComponentType"],"sources":["../../../src/components/index.ts"],"sourcesContent":["export { ComponentTypes } from '~/src/components/component-types.js'\nexport {\n getComponentDefaults,\n hasConditionSupport,\n hasContentField,\n hasEditor,\n hasListField,\n hasSelectionFields,\n hasTitle,\n isConditionalType,\n isListType\n} from '~/src/components/helpers.js'\n\nexport { ComponentType } from '~/src/components/enums.js'\n"],"mappings":"AAAA,SAASA,cAAc;AACvB,SACEC,oBAAoB,EACpBC,mBAAmB,EACnBC,eAAe,EACfC,SAAS,EACTC,YAAY,EACZC,kBAAkB,EAClBC,QAAQ,EACRC,iBAAiB,EACjBC,UAAU;AAGZ,SAASC,aAAa","ignoreList":[]}
@@ -17,6 +17,12 @@ export class ConditionField {
17
17
  this.type = type;
18
18
  this.display = display;
19
19
  }
20
+ clone() {
21
+ return ConditionField.from(this);
22
+ }
23
+ toJSON() {
24
+ return structuredClone(this.clone());
25
+ }
20
26
  static from(obj) {
21
27
  return new ConditionField(obj.name, obj.type, obj.display);
22
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"condition-field.js","names":["isConditionalType","ConditionField","name","type","display","constructor","Error","from","obj"],"sources":["../../../src/conditions/condition-field.ts"],"sourcesContent":["import { type ComponentType } from '~/src/components/enums.js'\nimport { isConditionalType } from '~/src/components/helpers.js'\nimport { type ConditionalComponentType } from '~/src/components/types.js'\nimport { type ConditionFieldData } from '~/src/conditions/types.js'\n\nexport class ConditionField {\n name: string\n type: ConditionalComponentType\n display: string\n\n constructor(name?: string, type?: ComponentType, display?: string) {\n if (!name || typeof name !== 'string') {\n throw new Error(\"ConditionField param 'name' must be a string\")\n }\n\n if (!isConditionalType(type)) {\n throw new Error(\"ConditionField param 'type' must support conditions\")\n }\n\n if (!display || typeof display !== 'string') {\n throw new Error(\"ConditionField param 'display' must be a string\")\n }\n\n this.name = name\n this.type = type\n this.display = display\n }\n\n static from(obj: ConditionField | ConditionFieldData) {\n return new ConditionField(obj.name, obj.type, obj.display)\n }\n}\n"],"mappings":"AACA,SAASA,iBAAiB;AAI1B,OAAO,MAAMC,cAAc,CAAC;EAC1BC,IAAI;EACJC,IAAI;EACJC,OAAO;EAEPC,WAAWA,CAACH,IAAa,EAAEC,IAAoB,EAAEC,OAAgB,EAAE;IACjE,IAAI,CAACF,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;MACrC,MAAM,IAAII,KAAK,CAAC,8CAA8C,CAAC;IACjE;IAEA,IAAI,CAACN,iBAAiB,CAACG,IAAI,CAAC,EAAE;MAC5B,MAAM,IAAIG,KAAK,CAAC,qDAAqD,CAAC;IACxE;IAEA,IAAI,CAACF,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;MAC3C,MAAM,IAAIE,KAAK,CAAC,iDAAiD,CAAC;IACpE;IAEA,IAAI,CAACJ,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,OAAO,GAAGA,OAAO;EACxB;EAEA,OAAOG,IAAIA,CAACC,GAAwC,EAAE;IACpD,OAAO,IAAIP,cAAc,CAACO,GAAG,CAACN,IAAI,EAAEM,GAAG,CAACL,IAAI,EAAEK,GAAG,CAACJ,OAAO,CAAC;EAC5D;AACF","ignoreList":[]}
1
+ {"version":3,"file":"condition-field.js","names":["isConditionalType","ConditionField","name","type","display","constructor","Error","clone","from","toJSON","structuredClone","obj"],"sources":["../../../src/conditions/condition-field.ts"],"sourcesContent":["import { type ComponentType } from '~/src/components/enums.js'\nimport { isConditionalType } from '~/src/components/helpers.js'\nimport { type ConditionalComponentType } from '~/src/components/types.js'\nimport { type ConditionFieldData } from '~/src/conditions/types.js'\n\nexport class ConditionField {\n name: string\n type: ConditionalComponentType\n display: string\n\n constructor(name?: string, type?: ComponentType, display?: string) {\n if (!name || typeof name !== 'string') {\n throw new Error(\"ConditionField param 'name' must be a string\")\n }\n\n if (!isConditionalType(type)) {\n throw new Error(\"ConditionField param 'type' must support conditions\")\n }\n\n if (!display || typeof display !== 'string') {\n throw new Error(\"ConditionField param 'display' must be a string\")\n }\n\n this.name = name\n this.type = type\n this.display = display\n }\n\n clone(): ConditionField {\n return ConditionField.from(this)\n }\n\n toJSON(): ConditionFieldData {\n return structuredClone(this.clone())\n }\n\n static from(obj: ConditionField | ConditionFieldData) {\n return new ConditionField(obj.name, obj.type, obj.display)\n }\n}\n"],"mappings":"AACA,SAASA,iBAAiB;AAI1B,OAAO,MAAMC,cAAc,CAAC;EAC1BC,IAAI;EACJC,IAAI;EACJC,OAAO;EAEPC,WAAWA,CAACH,IAAa,EAAEC,IAAoB,EAAEC,OAAgB,EAAE;IACjE,IAAI,CAACF,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;MACrC,MAAM,IAAII,KAAK,CAAC,8CAA8C,CAAC;IACjE;IAEA,IAAI,CAACN,iBAAiB,CAACG,IAAI,CAAC,EAAE;MAC5B,MAAM,IAAIG,KAAK,CAAC,qDAAqD,CAAC;IACxE;IAEA,IAAI,CAACF,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;MAC3C,MAAM,IAAIE,KAAK,CAAC,iDAAiD,CAAC;IACpE;IAEA,IAAI,CAACJ,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,OAAO,GAAGA,OAAO;EACxB;EAEAG,KAAKA,CAAA,EAAmB;IACtB,OAAON,cAAc,CAACO,IAAI,CAAC,IAAI,CAAC;EAClC;EAEAC,MAAMA,CAAA,EAAuB;IAC3B,OAAOC,eAAe,CAAC,IAAI,CAACH,KAAK,CAAC,CAAC,CAAC;EACtC;EAEA,OAAOC,IAAIA,CAACG,GAAwC,EAAE;IACpD,OAAO,IAAIV,cAAc,CAACU,GAAG,CAACT,IAAI,EAAES,GAAG,CAACR,IAAI,EAAEQ,GAAG,CAACP,OAAO,CAAC;EAC5D;AACF","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ import { conditionFrom } from "./condition-model.js";
1
2
  import { toPresentationString, toExpression } from "./helpers.js";
2
3
  export class ConditionGroup {
3
4
  conditions;
@@ -37,7 +38,20 @@ export class ConditionGroup {
37
38
  return this.conditions.map(condition => condition.clone());
38
39
  }
39
40
  clone() {
40
- return new ConditionGroup(this.conditions.map(condition => condition.clone()));
41
+ return ConditionGroup.from(this);
42
+ }
43
+ toJSON() {
44
+ const {
45
+ conditions
46
+ } = this.clone();
47
+ return structuredClone({
48
+ conditions: conditions.map(condition => condition.toJSON())
49
+ });
50
+ }
51
+ static from(obj) {
52
+ return new ConditionGroup(obj.conditions.map(condition => {
53
+ return 'clone' in condition ? condition.clone() : conditionFrom(condition);
54
+ }));
41
55
  }
42
56
  }
43
57
  //# sourceMappingURL=condition-group.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"condition-group.js","names":["toPresentationString","toExpression","ConditionGroup","conditions","constructor","Array","isArray","length","Error","coordinatorString","conditionString","copy","splice","map","condition","join","conditionExpression","asFirstCondition","getCoordinator","setCoordinator","coordinator","isGroup","getGroupedConditions","clone"],"sources":["../../../src/conditions/condition-group.ts"],"sourcesContent":["import { type ConditionRef } from '~/src/conditions/condition-ref.js'\nimport { type Condition } from '~/src/conditions/condition.js'\nimport { type Coordinator } from '~/src/conditions/enums.js'\nimport { toPresentationString, toExpression } from '~/src/conditions/helpers.js'\n\nexport class ConditionGroup {\n conditions: (Condition | ConditionRef | ConditionGroup)[]\n\n constructor(conditions: (Condition | ConditionRef | ConditionGroup)[] = []) {\n if (!Array.isArray(conditions) || conditions.length < 2) {\n throw Error('Cannot construct a condition group from a single condition')\n }\n\n this.conditions = conditions\n }\n\n coordinatorString(): string {\n return this.conditions[0].coordinatorString()\n }\n\n conditionString(): string {\n const copy = [...this.conditions]\n copy.splice(0, 1)\n return `(${this.conditions[0].conditionString()} ${copy\n .map((condition) => toPresentationString(condition))\n .join(' ')})`\n }\n\n conditionExpression(): string {\n const copy = [...this.conditions]\n copy.splice(0, 1)\n return `(${this.conditions[0].conditionExpression()} ${copy\n .map((condition) => toExpression(condition))\n .join(' ')})`\n }\n\n asFirstCondition() {\n this.conditions[0].asFirstCondition()\n return this\n }\n\n getCoordinator(): Coordinator | undefined {\n return this.conditions[0].getCoordinator()\n }\n\n setCoordinator(coordinator?: Coordinator) {\n this.conditions[0].setCoordinator(coordinator)\n }\n\n isGroup() {\n return true\n }\n\n getGroupedConditions(): (Condition | ConditionRef | ConditionGroup)[] {\n return this.conditions.map((condition) => condition.clone())\n }\n\n clone(): ConditionGroup {\n return new ConditionGroup(\n this.conditions.map((condition) => condition.clone())\n )\n }\n}\n"],"mappings":"AAGA,SAASA,oBAAoB,EAAEC,YAAY;AAE3C,OAAO,MAAMC,cAAc,CAAC;EAC1BC,UAAU;EAEVC,WAAWA,CAACD,UAAyD,GAAG,EAAE,EAAE;IAC1E,IAAI,CAACE,KAAK,CAACC,OAAO,CAACH,UAAU,CAAC,IAAIA,UAAU,CAACI,MAAM,GAAG,CAAC,EAAE;MACvD,MAAMC,KAAK,CAAC,4DAA4D,CAAC;IAC3E;IAEA,IAAI,CAACL,UAAU,GAAGA,UAAU;EAC9B;EAEAM,iBAAiBA,CAAA,EAAW;IAC1B,OAAO,IAAI,CAACN,UAAU,CAAC,CAAC,CAAC,CAACM,iBAAiB,CAAC,CAAC;EAC/C;EAEAC,eAAeA,CAAA,EAAW;IACxB,MAAMC,IAAI,GAAG,CAAC,GAAG,IAAI,CAACR,UAAU,CAAC;IACjCQ,IAAI,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,IAAI,IAAI,CAACT,UAAU,CAAC,CAAC,CAAC,CAACO,eAAe,CAAC,CAAC,IAAIC,IAAI,CACpDE,GAAG,CAAEC,SAAS,IAAKd,oBAAoB,CAACc,SAAS,CAAC,CAAC,CACnDC,IAAI,CAAC,GAAG,CAAC,GAAG;EACjB;EAEAC,mBAAmBA,CAAA,EAAW;IAC5B,MAAML,IAAI,GAAG,CAAC,GAAG,IAAI,CAACR,UAAU,CAAC;IACjCQ,IAAI,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,IAAI,IAAI,CAACT,UAAU,CAAC,CAAC,CAAC,CAACa,mBAAmB,CAAC,CAAC,IAAIL,IAAI,CACxDE,GAAG,CAAEC,SAAS,IAAKb,YAAY,CAACa,SAAS,CAAC,CAAC,CAC3CC,IAAI,CAAC,GAAG,CAAC,GAAG;EACjB;EAEAE,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAACd,UAAU,CAAC,CAAC,CAAC,CAACc,gBAAgB,CAAC,CAAC;IACrC,OAAO,IAAI;EACb;EAEAC,cAAcA,CAAA,EAA4B;IACxC,OAAO,IAAI,CAACf,UAAU,CAAC,CAAC,CAAC,CAACe,cAAc,CAAC,CAAC;EAC5C;EAEAC,cAAcA,CAACC,WAAyB,EAAE;IACxC,IAAI,CAACjB,UAAU,CAAC,CAAC,CAAC,CAACgB,cAAc,CAACC,WAAW,CAAC;EAChD;EAEAC,OAAOA,CAAA,EAAG;IACR,OAAO,IAAI;EACb;EAEAC,oBAAoBA,CAAA,EAAkD;IACpE,OAAO,IAAI,CAACnB,UAAU,CAACU,GAAG,CAAEC,SAAS,IAAKA,SAAS,CAACS,KAAK,CAAC,CAAC,CAAC;EAC9D;EAEAA,KAAKA,CAAA,EAAmB;IACtB,OAAO,IAAIrB,cAAc,CACvB,IAAI,CAACC,UAAU,CAACU,GAAG,CAAEC,SAAS,IAAKA,SAAS,CAACS,KAAK,CAAC,CAAC,CACtD,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"file":"condition-group.js","names":["conditionFrom","toPresentationString","toExpression","ConditionGroup","conditions","constructor","Array","isArray","length","Error","coordinatorString","conditionString","copy","splice","map","condition","join","conditionExpression","asFirstCondition","getCoordinator","setCoordinator","coordinator","isGroup","getGroupedConditions","clone","from","toJSON","structuredClone","obj"],"sources":["../../../src/conditions/condition-group.ts"],"sourcesContent":["import { conditionFrom } from '~/src/conditions/condition-model.js'\nimport { type ConditionRef } from '~/src/conditions/condition-ref.js'\nimport { type Condition } from '~/src/conditions/condition.js'\nimport { type Coordinator } from '~/src/conditions/enums.js'\nimport { toPresentationString, toExpression } from '~/src/conditions/helpers.js'\nimport { type ConditionGroupData } from '~/src/conditions/types.js'\n\nexport class ConditionGroup {\n conditions: (Condition | ConditionRef | ConditionGroup)[]\n\n constructor(conditions: (Condition | ConditionRef | ConditionGroup)[] = []) {\n if (!Array.isArray(conditions) || conditions.length < 2) {\n throw Error('Cannot construct a condition group from a single condition')\n }\n\n this.conditions = conditions\n }\n\n coordinatorString(): string {\n return this.conditions[0].coordinatorString()\n }\n\n conditionString(): string {\n const copy = [...this.conditions]\n copy.splice(0, 1)\n return `(${this.conditions[0].conditionString()} ${copy\n .map((condition) => toPresentationString(condition))\n .join(' ')})`\n }\n\n conditionExpression(): string {\n const copy = [...this.conditions]\n copy.splice(0, 1)\n return `(${this.conditions[0].conditionExpression()} ${copy\n .map((condition) => toExpression(condition))\n .join(' ')})`\n }\n\n asFirstCondition() {\n this.conditions[0].asFirstCondition()\n return this\n }\n\n getCoordinator(): Coordinator | undefined {\n return this.conditions[0].getCoordinator()\n }\n\n setCoordinator(coordinator?: Coordinator) {\n this.conditions[0].setCoordinator(coordinator)\n }\n\n isGroup() {\n return true\n }\n\n getGroupedConditions(): (Condition | ConditionRef | ConditionGroup)[] {\n return this.conditions.map((condition) => condition.clone())\n }\n\n clone(): ConditionGroup {\n return ConditionGroup.from(this)\n }\n\n toJSON(): ConditionGroupData {\n const { conditions } = this.clone()\n\n return structuredClone({\n conditions: conditions.map((condition) => condition.toJSON())\n })\n }\n\n static from(obj: ConditionGroupData | ConditionGroup): ConditionGroup {\n return new ConditionGroup(\n obj.conditions.map((condition) => {\n return 'clone' in condition\n ? condition.clone()\n : conditionFrom(condition)\n })\n )\n }\n}\n"],"mappings":"AAAA,SAASA,aAAa;AAItB,SAASC,oBAAoB,EAAEC,YAAY;AAG3C,OAAO,MAAMC,cAAc,CAAC;EAC1BC,UAAU;EAEVC,WAAWA,CAACD,UAAyD,GAAG,EAAE,EAAE;IAC1E,IAAI,CAACE,KAAK,CAACC,OAAO,CAACH,UAAU,CAAC,IAAIA,UAAU,CAACI,MAAM,GAAG,CAAC,EAAE;MACvD,MAAMC,KAAK,CAAC,4DAA4D,CAAC;IAC3E;IAEA,IAAI,CAACL,UAAU,GAAGA,UAAU;EAC9B;EAEAM,iBAAiBA,CAAA,EAAW;IAC1B,OAAO,IAAI,CAACN,UAAU,CAAC,CAAC,CAAC,CAACM,iBAAiB,CAAC,CAAC;EAC/C;EAEAC,eAAeA,CAAA,EAAW;IACxB,MAAMC,IAAI,GAAG,CAAC,GAAG,IAAI,CAACR,UAAU,CAAC;IACjCQ,IAAI,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,IAAI,IAAI,CAACT,UAAU,CAAC,CAAC,CAAC,CAACO,eAAe,CAAC,CAAC,IAAIC,IAAI,CACpDE,GAAG,CAAEC,SAAS,IAAKd,oBAAoB,CAACc,SAAS,CAAC,CAAC,CACnDC,IAAI,CAAC,GAAG,CAAC,GAAG;EACjB;EAEAC,mBAAmBA,CAAA,EAAW;IAC5B,MAAML,IAAI,GAAG,CAAC,GAAG,IAAI,CAACR,UAAU,CAAC;IACjCQ,IAAI,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,IAAI,IAAI,CAACT,UAAU,CAAC,CAAC,CAAC,CAACa,mBAAmB,CAAC,CAAC,IAAIL,IAAI,CACxDE,GAAG,CAAEC,SAAS,IAAKb,YAAY,CAACa,SAAS,CAAC,CAAC,CAC3CC,IAAI,CAAC,GAAG,CAAC,GAAG;EACjB;EAEAE,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAACd,UAAU,CAAC,CAAC,CAAC,CAACc,gBAAgB,CAAC,CAAC;IACrC,OAAO,IAAI;EACb;EAEAC,cAAcA,CAAA,EAA4B;IACxC,OAAO,IAAI,CAACf,UAAU,CAAC,CAAC,CAAC,CAACe,cAAc,CAAC,CAAC;EAC5C;EAEAC,cAAcA,CAACC,WAAyB,EAAE;IACxC,IAAI,CAACjB,UAAU,CAAC,CAAC,CAAC,CAACgB,cAAc,CAACC,WAAW,CAAC;EAChD;EAEAC,OAAOA,CAAA,EAAG;IACR,OAAO,IAAI;EACb;EAEAC,oBAAoBA,CAAA,EAAkD;IACpE,OAAO,IAAI,CAACnB,UAAU,CAACU,GAAG,CAAEC,SAAS,IAAKA,SAAS,CAACS,KAAK,CAAC,CAAC,CAAC;EAC9D;EAEAA,KAAKA,CAAA,EAAmB;IACtB,OAAOrB,cAAc,CAACsB,IAAI,CAAC,IAAI,CAAC;EAClC;EAEAC,MAAMA,CAAA,EAAuB;IAC3B,MAAM;MAAEtB;IAAW,CAAC,GAAG,IAAI,CAACoB,KAAK,CAAC,CAAC;IAEnC,OAAOG,eAAe,CAAC;MACrBvB,UAAU,EAAEA,UAAU,CAACU,GAAG,CAAEC,SAAS,IAAKA,SAAS,CAACW,MAAM,CAAC,CAAC;IAC9D,CAAC,CAAC;EACJ;EAEA,OAAOD,IAAIA,CAACG,GAAwC,EAAkB;IACpE,OAAO,IAAIzB,cAAc,CACvByB,GAAG,CAACxB,UAAU,CAACU,GAAG,CAAEC,SAAS,IAAK;MAChC,OAAO,OAAO,IAAIA,SAAS,GACvBA,SAAS,CAACS,KAAK,CAAC,CAAC,GACjBxB,aAAa,CAACe,SAAS,CAAC;IAC9B,CAAC,CACH,CAAC;EACH;AACF","ignoreList":[]}
@@ -1,11 +1,9 @@
1
- import { ConditionField } from "./condition-field.js";
2
1
  import { ConditionGroupDef } from "./condition-group-def.js";
3
2
  import { ConditionGroup } from "./condition-group.js";
4
3
  import { ConditionRef } from "./condition-ref.js";
5
- import { conditionValueFrom } from "./condition-values.js";
6
4
  import { Condition } from "./condition.js";
7
5
  import { Coordinator } from "./enums.js";
8
- import { toPresentationString, toExpression } from "./helpers.js";
6
+ import { toPresentationString, toExpression, hasConditionGroup, hasConditionName } from "./helpers.js";
9
7
  export class ConditionsModel {
10
8
  #groupedConditions = [];
11
9
  #userGroupedConditions = [];
@@ -165,7 +163,7 @@ export class ConditionsModel {
165
163
  const conditions = this.#userGroupedConditions;
166
164
  return {
167
165
  name: name ?? '',
168
- conditions: conditions.map(it => it.clone())
166
+ conditions: conditions.map(it => it.toJSON())
169
167
  };
170
168
  }
171
169
 
@@ -176,18 +174,18 @@ export class ConditionsModel {
176
174
  }
177
175
  const toReturn = new ConditionsModel();
178
176
  toReturn.#conditionName = obj.name;
179
- toReturn.#userGroupedConditions = obj.conditions.map(condition => conditionFrom(condition));
177
+ toReturn.#userGroupedConditions = obj.conditions.map(conditionFrom);
180
178
  toReturn.#groupedConditions = toReturn._applyGroups(toReturn.#userGroupedConditions);
181
179
  return toReturn;
182
180
  }
183
181
  }
184
- function conditionFrom(it) {
185
- if ('conditions' in it) {
186
- return new ConditionGroup(it.conditions.map(condition => conditionFrom(condition)));
182
+ export function conditionFrom(it) {
183
+ if (hasConditionGroup(it)) {
184
+ return new ConditionGroup(it.conditions.map(conditionFrom));
187
185
  }
188
- if ('conditionName' in it) {
189
- return new ConditionRef(it.conditionName, it.conditionDisplayName, it.coordinator);
186
+ if (hasConditionName(it)) {
187
+ return ConditionRef.from(it);
190
188
  }
191
- return new Condition(ConditionField.from(it.field), it.operator, conditionValueFrom(it.value), it.coordinator);
189
+ return Condition.from(it);
192
190
  }
193
191
  //# sourceMappingURL=condition-model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"condition-model.js","names":["ConditionField","ConditionGroupDef","ConditionGroup","ConditionRef","conditionValueFrom","Condition","Coordinator","toPresentationString","toExpression","ConditionsModel","groupedConditions","userGroupedConditions","conditionName","undefined","clone","toReturn","map","it","clear","name","add","condition","coordinatorExpected","length","getCoordinator","Error","push","_applyGroups","replace","index","splice","remove","indexes","filter","_condition","includes","asFirstCondition","addGroups","groupDefs","_group","splitGroup","_ungroup","moveEarlier","switchCoordinators","moveLater","setCoordinator","asPerUserGroupings","hasConditions","lastIndex","join","correctedUserGroups","conditions","_autoGroupDefs","reduce","groups","groupDef","find","contains","startsWith","groupConditions","applyTo","splitIndex","isGroup","copy","getGroupedConditions","orPositions","forEach","OR","hasOr","hasAnd","AND","start","position","thisIsTheLastOr","thereAreMoreConditions","toJSON","from","obj","conditionFrom","conditionDisplayName","coordinator","field","operator","value"],"sources":["../../../src/conditions/condition-model.ts"],"sourcesContent":["import { ConditionField } from '~/src/conditions/condition-field.js'\nimport { ConditionGroupDef } from '~/src/conditions/condition-group-def.js'\nimport { ConditionGroup } from '~/src/conditions/condition-group.js'\nimport { ConditionRef } from '~/src/conditions/condition-ref.js'\nimport { conditionValueFrom } from '~/src/conditions/condition-values.js'\nimport { Condition } from '~/src/conditions/condition.js'\nimport { Coordinator } from '~/src/conditions/enums.js'\nimport { toPresentationString, toExpression } from '~/src/conditions/helpers.js'\nimport {\n type ConditionData,\n type ConditionGroupData,\n type ConditionRefData,\n type ConditionsModelData\n} from '~/src/conditions/types.js'\n\nexport class ConditionsModel {\n #groupedConditions: (Condition | ConditionRef | ConditionGroup)[] = []\n #userGroupedConditions: (Condition | ConditionRef | ConditionGroup)[] = []\n #conditionName: string | undefined = undefined\n\n clone() {\n const toReturn = new ConditionsModel()\n toReturn.#groupedConditions = this.#groupedConditions.map((it) =>\n it.clone()\n )\n toReturn.#userGroupedConditions = this.#userGroupedConditions.map((it) =>\n it.clone()\n )\n toReturn.#conditionName = this.#conditionName\n return toReturn\n }\n\n clear() {\n this.#userGroupedConditions = []\n this.#groupedConditions = []\n this.#conditionName = undefined\n return this\n }\n\n set name(name) {\n this.#conditionName = name\n }\n\n get name() {\n return this.#conditionName\n }\n\n add(condition: Condition | ConditionRef) {\n const coordinatorExpected = this.#userGroupedConditions.length !== 0\n\n if (condition.getCoordinator() && !coordinatorExpected) {\n throw Error('No coordinator allowed on the first condition')\n } else if (!condition.getCoordinator() && coordinatorExpected) {\n throw Error('Coordinator must be present on subsequent conditions')\n }\n\n this.#userGroupedConditions.push(condition)\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n\n return this\n }\n\n replace(index: number, condition: Condition) {\n const coordinatorExpected = index !== 0\n\n if (condition.getCoordinator() && !coordinatorExpected) {\n throw Error('No coordinator allowed on the first condition')\n } else if (!condition.getCoordinator() && coordinatorExpected) {\n throw Error('Coordinator must be present on subsequent conditions')\n } else if (index >= this.#userGroupedConditions.length) {\n throw Error(\n `Cannot replace condition ${index} as no such condition exists`\n )\n }\n\n this.#userGroupedConditions.splice(index, 1, condition)\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n\n return this\n }\n\n remove(indexes: number[]) {\n this.#userGroupedConditions = this.#userGroupedConditions\n .filter((_condition, index) => !indexes.includes(index))\n .map((condition, index) =>\n index === 0 ? condition.asFirstCondition() : condition\n )\n\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n return this\n }\n\n addGroups(groupDefs: ConditionGroupDef[]) {\n this.#userGroupedConditions = this._group(\n this.#userGroupedConditions,\n groupDefs\n )\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n return this\n }\n\n splitGroup(index: number) {\n this.#userGroupedConditions = this._ungroup(\n this.#userGroupedConditions,\n index\n )\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n return this\n }\n\n moveEarlier(index: number) {\n if (index > 0 && index < this.#userGroupedConditions.length) {\n this.#userGroupedConditions.splice(\n index - 1,\n 0,\n this.#userGroupedConditions.splice(index, 1)[0]\n )\n if (index === 1) {\n this.switchCoordinators()\n }\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n }\n return this\n }\n\n moveLater(index: number) {\n if (index >= 0 && index < this.#userGroupedConditions.length - 1) {\n this.#userGroupedConditions.splice(\n index + 1,\n 0,\n this.#userGroupedConditions.splice(index, 1)[0]\n )\n if (index === 0) {\n this.switchCoordinators()\n }\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n }\n return this\n }\n\n switchCoordinators() {\n this.#userGroupedConditions[1].setCoordinator(\n this.#userGroupedConditions[0].getCoordinator()\n )\n this.#userGroupedConditions[0].setCoordinator()\n }\n\n get asPerUserGroupings() {\n return [...this.#userGroupedConditions]\n }\n\n get hasConditions() {\n return this.#userGroupedConditions.length > 0\n }\n\n get lastIndex() {\n return this.#userGroupedConditions.length - 1\n }\n\n toPresentationString() {\n return this.#groupedConditions\n .map((condition) => toPresentationString(condition))\n .join(' ')\n }\n\n toExpression() {\n return this.#groupedConditions\n .map((condition) => toExpression(condition))\n .join(' ')\n }\n\n _applyGroups(\n userGroupedConditions: (Condition | ConditionRef | ConditionGroup)[]\n ) {\n const correctedUserGroups = userGroupedConditions.map((condition) =>\n condition instanceof ConditionGroup && condition.conditions.length > 2\n ? new ConditionGroup(\n this._group(\n condition.conditions,\n this._autoGroupDefs(condition.conditions)\n )\n )\n : condition\n )\n\n return this._group(\n correctedUserGroups,\n this._autoGroupDefs(correctedUserGroups)\n )\n }\n\n _group(\n conditions: (Condition | ConditionRef | ConditionGroup)[],\n groupDefs: ConditionGroupDef[]\n ) {\n return conditions.reduce<(Condition | ConditionRef | ConditionGroup)[]>(\n (groups, condition, index, conditions) => {\n const groupDef = groupDefs.find((groupDef) => groupDef.contains(index))\n\n if (groupDef) {\n if (groupDef.startsWith(index)) {\n const groupConditions = groupDef.applyTo(conditions)\n groups.push(new ConditionGroup(groupConditions))\n }\n } else {\n groups.push(condition)\n }\n\n return groups\n },\n []\n )\n }\n\n _ungroup(\n conditions: (Condition | ConditionRef | ConditionGroup)[],\n splitIndex: number\n ) {\n if (conditions[splitIndex].isGroup()) {\n const copy = [...conditions]\n copy.splice(\n splitIndex,\n 1,\n ...conditions[splitIndex].getGroupedConditions()\n )\n return copy\n }\n return conditions\n }\n\n _autoGroupDefs(conditions: (Condition | ConditionRef | ConditionGroup)[]) {\n const orPositions: number[] = []\n\n conditions.forEach((condition, index) => {\n if (condition.getCoordinator() === Coordinator.OR) {\n orPositions.push(index)\n }\n })\n\n const hasOr = orPositions.length > 0\n const hasAnd = !!conditions.find(\n (condition) => condition.getCoordinator() === Coordinator.AND\n )\n\n if (hasAnd && hasOr) {\n let start = 0\n const groupDefs: ConditionGroupDef[] = []\n orPositions.forEach((position, index) => {\n if (start < position - 1) {\n groupDefs.push(new ConditionGroupDef(start, position - 1))\n }\n const thisIsTheLastOr = orPositions.length === index + 1\n const thereAreMoreConditions = conditions.length - 1 > position\n if (thisIsTheLastOr && thereAreMoreConditions) {\n groupDefs.push(new ConditionGroupDef(position, conditions.length - 1))\n }\n start = position\n })\n return groupDefs\n }\n\n return []\n }\n\n toJSON(): ConditionsModelData {\n const name = this.#conditionName\n const conditions = this.#userGroupedConditions\n return {\n name: name ?? '',\n conditions: conditions.map((it) => it.clone())\n }\n }\n\n // TODO:- why is this not a constructor?\n static from(obj: ConditionsModel | ConditionsModelData) {\n if (obj instanceof ConditionsModel) {\n return obj\n }\n const toReturn = new ConditionsModel()\n toReturn.#conditionName = obj.name\n toReturn.#userGroupedConditions = obj.conditions.map((condition) =>\n conditionFrom(condition)\n )\n toReturn.#groupedConditions = toReturn._applyGroups(\n toReturn.#userGroupedConditions\n )\n return toReturn\n }\n}\n\nfunction conditionFrom(\n it: ConditionData | ConditionRefData | ConditionGroupData\n): Condition | ConditionRef | ConditionGroup {\n if ('conditions' in it) {\n return new ConditionGroup(\n it.conditions.map((condition) => conditionFrom(condition))\n )\n }\n\n if ('conditionName' in it) {\n return new ConditionRef(\n it.conditionName,\n it.conditionDisplayName,\n it.coordinator\n )\n }\n\n return new Condition(\n ConditionField.from(it.field),\n it.operator,\n conditionValueFrom(it.value),\n it.coordinator\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"condition-model.js","names":["ConditionGroupDef","ConditionGroup","ConditionRef","Condition","Coordinator","toPresentationString","toExpression","hasConditionGroup","hasConditionName","ConditionsModel","groupedConditions","userGroupedConditions","conditionName","undefined","clone","toReturn","map","it","clear","name","add","condition","coordinatorExpected","length","getCoordinator","Error","push","_applyGroups","replace","index","splice","remove","indexes","filter","_condition","includes","asFirstCondition","addGroups","groupDefs","_group","splitGroup","_ungroup","moveEarlier","switchCoordinators","moveLater","setCoordinator","asPerUserGroupings","hasConditions","lastIndex","join","correctedUserGroups","conditions","_autoGroupDefs","reduce","groups","groupDef","find","contains","startsWith","groupConditions","applyTo","splitIndex","isGroup","copy","getGroupedConditions","orPositions","forEach","OR","hasOr","hasAnd","AND","start","position","thisIsTheLastOr","thereAreMoreConditions","toJSON","from","obj","conditionFrom"],"sources":["../../../src/conditions/condition-model.ts"],"sourcesContent":["import { ConditionGroupDef } from '~/src/conditions/condition-group-def.js'\nimport { ConditionGroup } from '~/src/conditions/condition-group.js'\nimport { ConditionRef } from '~/src/conditions/condition-ref.js'\nimport { Condition } from '~/src/conditions/condition.js'\nimport { Coordinator } from '~/src/conditions/enums.js'\nimport {\n toPresentationString,\n toExpression,\n hasConditionGroup,\n hasConditionName\n} from '~/src/conditions/helpers.js'\nimport {\n type ConditionData,\n type ConditionGroupData,\n type ConditionRefData,\n type ConditionsModelData\n} from '~/src/conditions/types.js'\n\nexport class ConditionsModel {\n #groupedConditions: (Condition | ConditionRef | ConditionGroup)[] = []\n #userGroupedConditions: (Condition | ConditionRef | ConditionGroup)[] = []\n #conditionName: string | undefined = undefined\n\n clone() {\n const toReturn = new ConditionsModel()\n toReturn.#groupedConditions = this.#groupedConditions.map((it) =>\n it.clone()\n )\n toReturn.#userGroupedConditions = this.#userGroupedConditions.map((it) =>\n it.clone()\n )\n toReturn.#conditionName = this.#conditionName\n return toReturn\n }\n\n clear() {\n this.#userGroupedConditions = []\n this.#groupedConditions = []\n this.#conditionName = undefined\n return this\n }\n\n set name(name) {\n this.#conditionName = name\n }\n\n get name() {\n return this.#conditionName\n }\n\n add(condition: Condition | ConditionRef | ConditionGroup) {\n const coordinatorExpected = this.#userGroupedConditions.length !== 0\n\n if (condition.getCoordinator() && !coordinatorExpected) {\n throw Error('No coordinator allowed on the first condition')\n } else if (!condition.getCoordinator() && coordinatorExpected) {\n throw Error('Coordinator must be present on subsequent conditions')\n }\n\n this.#userGroupedConditions.push(condition)\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n\n return this\n }\n\n replace(index: number, condition: Condition | ConditionRef | ConditionGroup) {\n const coordinatorExpected = index !== 0\n\n if (condition.getCoordinator() && !coordinatorExpected) {\n throw Error('No coordinator allowed on the first condition')\n } else if (!condition.getCoordinator() && coordinatorExpected) {\n throw Error('Coordinator must be present on subsequent conditions')\n } else if (index >= this.#userGroupedConditions.length) {\n throw Error(\n `Cannot replace condition ${index} as no such condition exists`\n )\n }\n\n this.#userGroupedConditions.splice(index, 1, condition)\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n\n return this\n }\n\n remove(indexes: number[]) {\n this.#userGroupedConditions = this.#userGroupedConditions\n .filter((_condition, index) => !indexes.includes(index))\n .map((condition, index) =>\n index === 0 ? condition.asFirstCondition() : condition\n )\n\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n return this\n }\n\n addGroups(groupDefs: ConditionGroupDef[]) {\n this.#userGroupedConditions = this._group(\n this.#userGroupedConditions,\n groupDefs\n )\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n return this\n }\n\n splitGroup(index: number) {\n this.#userGroupedConditions = this._ungroup(\n this.#userGroupedConditions,\n index\n )\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n return this\n }\n\n moveEarlier(index: number) {\n if (index > 0 && index < this.#userGroupedConditions.length) {\n this.#userGroupedConditions.splice(\n index - 1,\n 0,\n this.#userGroupedConditions.splice(index, 1)[0]\n )\n if (index === 1) {\n this.switchCoordinators()\n }\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n }\n return this\n }\n\n moveLater(index: number) {\n if (index >= 0 && index < this.#userGroupedConditions.length - 1) {\n this.#userGroupedConditions.splice(\n index + 1,\n 0,\n this.#userGroupedConditions.splice(index, 1)[0]\n )\n if (index === 0) {\n this.switchCoordinators()\n }\n this.#groupedConditions = this._applyGroups(this.#userGroupedConditions)\n }\n return this\n }\n\n switchCoordinators() {\n this.#userGroupedConditions[1].setCoordinator(\n this.#userGroupedConditions[0].getCoordinator()\n )\n this.#userGroupedConditions[0].setCoordinator()\n }\n\n get asPerUserGroupings() {\n return [...this.#userGroupedConditions]\n }\n\n get hasConditions() {\n return this.#userGroupedConditions.length > 0\n }\n\n get lastIndex() {\n return this.#userGroupedConditions.length - 1\n }\n\n toPresentationString() {\n return this.#groupedConditions\n .map((condition) => toPresentationString(condition))\n .join(' ')\n }\n\n toExpression() {\n return this.#groupedConditions\n .map((condition) => toExpression(condition))\n .join(' ')\n }\n\n _applyGroups(\n userGroupedConditions: (Condition | ConditionRef | ConditionGroup)[]\n ) {\n const correctedUserGroups = userGroupedConditions.map((condition) =>\n condition instanceof ConditionGroup && condition.conditions.length > 2\n ? new ConditionGroup(\n this._group(\n condition.conditions,\n this._autoGroupDefs(condition.conditions)\n )\n )\n : condition\n )\n\n return this._group(\n correctedUserGroups,\n this._autoGroupDefs(correctedUserGroups)\n )\n }\n\n _group(\n conditions: (Condition | ConditionRef | ConditionGroup)[],\n groupDefs: ConditionGroupDef[]\n ) {\n return conditions.reduce<(Condition | ConditionRef | ConditionGroup)[]>(\n (groups, condition, index, conditions) => {\n const groupDef = groupDefs.find((groupDef) => groupDef.contains(index))\n\n if (groupDef) {\n if (groupDef.startsWith(index)) {\n const groupConditions = groupDef.applyTo(conditions)\n groups.push(new ConditionGroup(groupConditions))\n }\n } else {\n groups.push(condition)\n }\n\n return groups\n },\n []\n )\n }\n\n _ungroup(\n conditions: (Condition | ConditionRef | ConditionGroup)[],\n splitIndex: number\n ) {\n if (conditions[splitIndex].isGroup()) {\n const copy = [...conditions]\n copy.splice(\n splitIndex,\n 1,\n ...conditions[splitIndex].getGroupedConditions()\n )\n return copy\n }\n return conditions\n }\n\n _autoGroupDefs(conditions: (Condition | ConditionRef | ConditionGroup)[]) {\n const orPositions: number[] = []\n\n conditions.forEach((condition, index) => {\n if (condition.getCoordinator() === Coordinator.OR) {\n orPositions.push(index)\n }\n })\n\n const hasOr = orPositions.length > 0\n const hasAnd = !!conditions.find(\n (condition) => condition.getCoordinator() === Coordinator.AND\n )\n\n if (hasAnd && hasOr) {\n let start = 0\n const groupDefs: ConditionGroupDef[] = []\n orPositions.forEach((position, index) => {\n if (start < position - 1) {\n groupDefs.push(new ConditionGroupDef(start, position - 1))\n }\n const thisIsTheLastOr = orPositions.length === index + 1\n const thereAreMoreConditions = conditions.length - 1 > position\n if (thisIsTheLastOr && thereAreMoreConditions) {\n groupDefs.push(new ConditionGroupDef(position, conditions.length - 1))\n }\n start = position\n })\n return groupDefs\n }\n\n return []\n }\n\n toJSON() {\n const name = this.#conditionName\n const conditions = this.#userGroupedConditions\n return {\n name: name ?? '',\n conditions: conditions.map((it) => it.toJSON())\n }\n }\n\n // TODO:- why is this not a constructor?\n static from(obj: ConditionsModel | ConditionsModelData) {\n if (obj instanceof ConditionsModel) {\n return obj\n }\n const toReturn = new ConditionsModel()\n toReturn.#conditionName = obj.name\n toReturn.#userGroupedConditions = obj.conditions.map(conditionFrom)\n toReturn.#groupedConditions = toReturn._applyGroups(\n toReturn.#userGroupedConditions\n )\n return toReturn\n }\n}\n\nexport function conditionFrom(\n it: ConditionData | ConditionRefData | ConditionGroupData\n): Condition | ConditionRef | ConditionGroup {\n if (hasConditionGroup(it)) {\n return new ConditionGroup(it.conditions.map(conditionFrom))\n }\n\n if (hasConditionName(it)) {\n return ConditionRef.from(it)\n }\n\n return Condition.from(it)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,8 +6,11 @@ const defaultOperators = {
6
6
  [OperatorName.Is]: inline(Operator.Is),
7
7
  [OperatorName.IsNot]: inline(Operator.IsNot)
8
8
  };
9
- function withDefaults(param) {
10
- return Object.assign({}, param, defaultOperators);
9
+ function withDefaults(operators) {
10
+ return {
11
+ ...defaultOperators,
12
+ ...operators
13
+ };
11
14
  }
12
15
  const textFieldOperators = {
13
16
  [OperatorName.IsLongerThan]: lengthIs(Operator.IsMoreThan),
@@ -53,7 +56,7 @@ export function getOperatorNames(fieldType) {
53
56
  if (!conditionals) {
54
57
  return [];
55
58
  }
56
- return Object.keys(conditionals).sort();
59
+ return Object.keys(conditionals);
57
60
  }
58
61
  export function getExpression(fieldType, fieldName, operator, value) {
59
62
  const conditionals = getConditionals(fieldType);
@@ -1 +1 @@
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":"AAAA,SAASA,iBAAiB;AAE1B,SAASC,aAAa;AAEtB,SACEC,cAAc,EACdC,iBAAiB;AAEnB,SACEC,aAAa,EACbC,cAAc,EACdC,QAAQ,EACRC,YAAY;AAOd,MAAMC,gBAAgB,GAAG;EACvB,CAACD,YAAY,CAACE,EAAE,GAAGC,MAAM,CAACJ,QAAQ,CAACG,EAAE,CAAC;EACtC,CAACF,YAAY,CAACI,KAAK,GAAGD,MAAM,CAACJ,QAAQ,CAACK,KAAK;AAC7C,CAAC;AAED,SAASC,YAAYA,CAAIC,KAAQ,EAAE;EACjC,OAAOC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAEF,KAAK,EAAEL,gBAAgB,CAAC;AACnD;AAEA,MAAMQ,kBAAkB,GAAG;EACzB,CAACT,YAAY,CAACU,YAAY,GAAGC,QAAQ,CAACZ,QAAQ,CAACa,UAAU,CAAC;EAC1D,CAACZ,YAAY,CAACa,aAAa,GAAGF,QAAQ,CAACZ,QAAQ,CAACe,UAAU,CAAC;EAC3D,CAACd,YAAY,CAACe,SAAS,GAAGJ,QAAQ,CAACZ,QAAQ,CAACG,EAAE;AAChD,CAAC;AAED,MAAMc,qBAAqB,GAAG;EAC5B,CAAChB,YAAY,CAACE,EAAE,GAAGe,YAAY,CAAClB,QAAQ,CAACG,EAAE,CAAC;EAC5C,CAACF,YAAY,CAACI,KAAK,GAAGa,YAAY,CAAClB,QAAQ,CAACK,KAAK,CAAC;EAClD,CAACJ,YAAY,CAACkB,QAAQ,GAAGD,YAAY,CAAClB,QAAQ,CAACe,UAAU,CAAC;EAC1D,CAACd,YAAY,CAACmB,OAAO,GAAGF,YAAY,CAAClB,QAAQ,CAACa,UAAU;AAC1D,CAAC;AAED,MAAMQ,qBAAqB,GAAG;EAC5B,CAACpB,YAAY,CAACqB,SAAS,GAAGC,YAAY,CAACvB,QAAQ,CAACwB,QAAQ,EAAExB,QAAQ,CAACsB,SAAS,CAAC;EAC7E,CAACrB,YAAY,CAACuB,QAAQ,GAAGD,YAAY,CAACvB,QAAQ,CAACsB,SAAS,EAAEtB,QAAQ,CAACwB,QAAQ,CAAC;EAC5E,CAACvB,YAAY,CAACc,UAAU,GAAGQ,YAAY,CACrCvB,QAAQ,CAACa,UAAU,EACnBb,QAAQ,CAACe,UACX,CAAC;EACD,CAACd,YAAY,CAACY,UAAU,GAAGU,YAAY,CACrCvB,QAAQ,CAACe,UAAU,EACnBf,QAAQ,CAACa,UACX;AACF,CAAC;AAED,OAAO,MAAMY,eAAe,GAAG;EAC7B,CAAC9B,aAAa,CAAC+B,WAAW,GAAGxB,gBAAgB;EAC7C,CAACP,aAAa,CAACgC,eAAe,GAAG;IAC/B,CAAC1B,YAAY,CAAC2B,QAAQ,GAAGC,aAAa,CAAC7B,QAAQ,CAAC4B,QAAQ,CAAC;IACzD,CAAC3B,YAAY,CAAC6B,cAAc,GAAGC,GAAG,CAACF,aAAa,CAAC7B,QAAQ,CAAC4B,QAAQ,CAAC;EACrE,CAAC;EACD,CAACjC,aAAa,CAACqC,WAAW,GAAG1B,YAAY,CAAC;IACxC,CAACL,YAAY,CAACqB,SAAS,GAAGlB,MAAM,CAACJ,QAAQ,CAACsB,SAAS,CAAC;IACpD,CAACrB,YAAY,CAACuB,QAAQ,GAAGpB,MAAM,CAACJ,QAAQ,CAACwB,QAAQ,CAAC;IAClD,CAACvB,YAAY,CAACc,UAAU,GAAGX,MAAM,CAACJ,QAAQ,CAACe,UAAU,CAAC;IACtD,CAACd,YAAY,CAACY,UAAU,GAAGT,MAAM,CAACJ,QAAQ,CAACa,UAAU;EACvD,CAAC,CAAC;EACF,CAAClB,aAAa,CAACsC,cAAc,GAAG;IAC9B,GAAGhB,qBAAqB;IACxB,GAAGI;EACL,CAAC;EACD,CAAC1B,aAAa,CAACuC,SAAS,GAAG5B,YAAY,CAACI,kBAAkB,CAAC;EAC3D,CAACf,aAAa,CAACwC,kBAAkB,GAAG7B,YAAY,CAACI,kBAAkB,CAAC;EACpE,CAACf,aAAa,CAACyC,iBAAiB,GAAG9B,YAAY,CAACI,kBAAkB,CAAC;EACnE,CAACf,aAAa,CAAC0C,WAAW,GAAGnC,gBAAgB;EAC7C,CAACP,aAAa,CAAC2C,UAAU,GAAGpC;AAC9B,CAAC;AAED,OAAO,SAASqC,gBAAgBA,CAACC,SAAyB,EAAE;EAC1D,MAAMC,YAAY,GAAGC,eAAe,CAACF,SAAS,CAAC;EAC/C,IAAI,CAACC,YAAY,EAAE;IACjB,OAAO,EAAE;EACX;EAEA,OAAOjC,MAAM,CAACmC,IAAI,CAACF,YAAY,CAAC,CAACG,IAAI,CAAC,CAAC;AACzC;AAEA,OAAO,SAASC,aAAaA,CAC3BL,SAAwB,EACxBM,SAAiB,EACjBC,QAAsB,EACtBC,KAAyC,EACzC;EACA,MAAMP,YAAY,GAAGC,eAAe,CAACF,SAAS,CAAC;EAC/C,IAAI,CAACC,YAAY,EAAE;IACjB;EACF;EAEA,OAAOA,YAAY,CAACM,QAAQ,CAAC,EAAEE,UAAU,CACvC;IAAEC,IAAI,EAAEV,SAAS;IAAEW,IAAI,EAAEL;EAAU,CAAC,EACpCE,KACF,CAAC;AACH;AAEA,OAAO,SAASI,iBAAiBA,CAC/BZ,SAAwB,EACxBO,QAAsB,EACtB;EACA,OAAOL,eAAe,CAACF,SAAS,CAAC,GAAGO,QAAQ,CAAC;AAC/C;AAEA,SAASL,eAAeA,CACtBF,SAAyB,EACU;EACnC,IAAI,CAACA,SAAS,IAAI,CAAC9C,iBAAiB,CAAC8C,SAAS,CAAC,EAAE;IAC/C;EACF;EAEA,OAAOA,SAAS,IAAIf,eAAe,GAC/BA,eAAe,CAACe,SAAS,CAAC,GAC1BtC,gBAAgB;AACtB;AAEA,SAASE,MAAMA,CAAC2C,QAAkB,EAAsB;EACtD,OAAO;IACLE,UAAUA,CAACI,KAAK,EAAEL,KAAK,EAAE;MACvB,OAAO,GAAGK,KAAK,CAACF,IAAI,IAAIJ,QAAQ,IAAIO,WAAW,CAACD,KAAK,EAAEL,KAAK,CAAC,EAAE;IACjE;EACF,CAAC;AACH;AAEA,SAASpC,QAAQA,CAACmC,QAAkB,EAAsB;EACxD,OAAO;IACLE,UAAUA,CAACI,KAAK,EAAEL,KAAK,EAAE;MACvB,OAAO,UAAUK,KAAK,CAACF,IAAI,KAAKJ,QAAQ,IAAIO,WAAW,CAACD,KAAK,EAAEL,KAAK,CAAC,EAAE;IACzE;EACF,CAAC;AACH;AAEA,SAASnB,aAAaA,CAACkB,QAA2B,EAAsB;EACtE,OAAO;IACLE,UAAUA,CAACI,KAAK,EAAEL,KAAK,EAAE;MACvB,OAAO,GAAGM,WAAW,CAACD,KAAK,EAAEL,KAAK,CAAC,IAAID,QAAQ,IAAIM,KAAK,CAACF,IAAI,EAAE;IACjE;EACF,CAAC;AACH;AAEA,SAASpB,GAAGA,CAACwB,kBAAsC,EAAsB;EACvE,OAAO;IACLN,UAAUA,CAACI,KAAK,EAAEL,KAAK,EAAE;MACvB,OAAO,QAAQO,kBAAkB,CAACN,UAAU,CAACI,KAAK,EAAEL,KAAK,CAAC,GAAG;IAC/D;EACF,CAAC;AACH;AAEA,SAASM,WAAWA,CAClBD,KAAiC,EACjCL,KAAyC,EACzC;EACA,IACGK,KAAK,CAACH,IAAI,KAAKvD,aAAa,CAACsC,cAAc,IAC1Ce,KAAK,CAACE,IAAI,KAAKpD,aAAa,CAAC0D,YAAY,IAC3CH,KAAK,CAACH,IAAI,KAAKvD,aAAa,CAACqC,WAAW,IACxCqB,KAAK,CAACH,IAAI,KAAKvD,aAAa,CAAC2C,UAAU,EACvC;IACA,OAAOU,KAAK,CAACS,YAAY,CAAC,CAAC;EAC7B;EAEA,OAAO,IAAIT,KAAK,CAACS,YAAY,CAAC,CAAC,GAAG;AACpC;AAEA,OAAO,MAAMC,yBAAyB,GAAGlD,MAAM,CAACmC,IAAI,CAClD1B,qBACF,CAAmB;AAEnB,OAAO,MAAM0C,yBAAyB,GAAGnD,MAAM,CAACmC,IAAI,CAClDtB,qBACF,CAAmB;AAEnB,SAASH,YAAYA,CAAC6B,QAAkB,EAAsB;EAC5D,OAAO;IACLE,UAAUA,CAACI,KAAK,EAAEL,KAAK,EAAE;MACvB,IAAI,EAAEA,KAAK,YAAYpD,cAAc,CAAC,EAAE;QACtC,MAAM,IAAIgE,KAAK,CACb,0DACF,CAAC;MACH;MAEA,OAAO,GAAGP,KAAK,CAACF,IAAI,IAAIJ,QAAQ,IAAIO,WAAW,CAACD,KAAK,EAAEL,KAAK,CAAC,EAAE;IACjE;EACF,CAAC;AACH;AAEA,SAASzB,YAAYA,CACnBsC,YAAsB,EACtBC,cAAwB,EACJ;EACpB,OAAO;IACLb,UAAUA,CAACI,KAAK,EAAEL,KAAK,EAAE;MACvB,IAAI,EAAEA,KAAK,YAAYnD,iBAAiB,CAAC,EAAE;QACzC,MAAM,IAAI+D,KAAK,CACb,6DACF,CAAC;MACH;MAEA,MAAMG,MAAM,GAAGf,KAAK,CAACgB,SAAS,KAAKjE,cAAc,CAACkE,IAAI;MACtD,OAAO,GAAGZ,KAAK,CAACF,IAAI,IAAIY,MAAM,GAAGF,YAAY,GAAGC,cAAc,IAAIR,WAAW,CAACD,KAAK,EAAEL,KAAK,CAAC,EAAE;IAC/F;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"condition-operators.js","names":["isConditionalType","ComponentType","ConditionValue","RelativeDateValue","ConditionType","DateDirections","Operator","OperatorName","defaultOperators","Is","inline","IsNot","withDefaults","operators","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","Object","keys","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 { type Condition } from '~/src/conditions/condition.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>(operators: T) {\n return { ...defaultOperators, ...operators }\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) as OperatorName[]\n}\n\nexport function getExpression(\n fieldType: ComponentType,\n fieldName: string,\n operator: OperatorName,\n value: Condition['value']\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: Condition['value']\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":[]}
@@ -24,7 +24,13 @@ export class ConditionRef extends ConditionAbstract {
24
24
  return this.conditionName;
25
25
  }
26
26
  clone() {
27
- return new ConditionRef(this.conditionName, this.conditionDisplayName, this.coordinator);
27
+ return ConditionRef.from(this);
28
+ }
29
+ toJSON() {
30
+ return structuredClone(this.clone());
31
+ }
32
+ static from(obj) {
33
+ return new ConditionRef(obj.conditionName, obj.conditionDisplayName, obj.coordinator);
28
34
  }
29
35
  }
30
36
  //# sourceMappingURL=condition-ref.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"condition-ref.js","names":["ConditionAbstract","ConditionRef","conditionName","conditionDisplayName","constructor","coordinator","Error","asFirstCondition","_asFirstCondition","conditionString","conditionExpression","clone"],"sources":["../../../src/conditions/condition-ref.ts"],"sourcesContent":["import { ConditionAbstract } from '~/src/conditions/condition-abstract.js'\nimport { type Coordinator } from '~/src/conditions/enums.js'\n\nexport class ConditionRef extends ConditionAbstract {\n conditionName: string\n conditionDisplayName: string\n\n constructor(\n conditionName: string,\n conditionDisplayName: string,\n coordinator?: Coordinator\n ) {\n super(coordinator)\n\n if (typeof conditionName !== 'string') {\n throw new Error(\"ConditionRef param 'conditionName' must be a string\")\n }\n\n if (typeof conditionDisplayName !== 'string') {\n throw new Error(\n \"ConditionRef param 'conditionDisplayName' must be a string\"\n )\n }\n\n this.conditionName = conditionName\n this.conditionDisplayName = conditionDisplayName\n }\n\n asFirstCondition() {\n this._asFirstCondition()\n return this\n }\n\n conditionString() {\n return `'${this.conditionDisplayName}'`\n }\n\n conditionExpression() {\n return this.conditionName\n }\n\n clone() {\n return new ConditionRef(\n this.conditionName,\n this.conditionDisplayName,\n this.coordinator\n )\n }\n}\n"],"mappings":"AAAA,SAASA,iBAAiB;AAG1B,OAAO,MAAMC,YAAY,SAASD,iBAAiB,CAAC;EAClDE,aAAa;EACbC,oBAAoB;EAEpBC,WAAWA,CACTF,aAAqB,EACrBC,oBAA4B,EAC5BE,WAAyB,EACzB;IACA,KAAK,CAACA,WAAW,CAAC;IAElB,IAAI,OAAOH,aAAa,KAAK,QAAQ,EAAE;MACrC,MAAM,IAAII,KAAK,CAAC,qDAAqD,CAAC;IACxE;IAEA,IAAI,OAAOH,oBAAoB,KAAK,QAAQ,EAAE;MAC5C,MAAM,IAAIG,KAAK,CACb,4DACF,CAAC;IACH;IAEA,IAAI,CAACJ,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACC,oBAAoB,GAAGA,oBAAoB;EAClD;EAEAI,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAACC,iBAAiB,CAAC,CAAC;IACxB,OAAO,IAAI;EACb;EAEAC,eAAeA,CAAA,EAAG;IAChB,OAAO,IAAI,IAAI,CAACN,oBAAoB,GAAG;EACzC;EAEAO,mBAAmBA,CAAA,EAAG;IACpB,OAAO,IAAI,CAACR,aAAa;EAC3B;EAEAS,KAAKA,CAAA,EAAG;IACN,OAAO,IAAIV,YAAY,CACrB,IAAI,CAACC,aAAa,EAClB,IAAI,CAACC,oBAAoB,EACzB,IAAI,CAACE,WACP,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"file":"condition-ref.js","names":["ConditionAbstract","ConditionRef","conditionName","conditionDisplayName","constructor","coordinator","Error","asFirstCondition","_asFirstCondition","conditionString","conditionExpression","clone","from","toJSON","structuredClone","obj"],"sources":["../../../src/conditions/condition-ref.ts"],"sourcesContent":["import { ConditionAbstract } from '~/src/conditions/condition-abstract.js'\nimport { type Coordinator } from '~/src/conditions/enums.js'\nimport { type ConditionRefData } from '~/src/conditions/types.js'\n\nexport class ConditionRef extends ConditionAbstract {\n conditionName: string\n conditionDisplayName: string\n\n constructor(\n conditionName: string,\n conditionDisplayName: string,\n coordinator?: Coordinator\n ) {\n super(coordinator)\n\n if (typeof conditionName !== 'string') {\n throw new Error(\"ConditionRef param 'conditionName' must be a string\")\n }\n\n if (typeof conditionDisplayName !== 'string') {\n throw new Error(\n \"ConditionRef param 'conditionDisplayName' must be a string\"\n )\n }\n\n this.conditionName = conditionName\n this.conditionDisplayName = conditionDisplayName\n }\n\n asFirstCondition() {\n this._asFirstCondition()\n return this\n }\n\n conditionString() {\n return `'${this.conditionDisplayName}'`\n }\n\n conditionExpression() {\n return this.conditionName\n }\n\n clone() {\n return ConditionRef.from(this)\n }\n\n toJSON(): ConditionRefData {\n return structuredClone(this.clone())\n }\n\n static from(obj: ConditionRefData | ConditionRef) {\n return new ConditionRef(\n obj.conditionName,\n obj.conditionDisplayName,\n obj.coordinator\n )\n }\n}\n"],"mappings":"AAAA,SAASA,iBAAiB;AAI1B,OAAO,MAAMC,YAAY,SAASD,iBAAiB,CAAC;EAClDE,aAAa;EACbC,oBAAoB;EAEpBC,WAAWA,CACTF,aAAqB,EACrBC,oBAA4B,EAC5BE,WAAyB,EACzB;IACA,KAAK,CAACA,WAAW,CAAC;IAElB,IAAI,OAAOH,aAAa,KAAK,QAAQ,EAAE;MACrC,MAAM,IAAII,KAAK,CAAC,qDAAqD,CAAC;IACxE;IAEA,IAAI,OAAOH,oBAAoB,KAAK,QAAQ,EAAE;MAC5C,MAAM,IAAIG,KAAK,CACb,4DACF,CAAC;IACH;IAEA,IAAI,CAACJ,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACC,oBAAoB,GAAGA,oBAAoB;EAClD;EAEAI,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAACC,iBAAiB,CAAC,CAAC;IACxB,OAAO,IAAI;EACb;EAEAC,eAAeA,CAAA,EAAG;IAChB,OAAO,IAAI,IAAI,CAACN,oBAAoB,GAAG;EACzC;EAEAO,mBAAmBA,CAAA,EAAG;IACpB,OAAO,IAAI,CAACR,aAAa;EAC3B;EAEAS,KAAKA,CAAA,EAAG;IACN,OAAOV,YAAY,CAACW,IAAI,CAAC,IAAI,CAAC;EAChC;EAEAC,MAAMA,CAAA,EAAqB;IACzB,OAAOC,eAAe,CAAC,IAAI,CAACH,KAAK,CAAC,CAAC,CAAC;EACtC;EAEA,OAAOC,IAAIA,CAACG,GAAoC,EAAE;IAChD,OAAO,IAAId,YAAY,CACrBc,GAAG,CAACb,aAAa,EACjBa,GAAG,CAACZ,oBAAoB,EACxBY,GAAG,CAACV,WACN,CAAC;EACH;AACF","ignoreList":[]}
@@ -5,7 +5,7 @@ export class ConditionValue extends ConditionValueAbstract {
5
5
  value;
6
6
  display;
7
7
  constructor(value, display) {
8
- if (!value || typeof value !== 'string') {
8
+ if (typeof value !== 'string') {
9
9
  throw new Error("ConditionValue param 'value' must be a string");
10
10
  }
11
11
  if (display && typeof display !== 'string') {
@@ -22,12 +22,15 @@ export class ConditionValue extends ConditionValueAbstract {
22
22
  toExpression() {
23
23
  return this.value;
24
24
  }
25
- static from(obj) {
26
- return new ConditionValue(obj.value, obj.display);
27
- }
28
25
  clone() {
29
26
  return ConditionValue.from(this);
30
27
  }
28
+ toJSON() {
29
+ return structuredClone(this.clone());
30
+ }
31
+ static from(obj) {
32
+ return new ConditionValue(obj.value, obj.display);
33
+ }
31
34
  }
32
35
  export class RelativeDateValue extends ConditionValueAbstract {
33
36
  type;
@@ -54,14 +57,20 @@ export class RelativeDateValue extends ConditionValueAbstract {
54
57
  const period = this.direction === DateDirections.PAST ? 0 - Number(this.period) : this.period;
55
58
  return `dateForComparison(${period}, '${this.unit}')`;
56
59
  }
57
- static from(obj) {
58
- return new RelativeDateValue(obj.period, obj.unit, obj.direction);
59
- }
60
60
  clone() {
61
61
  return RelativeDateValue.from(this);
62
62
  }
63
+ toJSON() {
64
+ return structuredClone(this.clone());
65
+ }
66
+ static from(obj) {
67
+ return new RelativeDateValue(obj.period, obj.unit, obj.direction);
68
+ }
63
69
  }
64
70
  export function conditionValueFrom(obj) {
71
+ if ('clone' in obj) {
72
+ return obj.clone();
73
+ }
65
74
  switch (obj.type) {
66
75
  case ConditionType.Value:
67
76
  return ConditionValue.from(obj);
@@ -1 +1 @@
1
- {"version":3,"file":"condition-values.js","names":["ConditionValueAbstract","ConditionType","DateDirections","ConditionValue","type","value","display","constructor","Error","Value","toPresentationString","toExpression","from","obj","clone","RelativeDateValue","period","unit","direction","Object","values","includes","RelativeDate","PAST","Number","conditionValueFrom"],"sources":["../../../src/conditions/condition-values.ts"],"sourcesContent":["import { ConditionValueAbstract } from '~/src/conditions/condition-value-abstract.js'\nimport { ConditionType, DateDirections } from '~/src/conditions/enums.js'\nimport { type DateUnits } from '~/src/conditions/enums.js'\nimport {\n type ConditionValueData,\n type RelativeDateValueData\n} from '~/src/conditions/types.js'\n\nexport class ConditionValue extends ConditionValueAbstract {\n type: ConditionType.Value\n value: string\n display: string\n\n constructor(value: string, display?: string) {\n if (!value || typeof value !== 'string') {\n throw new Error(\"ConditionValue param 'value' must be a string\")\n }\n\n if (display && typeof display !== 'string') {\n throw new Error(\"ConditionValue param 'display' must be a string\")\n }\n\n super()\n\n this.type = ConditionType.Value\n this.value = value\n this.display = display ?? value\n }\n\n toPresentationString() {\n return this.display\n }\n\n toExpression() {\n return this.value\n }\n\n static from(obj: ConditionValue | ConditionValueData) {\n return new ConditionValue(obj.value, obj.display)\n }\n\n clone() {\n return ConditionValue.from(this)\n }\n}\n\nexport class RelativeDateValue extends ConditionValueAbstract {\n type: ConditionType.RelativeDate\n period\n unit\n direction\n\n constructor(period: string, unit: DateUnits, direction: DateDirections) {\n if (typeof period !== 'string') {\n throw new Error(\"RelativeDateValue param 'period' must be a string\")\n }\n\n if (!Object.values(DateDirections).includes(direction)) {\n throw new Error(\n \"RelativeDateValue param 'direction' must be from enum DateDirections\"\n )\n }\n\n super()\n\n this.type = ConditionType.RelativeDate\n this.period = period\n this.unit = unit\n this.direction = direction\n }\n\n toPresentationString() {\n return `${this.period} ${this.unit} ${this.direction}`\n }\n\n toExpression(): string {\n const period =\n this.direction === DateDirections.PAST\n ? 0 - Number(this.period)\n : this.period\n\n return `dateForComparison(${period}, '${this.unit}')`\n }\n\n static from(obj: RelativeDateValue | RelativeDateValueData) {\n return new RelativeDateValue(obj.period, obj.unit, obj.direction)\n }\n\n clone() {\n return RelativeDateValue.from(this)\n }\n}\n\nexport function conditionValueFrom(\n obj:\n | ConditionValue\n | ConditionValueData\n | RelativeDateValue\n | RelativeDateValueData\n) {\n switch (obj.type) {\n case ConditionType.Value:\n return ConditionValue.from(obj)\n\n case ConditionType.RelativeDate:\n return RelativeDateValue.from(obj)\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"condition-values.js","names":["ConditionValueAbstract","ConditionType","DateDirections","ConditionValue","type","value","display","constructor","Error","Value","toPresentationString","toExpression","clone","from","toJSON","structuredClone","obj","RelativeDateValue","period","unit","direction","Object","values","includes","RelativeDate","PAST","Number","conditionValueFrom"],"sources":["../../../src/conditions/condition-values.ts"],"sourcesContent":["import { ConditionValueAbstract } from '~/src/conditions/condition-value-abstract.js'\nimport { ConditionType, DateDirections } from '~/src/conditions/enums.js'\nimport { type DateUnits } from '~/src/conditions/enums.js'\nimport {\n type ConditionValueData,\n type RelativeDateValueData\n} from '~/src/conditions/types.js'\n\nexport class ConditionValue extends ConditionValueAbstract {\n type: ConditionType.Value\n value: string\n display: string\n\n constructor(value: string, display?: string) {\n if (typeof value !== 'string') {\n throw new Error(\"ConditionValue param 'value' must be a string\")\n }\n\n if (display && typeof display !== 'string') {\n throw new Error(\"ConditionValue param 'display' must be a string\")\n }\n\n super()\n\n this.type = ConditionType.Value\n this.value = value\n this.display = display ?? value\n }\n\n toPresentationString() {\n return this.display\n }\n\n toExpression() {\n return this.value\n }\n\n clone() {\n return ConditionValue.from(this)\n }\n\n toJSON(): ConditionValueData {\n return structuredClone(this.clone())\n }\n\n static from(obj: ConditionValue | ConditionValueData) {\n return new ConditionValue(obj.value, obj.display)\n }\n}\n\nexport class RelativeDateValue extends ConditionValueAbstract {\n type: ConditionType.RelativeDate\n period\n unit\n direction\n\n constructor(period: string, unit: DateUnits, direction: DateDirections) {\n if (typeof period !== 'string') {\n throw new Error(\"RelativeDateValue param 'period' must be a string\")\n }\n\n if (!Object.values(DateDirections).includes(direction)) {\n throw new Error(\n \"RelativeDateValue param 'direction' must be from enum DateDirections\"\n )\n }\n\n super()\n\n this.type = ConditionType.RelativeDate\n this.period = period\n this.unit = unit\n this.direction = direction\n }\n\n toPresentationString() {\n return `${this.period} ${this.unit} ${this.direction}`\n }\n\n toExpression(): string {\n const period =\n this.direction === DateDirections.PAST\n ? 0 - Number(this.period)\n : this.period\n\n return `dateForComparison(${period}, '${this.unit}')`\n }\n\n clone() {\n return RelativeDateValue.from(this)\n }\n\n toJSON(): RelativeDateValueData {\n return structuredClone(this.clone())\n }\n\n static from(obj: RelativeDateValue | RelativeDateValueData) {\n return new RelativeDateValue(obj.period, obj.unit, obj.direction)\n }\n}\n\nexport function conditionValueFrom(\n obj:\n | ConditionValue\n | ConditionValueData\n | RelativeDateValue\n | RelativeDateValueData\n) {\n if ('clone' in obj) {\n return obj.clone()\n }\n\n switch (obj.type) {\n case ConditionType.Value:\n return ConditionValue.from(obj)\n\n case ConditionType.RelativeDate:\n return RelativeDateValue.from(obj)\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,7 @@ import { ConditionAbstract } from "./condition-abstract.js";
2
2
  import { ConditionField } from "./condition-field.js";
3
3
  import { getExpression } from "./condition-operators.js";
4
4
  import { ConditionValueAbstract } from "./condition-value-abstract.js";
5
+ import { conditionValueFrom } from "./condition-values.js";
5
6
  export class Condition extends ConditionAbstract {
6
7
  field;
7
8
  operator;
@@ -32,7 +33,13 @@ export class Condition extends ConditionAbstract {
32
33
  return getExpression(this.field.type, this.field.name, this.operator, this.value);
33
34
  }
34
35
  clone() {
35
- return new Condition(ConditionField.from(this.field), this.operator, this.value.clone(), this.coordinator);
36
+ return Condition.from(this);
37
+ }
38
+ toJSON() {
39
+ return structuredClone(this.clone());
40
+ }
41
+ static from(obj) {
42
+ return new Condition(ConditionField.from(obj.field), obj.operator, conditionValueFrom(obj.value), obj.coordinator);
36
43
  }
37
44
  }
38
45
  //# sourceMappingURL=condition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"condition.js","names":["ConditionAbstract","ConditionField","getExpression","ConditionValueAbstract","Condition","field","operator","value","constructor","coordinator","Error","asFirstCondition","_asFirstCondition","conditionString","display","toPresentationString","conditionExpression","type","name","clone","from"],"sources":["../../../src/conditions/condition.ts"],"sourcesContent":["import { ConditionAbstract } from '~/src/conditions/condition-abstract.js'\nimport { ConditionField } from '~/src/conditions/condition-field.js'\nimport { getExpression } from '~/src/conditions/condition-operators.js'\nimport { ConditionValueAbstract } from '~/src/conditions/condition-value-abstract.js'\nimport {\n type ConditionValue,\n type RelativeDateValue\n} from '~/src/conditions/condition-values.js'\nimport { type Coordinator, type OperatorName } from '~/src/conditions/enums.js'\n\nexport class Condition extends ConditionAbstract {\n field: ConditionField\n operator: OperatorName\n value: ConditionValue | RelativeDateValue\n\n constructor(\n field?: ConditionField,\n operator?: OperatorName,\n value?: ConditionValue | RelativeDateValue,\n coordinator?: Coordinator\n ) {\n if (!(field instanceof ConditionField)) {\n throw new Error(\"Condition param 'field' must be ConditionField instance\")\n }\n if (typeof operator !== 'string') {\n throw new Error(\"Condition param 'operator' must be a string\")\n }\n if (!(value instanceof ConditionValueAbstract)) {\n throw new Error(\n \"Condition param 'field' must be ConditionValueAbstract instance\"\n )\n }\n\n super(coordinator)\n\n this.field = field\n this.operator = operator\n this.value = value\n }\n\n asFirstCondition() {\n this._asFirstCondition()\n return this\n }\n\n conditionString() {\n return `'${this.field.display}' ${\n this.operator\n } '${this.value.toPresentationString()}'`\n }\n\n conditionExpression() {\n return getExpression(\n this.field.type,\n this.field.name,\n this.operator,\n this.value\n )\n }\n\n clone() {\n return new Condition(\n ConditionField.from(this.field),\n this.operator,\n this.value.clone(),\n this.coordinator\n )\n }\n}\n"],"mappings":"AAAA,SAASA,iBAAiB;AAC1B,SAASC,cAAc;AACvB,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAO/B,OAAO,MAAMC,SAAS,SAASJ,iBAAiB,CAAC;EAC/CK,KAAK;EACLC,QAAQ;EACRC,KAAK;EAELC,WAAWA,CACTH,KAAsB,EACtBC,QAAuB,EACvBC,KAA0C,EAC1CE,WAAyB,EACzB;IACA,IAAI,EAAEJ,KAAK,YAAYJ,cAAc,CAAC,EAAE;MACtC,MAAM,IAAIS,KAAK,CAAC,yDAAyD,CAAC;IAC5E;IACA,IAAI,OAAOJ,QAAQ,KAAK,QAAQ,EAAE;MAChC,MAAM,IAAII,KAAK,CAAC,6CAA6C,CAAC;IAChE;IACA,IAAI,EAAEH,KAAK,YAAYJ,sBAAsB,CAAC,EAAE;MAC9C,MAAM,IAAIO,KAAK,CACb,iEACF,CAAC;IACH;IAEA,KAAK,CAACD,WAAW,CAAC;IAElB,IAAI,CAACJ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB;EAEAI,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAACC,iBAAiB,CAAC,CAAC;IACxB,OAAO,IAAI;EACb;EAEAC,eAAeA,CAAA,EAAG;IAChB,OAAO,IAAI,IAAI,CAACR,KAAK,CAACS,OAAO,KAC3B,IAAI,CAACR,QAAQ,KACV,IAAI,CAACC,KAAK,CAACQ,oBAAoB,CAAC,CAAC,GAAG;EAC3C;EAEAC,mBAAmBA,CAAA,EAAG;IACpB,OAAOd,aAAa,CAClB,IAAI,CAACG,KAAK,CAACY,IAAI,EACf,IAAI,CAACZ,KAAK,CAACa,IAAI,EACf,IAAI,CAACZ,QAAQ,EACb,IAAI,CAACC,KACP,CAAC;EACH;EAEAY,KAAKA,CAAA,EAAG;IACN,OAAO,IAAIf,SAAS,CAClBH,cAAc,CAACmB,IAAI,CAAC,IAAI,CAACf,KAAK,CAAC,EAC/B,IAAI,CAACC,QAAQ,EACb,IAAI,CAACC,KAAK,CAACY,KAAK,CAAC,CAAC,EAClB,IAAI,CAACV,WACP,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"file":"condition.js","names":["ConditionAbstract","ConditionField","getExpression","ConditionValueAbstract","conditionValueFrom","Condition","field","operator","value","constructor","coordinator","Error","asFirstCondition","_asFirstCondition","conditionString","display","toPresentationString","conditionExpression","type","name","clone","from","toJSON","structuredClone","obj"],"sources":["../../../src/conditions/condition.ts"],"sourcesContent":["import { ConditionAbstract } from '~/src/conditions/condition-abstract.js'\nimport { ConditionField } from '~/src/conditions/condition-field.js'\nimport { getExpression } from '~/src/conditions/condition-operators.js'\nimport { ConditionValueAbstract } from '~/src/conditions/condition-value-abstract.js'\nimport {\n conditionValueFrom,\n type ConditionValue,\n type RelativeDateValue\n} from '~/src/conditions/condition-values.js'\nimport { type Coordinator, type OperatorName } from '~/src/conditions/enums.js'\nimport { type ConditionData } from '~/src/conditions/types.js'\n\nexport class Condition extends ConditionAbstract {\n field: ConditionField\n operator: OperatorName\n value: ConditionValue | RelativeDateValue\n\n constructor(\n field?: ConditionField,\n operator?: OperatorName,\n value?: ConditionValue | RelativeDateValue,\n coordinator?: Coordinator\n ) {\n if (!(field instanceof ConditionField)) {\n throw new Error(\"Condition param 'field' must be ConditionField instance\")\n }\n if (typeof operator !== 'string') {\n throw new Error(\"Condition param 'operator' must be a string\")\n }\n if (!(value instanceof ConditionValueAbstract)) {\n throw new Error(\n \"Condition param 'field' must be ConditionValueAbstract instance\"\n )\n }\n\n super(coordinator)\n\n this.field = field\n this.operator = operator\n this.value = value\n }\n\n asFirstCondition() {\n this._asFirstCondition()\n return this\n }\n\n conditionString() {\n return `'${this.field.display}' ${\n this.operator\n } '${this.value.toPresentationString()}'`\n }\n\n conditionExpression() {\n return getExpression(\n this.field.type,\n this.field.name,\n this.operator,\n this.value\n )\n }\n\n clone() {\n return Condition.from(this)\n }\n\n toJSON(): ConditionData {\n return structuredClone(this.clone())\n }\n\n static from(obj: ConditionData | Condition) {\n return new Condition(\n ConditionField.from(obj.field),\n obj.operator,\n conditionValueFrom(obj.value),\n obj.coordinator\n )\n }\n}\n"],"mappings":"AAAA,SAASA,iBAAiB;AAC1B,SAASC,cAAc;AACvB,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAC/B,SACEC,kBAAkB;AAOpB,OAAO,MAAMC,SAAS,SAASL,iBAAiB,CAAC;EAC/CM,KAAK;EACLC,QAAQ;EACRC,KAAK;EAELC,WAAWA,CACTH,KAAsB,EACtBC,QAAuB,EACvBC,KAA0C,EAC1CE,WAAyB,EACzB;IACA,IAAI,EAAEJ,KAAK,YAAYL,cAAc,CAAC,EAAE;MACtC,MAAM,IAAIU,KAAK,CAAC,yDAAyD,CAAC;IAC5E;IACA,IAAI,OAAOJ,QAAQ,KAAK,QAAQ,EAAE;MAChC,MAAM,IAAII,KAAK,CAAC,6CAA6C,CAAC;IAChE;IACA,IAAI,EAAEH,KAAK,YAAYL,sBAAsB,CAAC,EAAE;MAC9C,MAAM,IAAIQ,KAAK,CACb,iEACF,CAAC;IACH;IAEA,KAAK,CAACD,WAAW,CAAC;IAElB,IAAI,CAACJ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB;EAEAI,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAACC,iBAAiB,CAAC,CAAC;IACxB,OAAO,IAAI;EACb;EAEAC,eAAeA,CAAA,EAAG;IAChB,OAAO,IAAI,IAAI,CAACR,KAAK,CAACS,OAAO,KAC3B,IAAI,CAACR,QAAQ,KACV,IAAI,CAACC,KAAK,CAACQ,oBAAoB,CAAC,CAAC,GAAG;EAC3C;EAEAC,mBAAmBA,CAAA,EAAG;IACpB,OAAOf,aAAa,CAClB,IAAI,CAACI,KAAK,CAACY,IAAI,EACf,IAAI,CAACZ,KAAK,CAACa,IAAI,EACf,IAAI,CAACZ,QAAQ,EACb,IAAI,CAACC,KACP,CAAC;EACH;EAEAY,KAAKA,CAAA,EAAG;IACN,OAAOf,SAAS,CAACgB,IAAI,CAAC,IAAI,CAAC;EAC7B;EAEAC,MAAMA,CAAA,EAAkB;IACtB,OAAOC,eAAe,CAAC,IAAI,CAACH,KAAK,CAAC,CAAC,CAAC;EACtC;EAEA,OAAOC,IAAIA,CAACG,GAA8B,EAAE;IAC1C,OAAO,IAAInB,SAAS,CAClBJ,cAAc,CAACoB,IAAI,CAACG,GAAG,CAAClB,KAAK,CAAC,EAC9BkB,GAAG,CAACjB,QAAQ,EACZH,kBAAkB,CAACoB,GAAG,CAAChB,KAAK,CAAC,EAC7BgB,GAAG,CAACd,WACN,CAAC;EACH;AACF","ignoreList":[]}
@@ -4,4 +4,19 @@ export function toPresentationString(condition) {
4
4
  export function toExpression(condition) {
5
5
  return `${condition.coordinatorString()}${condition.conditionExpression()}`;
6
6
  }
7
+ export const hasConditionField = condition => {
8
+ return !!condition && 'field' in condition;
9
+ };
10
+ export const hasConditionGroup = condition => {
11
+ return !!condition && 'conditions' in condition;
12
+ };
13
+ export const hasConditionName = condition => {
14
+ return !!condition && 'conditionName' in condition;
15
+ };
16
+ export const hasNestedCondition = condition => {
17
+ return !!condition?.value.conditions.some(hasConditionName);
18
+ };
19
+ export const isDuplicateCondition = (conditions, conditionName) => {
20
+ return conditions.some(condition => condition.name === conditionName);
21
+ };
7
22
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["toPresentationString","condition","coordinatorString","conditionString","toExpression","conditionExpression"],"sources":["../../../src/conditions/helpers.ts"],"sourcesContent":["import { type ConditionGroup } from '~/src/conditions/condition-group.js'\nimport { type ConditionRef } from '~/src/conditions/condition-ref.js'\nimport { type Condition } from '~/src/conditions/condition.js'\n\nexport function toPresentationString(\n condition: Condition | ConditionRef | ConditionGroup\n) {\n return `${condition.coordinatorString()}${condition.conditionString()}`\n}\n\nexport function toExpression(\n condition: Condition | ConditionRef | ConditionGroup\n) {\n return `${condition.coordinatorString()}${condition.conditionExpression()}`\n}\n"],"mappings":"AAIA,OAAO,SAASA,oBAAoBA,CAClCC,SAAoD,EACpD;EACA,OAAO,GAAGA,SAAS,CAACC,iBAAiB,CAAC,CAAC,GAAGD,SAAS,CAACE,eAAe,CAAC,CAAC,EAAE;AACzE;AAEA,OAAO,SAASC,YAAYA,CAC1BH,SAAoD,EACpD;EACA,OAAO,GAAGA,SAAS,CAACC,iBAAiB,CAAC,CAAC,GAAGD,SAAS,CAACI,mBAAmB,CAAC,CAAC,EAAE;AAC7E","ignoreList":[]}
1
+ {"version":3,"file":"helpers.js","names":["toPresentationString","condition","coordinatorString","conditionString","toExpression","conditionExpression","hasConditionField","hasConditionGroup","hasConditionName","hasNestedCondition","value","conditions","some","isDuplicateCondition","conditionName","name"],"sources":["../../../src/conditions/helpers.ts"],"sourcesContent":["import { type ConditionGroup } from '~/src/conditions/condition-group.js'\nimport { type ConditionRef } from '~/src/conditions/condition-ref.js'\nimport { type Condition } from '~/src/conditions/condition.js'\nimport {\n type ConditionData,\n type ConditionGroupData,\n type ConditionRefData\n} from '~/src/conditions/types.js'\nimport { type ConditionWrapper } from '~/src/form/form-definition/types.js'\n\nexport function toPresentationString(\n condition: Condition | ConditionRef | ConditionGroup\n) {\n return `${condition.coordinatorString()}${condition.conditionString()}`\n}\n\nexport function toExpression(\n condition: Condition | ConditionRef | ConditionGroup\n) {\n return `${condition.coordinatorString()}${condition.conditionExpression()}`\n}\n\nexport const hasConditionField = (\n condition?: ConditionGroupData | ConditionData | ConditionRefData\n): condition is ConditionData => {\n return !!condition && 'field' in condition\n}\n\nexport const hasConditionGroup = (\n condition?: ConditionGroupData | ConditionData | ConditionRefData\n): condition is ConditionGroupData => {\n return !!condition && 'conditions' in condition\n}\n\nexport const hasConditionName = (\n condition?: ConditionGroupData | ConditionData | ConditionRefData\n): condition is ConditionRefData => {\n return !!condition && 'conditionName' in condition\n}\n\nexport const hasNestedCondition = (condition?: ConditionWrapper) => {\n return !!condition?.value.conditions.some(hasConditionName)\n}\n\nexport const isDuplicateCondition = (\n conditions: ConditionWrapper[],\n conditionName: string\n) => {\n return conditions.some((condition) => condition.name === conditionName)\n}\n"],"mappings":"AAUA,OAAO,SAASA,oBAAoBA,CAClCC,SAAoD,EACpD;EACA,OAAO,GAAGA,SAAS,CAACC,iBAAiB,CAAC,CAAC,GAAGD,SAAS,CAACE,eAAe,CAAC,CAAC,EAAE;AACzE;AAEA,OAAO,SAASC,YAAYA,CAC1BH,SAAoD,EACpD;EACA,OAAO,GAAGA,SAAS,CAACC,iBAAiB,CAAC,CAAC,GAAGD,SAAS,CAACI,mBAAmB,CAAC,CAAC,EAAE;AAC7E;AAEA,OAAO,MAAMC,iBAAiB,GAC5BL,SAAiE,IAClC;EAC/B,OAAO,CAAC,CAACA,SAAS,IAAI,OAAO,IAAIA,SAAS;AAC5C,CAAC;AAED,OAAO,MAAMM,iBAAiB,GAC5BN,SAAiE,IAC7B;EACpC,OAAO,CAAC,CAACA,SAAS,IAAI,YAAY,IAAIA,SAAS;AACjD,CAAC;AAED,OAAO,MAAMO,gBAAgB,GAC3BP,SAAiE,IAC/B;EAClC,OAAO,CAAC,CAACA,SAAS,IAAI,eAAe,IAAIA,SAAS;AACpD,CAAC;AAED,OAAO,MAAMQ,kBAAkB,GAAIR,SAA4B,IAAK;EAClE,OAAO,CAAC,CAACA,SAAS,EAAES,KAAK,CAACC,UAAU,CAACC,IAAI,CAACJ,gBAAgB,CAAC;AAC7D,CAAC;AAED,OAAO,MAAMK,oBAAoB,GAAGA,CAClCF,UAA8B,EAC9BG,aAAqB,KAClB;EACH,OAAOH,UAAU,CAACC,IAAI,CAAEX,SAAS,IAAKA,SAAS,CAACc,IAAI,KAAKD,aAAa,CAAC;AACzE,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- export { getExpression, getOperatorConfig, getOperatorNames, absoluteDateOperatorNames, relativeDateOperatorNames } from "./condition-operators.js";
1
+ export { getExpression, getOperatorNames, absoluteDateOperatorNames, relativeDateOperatorNames } from "./condition-operators.js";
2
2
  export { ConditionValue, RelativeDateValue, conditionValueFrom } from "./condition-values.js";
3
3
  export { ConditionField } from "./condition-field.js";
4
4
  export { Condition } from "./condition.js";
@@ -6,6 +6,6 @@ export { ConditionRef } from "./condition-ref.js";
6
6
  export { ConditionGroup } from "./condition-group.js";
7
7
  export { ConditionsModel } from "./condition-model.js";
8
8
  export { ConditionGroupDef } from "./condition-group-def.js";
9
- export { toExpression, toPresentationString } from "./helpers.js";
9
+ export { hasConditionField, hasConditionGroup, hasConditionName, hasNestedCondition, isDuplicateCondition, toExpression, toPresentationString } from "./helpers.js";
10
10
  export { ConditionType, Coordinator, DateDirections, DateUnits, Operator, OperatorName } from "./enums.js";
11
11
  //# sourceMappingURL=index.js.map