@aemforms/af-core 0.22.150 → 0.22.151

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.
@@ -26,7 +26,8 @@ const ConstraintType = Object.freeze({
26
26
  MAX_ITEMS_MISMATCH: 'maxItemsMismatch',
27
27
  EXPRESSION_MISMATCH: 'expressionMismatch',
28
28
  EXCLUSIVE_MAXIMUM_MISMATCH: 'exclusiveMaximumMismatch',
29
- EXCLUSIVE_MINIMUM_MISMATCH: 'exclusiveMinimumMismatch'
29
+ EXCLUSIVE_MINIMUM_MISMATCH: 'exclusiveMinimumMismatch',
30
+ ENUM_MISMATCH: 'enumMismatch'
30
31
  });
31
32
  const constraintKeys = Object.freeze({
32
33
  pattern: ConstraintType.PATTERN_MISMATCH,
@@ -45,7 +46,8 @@ const constraintKeys = Object.freeze({
45
46
  maxItems: ConstraintType.MAX_ITEMS_MISMATCH,
46
47
  validationExpression: ConstraintType.EXPRESSION_MISMATCH,
47
48
  exclusiveMinimum: ConstraintType.EXCLUSIVE_MINIMUM_MISMATCH,
48
- exclusiveMaximum: ConstraintType.EXCLUSIVE_MAXIMUM_MISMATCH
49
+ exclusiveMaximum: ConstraintType.EXCLUSIVE_MAXIMUM_MISMATCH,
50
+ enum: ConstraintType.ENUM_MISMATCH
49
51
  });
50
52
  const defaultConstraintTypeMessages = Object.freeze({
51
53
  [ConstraintType.PATTERN_MISMATCH]: 'Please match the format requested.',
@@ -64,7 +66,8 @@ const defaultConstraintTypeMessages = Object.freeze({
64
66
  [ConstraintType.MAX_ITEMS_MISMATCH]: 'Specify a number of items equal to or less than ${0}.',
65
67
  [ConstraintType.EXPRESSION_MISMATCH]: 'Please enter a valid value.',
66
68
  [ConstraintType.EXCLUSIVE_MINIMUM_MISMATCH]: 'Value must be greater than ${0}.',
67
- [ConstraintType.EXCLUSIVE_MAXIMUM_MISMATCH]: 'Value must be less than ${0}.'
69
+ [ConstraintType.EXCLUSIVE_MAXIMUM_MISMATCH]: 'Value must be less than ${0}.',
70
+ [ConstraintType.ENUM_MISMATCH]: 'Please select a value from the allowed options.'
68
71
  });
69
72
  let customConstraintTypeMessages = {};
70
73
  const getConstraintTypeMessages = () => {
@@ -358,6 +361,22 @@ class DataValue {
358
361
  $bindToField(field) {
359
362
  if (this.$_fields.indexOf(field) === -1) {
360
363
  this.$_fields.push(field);
364
+ this._checkForTypeConflicts(field);
365
+ }
366
+ }
367
+ _checkForTypeConflicts(newField) {
368
+ if (this.$_fields.length <= 1) {
369
+ return;
370
+ }
371
+ const newFieldType = newField.type;
372
+ const conflictingFields = this.$_fields.filter(existingField => existingField &&
373
+ existingField !== newField &&
374
+ existingField.type !== newFieldType);
375
+ if (conflictingFields.length > 0) {
376
+ const conflictDetails = conflictingFields.map(field => `Field "${field.id}" (${field.type})`).join(', ');
377
+ console.error('Type conflict detected: Multiple fields with same dataRef have different types. ' +
378
+ `New field '${newField.id}' (${newFieldType}) conflicts with: ${conflictDetails}. ` +
379
+ `DataRef: ${this.$name}`);
361
380
  }
362
381
  }
363
382
  $convertToDataValue() {
@@ -1393,6 +1412,9 @@ const addOnly = (includeOrExclude) => (...fieldTypes) => (target, propertyKey, d
1393
1412
  const set = descriptor.set;
1394
1413
  if (set != undefined) {
1395
1414
  descriptor.set = function (value) {
1415
+ if (this === this._ruleNode) {
1416
+ console.error(`Property '${propertyKey}' is being set through a proxy, which is not supported. Please use globals.functions.setProperty instead.`);
1417
+ }
1396
1418
  if (fieldTypes.indexOf(this.fieldType) > -1 === includeOrExclude) {
1397
1419
  set.call(this, value);
1398
1420
  }
@@ -1649,16 +1671,16 @@ class BaseNode {
1649
1671
  this.form.getEventQueue().runPendingQueue();
1650
1672
  }
1651
1673
  withDependencyTrackingControl(disableDependencyTracking, callback) {
1652
- const currentDependencyTracking = this.form.ruleEngine.getDependencyTracking();
1674
+ const currentDependencyTracking = this.form?.ruleEngine.getDependencyTracking();
1653
1675
  if (disableDependencyTracking) {
1654
- this.form.ruleEngine.setDependencyTracking(false);
1676
+ this.form?.ruleEngine.setDependencyTracking(false);
1655
1677
  }
1656
1678
  try {
1657
1679
  return callback();
1658
1680
  }
1659
1681
  finally {
1660
1682
  if (disableDependencyTracking) {
1661
- this.form.ruleEngine.setDependencyTracking(currentDependencyTracking);
1683
+ this.form?.ruleEngine.setDependencyTracking(currentDependencyTracking);
1662
1684
  }
1663
1685
  }
1664
1686
  }
@@ -4782,10 +4804,10 @@ class Field extends Scriptable {
4782
4804
  if (this._jsonModel.enforceEnum === true && value != null) {
4783
4805
  const fn = constraints.enum;
4784
4806
  if (value instanceof Array && this.isArrayType()) {
4785
- return value.every(x => fn(this.enum || [], x).valid);
4807
+ return value.every(x => fn(this._jsonModel.enum || [], x).valid);
4786
4808
  }
4787
4809
  else {
4788
- return fn(this.enum || [], value).valid;
4810
+ return fn(this._jsonModel.enum || [], value).valid;
4789
4811
  }
4790
4812
  }
4791
4813
  return true;
@@ -13,6 +13,7 @@ export default class DataValue {
13
13
  setValue(typedValue: any, originalValue: any, fromField: FieldModel): void;
14
14
  get $type(): string;
15
15
  $bindToField(field: FieldModel): void;
16
+ private _checkForTypeConflicts;
16
17
  $convertToDataValue(): DataValue;
17
18
  get $isDataGroup(): boolean;
18
19
  $addDataNode(name: string | number, value: DataValue, override?: boolean): void;
@@ -148,6 +148,7 @@ export declare const ConstraintType: Readonly<{
148
148
  EXPRESSION_MISMATCH: "expressionMismatch";
149
149
  EXCLUSIVE_MAXIMUM_MISMATCH: "exclusiveMaximumMismatch";
150
150
  EXCLUSIVE_MINIMUM_MISMATCH: "exclusiveMinimumMismatch";
151
+ ENUM_MISMATCH: "enumMismatch";
151
152
  }>;
152
153
  export declare const constraintKeys: Readonly<{
153
154
  pattern: "patternMismatch";
@@ -167,6 +168,7 @@ export declare const constraintKeys: Readonly<{
167
168
  validationExpression: "expressionMismatch";
168
169
  exclusiveMinimum: "exclusiveMinimumMismatch";
169
170
  exclusiveMaximum: "exclusiveMaximumMismatch";
171
+ enum: "enumMismatch";
170
172
  }>;
171
173
  export declare const setCustomDefaultConstraintTypeMessages: (messages: Record<string, string>) => void;
172
174
  export declare const getConstraintTypeMessages: () => {
@@ -187,5 +189,6 @@ export declare const getConstraintTypeMessages: () => {
187
189
  expressionMismatch: "Please enter a valid value.";
188
190
  exclusiveMinimumMismatch: "Value must be greater than ${0}.";
189
191
  exclusiveMaximumMismatch: "Value must be less than ${0}.";
192
+ enumMismatch: "Please select a value from the allowed options.";
190
193
  };
191
194
  export {};
package/lib/BaseNode.js CHANGED
@@ -107,6 +107,9 @@ const addOnly = (includeOrExclude) => (...fieldTypes) => (target, propertyKey, d
107
107
  const set = descriptor.set;
108
108
  if (set != undefined) {
109
109
  descriptor.set = function (value) {
110
+ if (this === this._ruleNode) {
111
+ console.error(`Property '${propertyKey}' is being set through a proxy, which is not supported. Please use globals.functions.setProperty instead.`);
112
+ }
110
113
  if (fieldTypes.indexOf(this.fieldType) > -1 === includeOrExclude) {
111
114
  set.call(this, value);
112
115
  }
@@ -347,16 +350,17 @@ class BaseNode {
347
350
  this.form.getEventQueue().runPendingQueue();
348
351
  }
349
352
  withDependencyTrackingControl(disableDependencyTracking, callback) {
350
- const currentDependencyTracking = this.form.ruleEngine.getDependencyTracking();
353
+ var _a, _b, _c;
354
+ const currentDependencyTracking = (_a = this.form) === null || _a === void 0 ? void 0 : _a.ruleEngine.getDependencyTracking();
351
355
  if (disableDependencyTracking) {
352
- this.form.ruleEngine.setDependencyTracking(false);
356
+ (_b = this.form) === null || _b === void 0 ? void 0 : _b.ruleEngine.setDependencyTracking(false);
353
357
  }
354
358
  try {
355
359
  return callback();
356
360
  }
357
361
  finally {
358
362
  if (disableDependencyTracking) {
359
- this.form.ruleEngine.setDependencyTracking(currentDependencyTracking);
363
+ (_c = this.form) === null || _c === void 0 ? void 0 : _c.ruleEngine.setDependencyTracking(currentDependencyTracking);
360
364
  }
361
365
  }
362
366
  }
package/lib/Field.js CHANGED
@@ -504,10 +504,10 @@ class Field extends Scriptable_1.default {
504
504
  if (this._jsonModel.enforceEnum === true && value != null) {
505
505
  const fn = constraints.enum;
506
506
  if (value instanceof Array && this.isArrayType()) {
507
- return value.every(x => fn(this.enum || [], x).valid);
507
+ return value.every(x => fn(this._jsonModel.enum || [], x).valid);
508
508
  }
509
509
  else {
510
- return fn(this.enum || [], value).valid;
510
+ return fn(this._jsonModel.enum || [], value).valid;
511
511
  }
512
512
  }
513
513
  return true;
@@ -13,6 +13,7 @@ export default class DataValue {
13
13
  setValue(typedValue: any, originalValue: any, fromField: FieldModel): void;
14
14
  get $type(): string;
15
15
  $bindToField(field: FieldModel): void;
16
+ private _checkForTypeConflicts;
16
17
  $convertToDataValue(): DataValue;
17
18
  get $isDataGroup(): boolean;
18
19
  $addDataNode(name: string | number, value: DataValue, override?: boolean): void;
@@ -53,6 +53,22 @@ class DataValue {
53
53
  $bindToField(field) {
54
54
  if (this.$_fields.indexOf(field) === -1) {
55
55
  this.$_fields.push(field);
56
+ this._checkForTypeConflicts(field);
57
+ }
58
+ }
59
+ _checkForTypeConflicts(newField) {
60
+ if (this.$_fields.length <= 1) {
61
+ return;
62
+ }
63
+ const newFieldType = newField.type;
64
+ const conflictingFields = this.$_fields.filter(existingField => existingField &&
65
+ existingField !== newField &&
66
+ existingField.type !== newFieldType);
67
+ if (conflictingFields.length > 0) {
68
+ const conflictDetails = conflictingFields.map(field => `Field "${field.id}" (${field.type})`).join(', ');
69
+ console.error('Type conflict detected: Multiple fields with same dataRef have different types. ' +
70
+ `New field '${newField.id}' (${newFieldType}) conflicts with: ${conflictDetails}. ` +
71
+ `DataRef: ${this.$name}`);
56
72
  }
57
73
  }
58
74
  $convertToDataValue() {
@@ -148,6 +148,7 @@ export declare const ConstraintType: Readonly<{
148
148
  EXPRESSION_MISMATCH: "expressionMismatch";
149
149
  EXCLUSIVE_MAXIMUM_MISMATCH: "exclusiveMaximumMismatch";
150
150
  EXCLUSIVE_MINIMUM_MISMATCH: "exclusiveMinimumMismatch";
151
+ ENUM_MISMATCH: "enumMismatch";
151
152
  }>;
152
153
  export declare const constraintKeys: Readonly<{
153
154
  pattern: "patternMismatch";
@@ -167,6 +168,7 @@ export declare const constraintKeys: Readonly<{
167
168
  validationExpression: "expressionMismatch";
168
169
  exclusiveMinimum: "exclusiveMinimumMismatch";
169
170
  exclusiveMaximum: "exclusiveMaximumMismatch";
171
+ enum: "enumMismatch";
170
172
  }>;
171
173
  export declare const setCustomDefaultConstraintTypeMessages: (messages: Record<string, string>) => void;
172
174
  export declare const getConstraintTypeMessages: () => {
@@ -187,5 +189,6 @@ export declare const getConstraintTypeMessages: () => {
187
189
  expressionMismatch: "Please enter a valid value.";
188
190
  exclusiveMinimumMismatch: "Value must be greater than ${0}.";
189
191
  exclusiveMaximumMismatch: "Value must be less than ${0}.";
192
+ enumMismatch: "Please select a value from the allowed options.";
190
193
  };
191
194
  export {};
package/lib/types/Json.js CHANGED
@@ -25,7 +25,8 @@ exports.ConstraintType = Object.freeze({
25
25
  MAX_ITEMS_MISMATCH: 'maxItemsMismatch',
26
26
  EXPRESSION_MISMATCH: 'expressionMismatch',
27
27
  EXCLUSIVE_MAXIMUM_MISMATCH: 'exclusiveMaximumMismatch',
28
- EXCLUSIVE_MINIMUM_MISMATCH: 'exclusiveMinimumMismatch'
28
+ EXCLUSIVE_MINIMUM_MISMATCH: 'exclusiveMinimumMismatch',
29
+ ENUM_MISMATCH: 'enumMismatch'
29
30
  });
30
31
  exports.constraintKeys = Object.freeze({
31
32
  pattern: exports.ConstraintType.PATTERN_MISMATCH,
@@ -44,7 +45,8 @@ exports.constraintKeys = Object.freeze({
44
45
  maxItems: exports.ConstraintType.MAX_ITEMS_MISMATCH,
45
46
  validationExpression: exports.ConstraintType.EXPRESSION_MISMATCH,
46
47
  exclusiveMinimum: exports.ConstraintType.EXCLUSIVE_MINIMUM_MISMATCH,
47
- exclusiveMaximum: exports.ConstraintType.EXCLUSIVE_MAXIMUM_MISMATCH
48
+ exclusiveMaximum: exports.ConstraintType.EXCLUSIVE_MAXIMUM_MISMATCH,
49
+ enum: exports.ConstraintType.ENUM_MISMATCH
48
50
  });
49
51
  const defaultConstraintTypeMessages = Object.freeze({
50
52
  [exports.ConstraintType.PATTERN_MISMATCH]: 'Please match the format requested.',
@@ -63,7 +65,8 @@ const defaultConstraintTypeMessages = Object.freeze({
63
65
  [exports.ConstraintType.MAX_ITEMS_MISMATCH]: 'Specify a number of items equal to or less than ${0}.',
64
66
  [exports.ConstraintType.EXPRESSION_MISMATCH]: 'Please enter a valid value.',
65
67
  [exports.ConstraintType.EXCLUSIVE_MINIMUM_MISMATCH]: 'Value must be greater than ${0}.',
66
- [exports.ConstraintType.EXCLUSIVE_MAXIMUM_MISMATCH]: 'Value must be less than ${0}.'
68
+ [exports.ConstraintType.EXCLUSIVE_MAXIMUM_MISMATCH]: 'Value must be less than ${0}.',
69
+ [exports.ConstraintType.ENUM_MISMATCH]: 'Please select a value from the allowed options.'
67
70
  });
68
71
  const transformObjectKeys = (obj, transformer) => {
69
72
  if (typeof obj !== 'object' || obj === null) {
@@ -81,7 +84,13 @@ const transformObjectKeys = (obj, transformer) => {
81
84
  };
82
85
  let customConstraintTypeMessages = {};
83
86
  const setCustomDefaultConstraintTypeMessages = (messages) => {
84
- customConstraintTypeMessages = transformObjectKeys(messages, (key) => {
87
+ const validMessages = Object.entries(messages).reduce((acc, [key, value]) => {
88
+ if (exports.constraintKeys[key] !== undefined) {
89
+ acc[key] = value;
90
+ }
91
+ return acc;
92
+ }, {});
93
+ customConstraintTypeMessages = transformObjectKeys(validMessages, (key) => {
85
94
  return exports.constraintKeys[key];
86
95
  });
87
96
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aemforms/af-core",
3
- "version": "0.22.150",
3
+ "version": "0.22.151",
4
4
  "description": "Core Module for Forms Runtime",
5
5
  "author": "Adobe Systems",
6
6
  "license": "Adobe Proprietary",
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@adobe/json-formula": "0.1.50",
40
- "@aemforms/af-formatters": "^0.22.150"
40
+ "@aemforms/af-formatters": "^0.22.151"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@babel/preset-env": "^7.20.2",