@steedos/service-metadata-objects 2.7.18-beta.26 → 2.7.18-beta.28

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.
@@ -10,30 +10,48 @@ const isAmisFormula = (formula) => {
10
10
  return /\$\{.+\}/.test(formula);
11
11
  };
12
12
  function extractAmisFormulaVariableNames(data) {
13
- let variables = [];
14
- if (data.type === 'variable' &&
15
- (!data._isGetterHost)) {
16
- variables.push(data.name);
17
- }
18
- else if (data.type === 'getter') {
19
- data.host._isGetterHost = true;
20
- variables.push(`${data.host.name}.${data.key.name}`);
21
- }
22
- if (Array.isArray(data)) {
23
- for (const item of data) {
24
- if (typeof item === 'object' && item !== null) {
25
- variables = variables.concat(extractAmisFormulaVariableNames(item));
13
+ const variables = new Set();
14
+ function traverse(node) {
15
+ if (!node || typeof node !== 'object')
16
+ return;
17
+ if (node.type === 'variable' && !isGetterHost(node)) {
18
+ variables.add(node.name);
19
+ }
20
+ else if (node.type === 'getter' && !isGetterHost(node)) {
21
+ const path = getFullGetterPath(node);
22
+ if (path)
23
+ variables.add(path);
24
+ }
25
+ for (const key in node) {
26
+ if (key !== 'parent' && typeof node[key] === 'object') {
27
+ node[key].parent = node;
28
+ traverse(node[key]);
26
29
  }
27
30
  }
28
31
  }
29
- else if (typeof data === 'object' && data !== null) {
30
- for (const key in data) {
31
- if (typeof data[key] === 'object' && data[key] !== null) {
32
- variables = variables.concat(extractAmisFormulaVariableNames(data[key]));
32
+ function isGetterHost(node) {
33
+ return node.parent && node.parent.type === 'getter' && node.parent.host === node;
34
+ }
35
+ function getFullGetterPath(getterNode) {
36
+ const parts = [getterNode.key.name];
37
+ let current = getterNode.host;
38
+ while (current) {
39
+ if (current.type === 'getter') {
40
+ parts.unshift(current.key.name);
41
+ current = current.host;
42
+ }
43
+ else if (current.type === 'variable') {
44
+ parts.unshift(current.name);
45
+ return parts.join('.');
46
+ }
47
+ else {
48
+ break;
33
49
  }
34
50
  }
51
+ return null;
35
52
  }
36
- return variables;
53
+ traverse(data);
54
+ return Array.from(variables);
37
55
  }
38
56
  const pickFormulaVars = (formula) => {
39
57
  if (isAmisFormula(formula)) {
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/formula/core.ts"],"names":[],"mappings":";;;;AAAA,8CAA2C;AAC3C,mDAA+D;AAC/D,iCAAoE;AAEpE,+CAAoC;AAEpC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;IAEtC,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC,CAAA;AAmBD,SAAS,+BAA+B,CAAC,IAAI;IAC3C,IAAI,SAAS,GAAG,EAAE,CAAC;IAGnB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QACxB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;QACzB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B;SAEI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QAE/B,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;KACtD;IAGD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;gBAC7C,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;aACrE;SACF;KACF;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;QACpD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gBACvD,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC1E;SACF;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAMM,MAAM,eAAe,GAAG,CAAC,OAAe,EAAiB,EAAE;IAC9D,IAAG,aAAa,CAAC,OAAO,CAAC,EAAC;QACtB,MAAM,MAAM,GAAG,+BAA+B,CAAC,IAAA,oBAAK,EAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;KACjB;IACD,OAAO,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAC;AAC5B,CAAC,CAAA;AANY,QAAA,eAAe,mBAM3B;AAUM,MAAM,oCAAoC,GAAG,CAAO,iBAAyB,EAAE,gBAAwB,EAAE,UAAkB,EAAE,UAA0B,EAAoB,EAAE;IAChL,MAAM,OAAO,GAAyC,MAAM,IAAA,4CAA4B,EAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IAC9H,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;QAC3B,OAAO,IAAA,iDAA0C,EAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACzF;SACI;QAED,OAAO,KAAK,CAAC;KAChB;AACL,CAAC,CAAA,CAAA;AATY,QAAA,oCAAoC,wCAShD"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/formula/core.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-metadata-objects",
3
- "version": "2.7.18-beta.26",
3
+ "version": "2.7.18-beta.28",
4
4
  "description": "",
5
5
  "main": "lib/objects.service.js",
6
6
  "scripts": {
@@ -20,9 +20,9 @@
20
20
  "license": "MIT",
21
21
  "dependencies": {
22
22
  "@salesforce/ts-types": "1.1.2",
23
- "@steedos/formula": "2.7.18-beta.26",
24
- "@steedos/i18n": "2.7.18-beta.26",
25
- "@steedos/metadata-registrar": "2.7.18-beta.26",
23
+ "@steedos/formula": "2.7.18-beta.28",
24
+ "@steedos/i18n": "2.7.18-beta.28",
25
+ "@steedos/metadata-registrar": "2.7.18-beta.28",
26
26
  "dotenv-flow": "^3.1.0",
27
27
  "ioredis": "^4.22.0",
28
28
  "lodash": "^4.17.21",
@@ -37,5 +37,5 @@
37
37
  "publishConfig": {
38
38
  "access": "public"
39
39
  },
40
- "gitHead": "742c13436718f7aeb9a0f44b04cef9d0a8c60422"
40
+ "gitHead": "4473b15021000bc87eb32b74552538b633a143e9"
41
41
  }
@@ -27,36 +27,57 @@ const isAmisFormula = (formula: string) => {
27
27
 
28
28
 
29
29
  function extractAmisFormulaVariableNames(data) {
30
- let variables = [];
31
-
32
- // 检查当前节点是否是变量(但不是getter的host)
33
- if (data.type === 'variable' &&
34
- (!data._isGetterHost)) { // 添加标记避免重复收集
35
- variables.push(data.name);
36
- }
37
- // 检查当前节点是否是getter
38
- else if (data.type === 'getter') {
39
- // 标记host节点,避免重复收集
40
- data.host._isGetterHost = true;
41
- variables.push(`${data.host.name}.${data.key.name}`);
42
- }
43
-
44
- // 递归检查所有子节点
45
- if (Array.isArray(data)) {
46
- for (const item of data) {
47
- if (typeof item === 'object' && item !== null) {
48
- variables = variables.concat(extractAmisFormulaVariableNames(item));
30
+ const variables = new Set();
31
+
32
+ function traverse(node) {
33
+ if (!node || typeof node !== 'object') return;
34
+
35
+ // 处理普通变量(排除作为getter host的情况)
36
+ if (node.type === 'variable' && !isGetterHost(node)) {
37
+ variables.add(node.name);
38
+ }
39
+ // 处理最外层的getter(不处理嵌套的getter host
40
+ else if (node.type === 'getter' && !isGetterHost(node)) {
41
+ const path = getFullGetterPath(node);
42
+ if (path) variables.add(path);
43
+ }
44
+
45
+ // 递归遍历所有子节点
46
+ for (const key in node) {
47
+ if (key !== 'parent' && typeof node[key] === 'object') {
48
+ // 设置父节点引用
49
+ node[key].parent = node;
50
+ traverse(node[key]);
49
51
  }
50
52
  }
51
- } else if (typeof data === 'object' && data !== null) {
52
- for (const key in data) {
53
- if (typeof data[key] === 'object' && data[key] !== null) {
54
- variables = variables.concat(extractAmisFormulaVariableNames(data[key]));
53
+ }
54
+
55
+ function isGetterHost(node) {
56
+ return node.parent && node.parent.type === 'getter' && node.parent.host === node;
57
+ }
58
+
59
+ function getFullGetterPath(getterNode) {
60
+ const parts = [getterNode.key.name];
61
+ let current = getterNode.host;
62
+
63
+ // 向上追溯host
64
+ while (current) {
65
+ if (current.type === 'getter') {
66
+ parts.unshift(current.key.name);
67
+ current = current.host;
68
+ } else if (current.type === 'variable') {
69
+ parts.unshift(current.name);
70
+ return parts.join('.');
71
+ } else {
72
+ break;
55
73
  }
56
74
  }
75
+
76
+ return null;
57
77
  }
58
-
59
- return variables;
78
+
79
+ traverse(data);
80
+ return Array.from(variables);
60
81
  }
61
82
 
62
83
  /**
@@ -65,7 +86,7 @@ function extractAmisFormulaVariableNames(data) {
65
86
  */
66
87
  export const pickFormulaVars = (formula: string): Array<string> => {
67
88
  if(isAmisFormula(formula)){
68
- const result = extractAmisFormulaVariableNames(parse(formula));
89
+ const result: any[] = extractAmisFormulaVariableNames(parse(formula));
69
90
  return result;
70
91
  }
71
92
  return extract(formula);