@aemforms/af-core 0.22.170 → 0.22.172

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.
@@ -1037,34 +1037,6 @@ const replaceTemplatePlaceholders = (str, values = []) => {
1037
1037
  return typeof replacement !== 'undefined' ? replacement : match;
1038
1038
  });
1039
1039
  };
1040
- const sanitizeName = (name) => {
1041
- const nameRegex = /^[A-Za-z0-9_$][A-Za-z0-9_.[\]]*$/;
1042
- if (name.includes('.')) {
1043
- const parts = name.split('.');
1044
- const sanitizedParts = parts.map((part) => {
1045
- if (part.includes('[')) {
1046
- const bracketIndex = part.indexOf('[');
1047
- const namePart = part.substring(0, bracketIndex);
1048
- const bracketPart = part.substring(bracketIndex);
1049
- if (!nameRegex.test(namePart)) {
1050
- return `"${namePart}"${bracketPart}`;
1051
- }
1052
- return part;
1053
- }
1054
- else {
1055
- if (!nameRegex.test(part)) {
1056
- return `"${part}"`;
1057
- }
1058
- return part;
1059
- }
1060
- });
1061
- return sanitizedParts.join('.');
1062
- }
1063
- if (!nameRegex.test(name)) {
1064
- return `"${name}"`;
1065
- }
1066
- return name;
1067
- };
1068
1040
 
1069
1041
  const dateRegex = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;
1070
1042
  const emailRegex = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
@@ -1490,6 +1462,13 @@ class BaseNode {
1490
1462
  get fragment() {
1491
1463
  return this._fragment;
1492
1464
  }
1465
+ getFragmentRuleNode() {
1466
+ if (this.fragment === '$form') {
1467
+ return this.form.getRuleNode();
1468
+ }
1469
+ const fragmentContainer = this.form.resolveQualifiedName(this.fragment);
1470
+ return fragmentContainer?.getRuleNode() ?? this.form.getRuleNode();
1471
+ }
1493
1472
  setupRuleNode() {
1494
1473
  const self = this;
1495
1474
  this._ruleNode = new Proxy(this.ruleNodeReference(), {
@@ -1984,8 +1963,7 @@ class Scriptable extends BaseNode {
1984
1963
  let updatedRule = eString;
1985
1964
  try {
1986
1965
  if (this.fragment !== '$form') {
1987
- const sanitizedFragment = sanitizeName(this.fragment);
1988
- updatedRule = eString.replaceAll('$form', sanitizedFragment);
1966
+ updatedRule = eString.replaceAll('$form', '$fragment');
1989
1967
  }
1990
1968
  this._rules[eName] = this.ruleEngine.compileRule(updatedRule, this.lang);
1991
1969
  }
@@ -2022,8 +2000,7 @@ class Scriptable extends BaseNode {
2022
2000
  let updatedExpr = x;
2023
2001
  try {
2024
2002
  if (this.fragment !== '$form') {
2025
- const sanitizedFragment = sanitizeName(this.fragment);
2026
- updatedExpr = x.replaceAll('$form', sanitizedFragment);
2003
+ updatedExpr = x.replaceAll('$form', '$fragment');
2027
2004
  }
2028
2005
  return this.ruleEngine.compileRule(updatedExpr, this.lang);
2029
2006
  }
@@ -2153,7 +2130,8 @@ class Scriptable extends BaseNode {
2153
2130
  'form': this.form,
2154
2131
  '$form': this.form.getRuleNode(),
2155
2132
  '$field': this.getRuleNode(),
2156
- 'field': this
2133
+ 'field': this,
2134
+ '$fragment': this.getFragmentRuleNode()
2157
2135
  };
2158
2136
  const node = this.ruleEngine.compileRule(expr, this.lang);
2159
2137
  return this.ruleEngine.execute(node, this.getExpressionScope(), ruleContext, false, expr);
@@ -2169,6 +2147,7 @@ class Scriptable extends BaseNode {
2169
2147
  '$form': this.form.getRuleNode(),
2170
2148
  '$field': this.getRuleNode(),
2171
2149
  'field': this,
2150
+ '$fragment': this.getFragmentRuleNode(),
2172
2151
  '$event': {
2173
2152
  type: action.type,
2174
2153
  payload: action.payload,
@@ -3206,6 +3185,7 @@ class FunctionRuntimeImpl {
3206
3185
  form: interpreter.globals.$form,
3207
3186
  field: interpreter.globals.$field,
3208
3187
  event: interpreter.globals.$event,
3188
+ fragment: interpreter.globals.$fragment,
3209
3189
  functions: {
3210
3190
  setProperty: (target, payload) => {
3211
3191
  const eventName = 'custom:setProperty';
@@ -3694,8 +3674,8 @@ class FunctionRuntimeImpl {
3694
3674
  dispatchEvent: {
3695
3675
  _func: (args, data, interpreter) => {
3696
3676
  const element = args[0];
3697
- if (element === null && typeof interpreter !== 'string') {
3698
- interpreter.debug.push('Invalid argument passed in dispatchEvent. An element is expected');
3677
+ if (element == null && typeof interpreter !== 'string') {
3678
+ interpreter.globals.form.logger.error(`dispatchEvent: target element is null or undefined. Event "${valueOf(args[1])}" was skipped.`);
3699
3679
  return {};
3700
3680
  }
3701
3681
  let eventName = valueOf(args[1]);
@@ -4403,7 +4383,8 @@ class RuleEngine {
4403
4383
  _globalNames = [
4404
4384
  '$form',
4405
4385
  '$field',
4406
- '$event'
4386
+ '$event',
4387
+ '$fragment'
4407
4388
  ];
4408
4389
  customFunctions;
4409
4390
  debugInfo = [];
@@ -33,6 +33,7 @@ export declare abstract class BaseNode<T extends BaseJson> implements BaseModel
33
33
  mode?: 'create' | 'restore';
34
34
  });
35
35
  get fragment(): string;
36
+ protected getFragmentRuleNode(): any;
36
37
  abstract value: Primitives;
37
38
  abstract reset(): any;
38
39
  protected setupRuleNode(): void;
package/lib/BaseNode.d.ts CHANGED
@@ -33,6 +33,7 @@ export declare abstract class BaseNode<T extends BaseJson> implements BaseModel
33
33
  mode?: 'create' | 'restore';
34
34
  });
35
35
  get fragment(): string;
36
+ protected getFragmentRuleNode(): any;
36
37
  abstract value: Primitives;
37
38
  abstract reset(): any;
38
39
  protected setupRuleNode(): void;
package/lib/BaseNode.js CHANGED
@@ -149,6 +149,14 @@ class BaseNode {
149
149
  get fragment() {
150
150
  return this._fragment;
151
151
  }
152
+ getFragmentRuleNode() {
153
+ var _a;
154
+ if (this.fragment === '$form') {
155
+ return this.form.getRuleNode();
156
+ }
157
+ const fragmentContainer = this.form.resolveQualifiedName(this.fragment);
158
+ return (_a = fragmentContainer === null || fragmentContainer === void 0 ? void 0 : fragmentContainer.getRuleNode()) !== null && _a !== void 0 ? _a : this.form.getRuleNode();
159
+ }
152
160
  setupRuleNode() {
153
161
  const self = this;
154
162
  this._ruleNode = new Proxy(this.ruleNodeReference(), {
package/lib/Scriptable.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const BaseNode_1 = require("./BaseNode");
4
- const FormUtils_1 = require("./utils/FormUtils");
5
4
  const Events_1 = require("./controller/Events");
6
5
  class Scriptable extends BaseNode_1.BaseNode {
7
6
  constructor() {
@@ -19,8 +18,7 @@ class Scriptable extends BaseNode_1.BaseNode {
19
18
  let updatedRule = eString;
20
19
  try {
21
20
  if (this.fragment !== '$form') {
22
- const sanitizedFragment = (0, FormUtils_1.sanitizeName)(this.fragment);
23
- updatedRule = eString.replaceAll('$form', sanitizedFragment);
21
+ updatedRule = eString.replaceAll('$form', '$fragment');
24
22
  }
25
23
  this._rules[eName] = this.ruleEngine.compileRule(updatedRule, this.lang);
26
24
  }
@@ -58,8 +56,7 @@ class Scriptable extends BaseNode_1.BaseNode {
58
56
  let updatedExpr = x;
59
57
  try {
60
58
  if (this.fragment !== '$form') {
61
- const sanitizedFragment = (0, FormUtils_1.sanitizeName)(this.fragment);
62
- updatedExpr = x.replaceAll('$form', sanitizedFragment);
59
+ updatedExpr = x.replaceAll('$form', '$fragment');
63
60
  }
64
61
  return this.ruleEngine.compileRule(updatedExpr, this.lang);
65
62
  }
@@ -189,7 +186,8 @@ class Scriptable extends BaseNode_1.BaseNode {
189
186
  'form': this.form,
190
187
  '$form': this.form.getRuleNode(),
191
188
  '$field': this.getRuleNode(),
192
- 'field': this
189
+ 'field': this,
190
+ '$fragment': this.getFragmentRuleNode()
193
191
  };
194
192
  const node = this.ruleEngine.compileRule(expr, this.lang);
195
193
  return this.ruleEngine.execute(node, this.getExpressionScope(), ruleContext, false, expr);
@@ -206,6 +204,7 @@ class Scriptable extends BaseNode_1.BaseNode {
206
204
  '$form': this.form.getRuleNode(),
207
205
  '$field': this.getRuleNode(),
208
206
  'field': this,
207
+ '$fragment': this.getFragmentRuleNode(),
209
208
  '$event': {
210
209
  type: action.type,
211
210
  payload: action.payload,
@@ -265,6 +265,7 @@ class FunctionRuntimeImpl {
265
265
  form: interpreter.globals.$form,
266
266
  field: interpreter.globals.$field,
267
267
  event: interpreter.globals.$event,
268
+ fragment: interpreter.globals.$fragment,
268
269
  functions: {
269
270
  setProperty: (target, payload) => {
270
271
  const eventName = 'custom:setProperty';
@@ -749,8 +750,8 @@ class FunctionRuntimeImpl {
749
750
  dispatchEvent: {
750
751
  _func: (args, data, interpreter) => {
751
752
  const element = args[0];
752
- if (element === null && typeof interpreter !== 'string') {
753
- interpreter.debug.push('Invalid argument passed in dispatchEvent. An element is expected');
753
+ if (element == null && typeof interpreter !== 'string') {
754
+ interpreter.globals.form.logger.error(`dispatchEvent: target element is null or undefined. Event "${valueOf(args[1])}" was skipped.`);
754
755
  return {};
755
756
  }
756
757
  let eventName = valueOf(args[1]);
@@ -19,7 +19,8 @@ class RuleEngine {
19
19
  this._globalNames = [
20
20
  '$form',
21
21
  '$field',
22
- '$event'
22
+ '$event',
23
+ '$fragment'
23
24
  ];
24
25
  this.debugInfo = [];
25
26
  this.dependencyTracking = true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aemforms/af-core",
3
- "version": "0.22.170",
3
+ "version": "0.22.172",
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.170"
40
+ "@aemforms/af-formatters": "^0.22.172"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@babel/preset-env": "^7.20.2",