@nordcraft/search 1.0.62 → 1.0.64

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 (38) hide show
  1. package/dist/rules/issues/actions/actionRules.index.js +2 -0
  2. package/dist/rules/issues/actions/actionRules.index.js.map +1 -1
  3. package/dist/rules/issues/actions/duplicateActionArgumentNameRule.js +18 -0
  4. package/dist/rules/issues/actions/duplicateActionArgumentNameRule.js.map +1 -0
  5. package/dist/rules/issues/actions/duplicateActionArgumentNameRule.test.js +131 -0
  6. package/dist/rules/issues/actions/duplicateActionArgumentNameRule.test.js.map +1 -0
  7. package/dist/rules/issues/apis/noReferenceApiInputRule.test.js +2 -0
  8. package/dist/rules/issues/apis/noReferenceApiInputRule.test.js.map +1 -1
  9. package/dist/rules/issues/apis/unknownApiInputRule.test.js +2 -0
  10. package/dist/rules/issues/apis/unknownApiInputRule.test.js.map +1 -1
  11. package/dist/rules/issues/formulas/duplicateFormulaArgumentNameRule.js +18 -0
  12. package/dist/rules/issues/formulas/duplicateFormulaArgumentNameRule.js.map +1 -0
  13. package/dist/rules/issues/formulas/duplicateFormulaArgumentNameRule.test.js +163 -0
  14. package/dist/rules/issues/formulas/duplicateFormulaArgumentNameRule.test.js.map +1 -0
  15. package/dist/rules/issues/formulas/formulaRules.index.js +2 -0
  16. package/dist/rules/issues/formulas/formulaRules.index.js.map +1 -1
  17. package/dist/rules/issues/formulas/unknownRepeatIndexFormulaRule.js +5 -4
  18. package/dist/rules/issues/formulas/unknownRepeatIndexFormulaRule.js.map +1 -1
  19. package/dist/rules/issues/formulas/unknownRepeatIndexFormulaRule.test.js +121 -0
  20. package/dist/rules/issues/formulas/unknownRepeatIndexFormulaRule.test.js.map +1 -1
  21. package/dist/rules/issues/formulas/unknownRepeatItemFormulaRule.js +6 -4
  22. package/dist/rules/issues/formulas/unknownRepeatItemFormulaRule.js.map +1 -1
  23. package/dist/rules/issues/formulas/unknownRepeatItemFormulaRule.test.js +137 -0
  24. package/dist/rules/issues/formulas/unknownRepeatItemFormulaRule.test.js.map +1 -1
  25. package/package.json +3 -3
  26. package/src/rules/issues/actions/actionRules.index.ts +2 -0
  27. package/src/rules/issues/actions/duplicateActionArgumentNameRule.test.ts +146 -0
  28. package/src/rules/issues/actions/duplicateActionArgumentNameRule.ts +21 -0
  29. package/src/rules/issues/apis/noReferenceApiInputRule.test.ts +2 -0
  30. package/src/rules/issues/apis/unknownApiInputRule.test.ts +2 -0
  31. package/src/rules/issues/formulas/duplicateFormulaArgumentNameRule.test.ts +180 -0
  32. package/src/rules/issues/formulas/duplicateFormulaArgumentNameRule.ts +21 -0
  33. package/src/rules/issues/formulas/formulaRules.index.ts +2 -0
  34. package/src/rules/issues/formulas/unknownRepeatIndexFormulaRule.test.ts +128 -0
  35. package/src/rules/issues/formulas/unknownRepeatIndexFormulaRule.ts +5 -4
  36. package/src/rules/issues/formulas/unknownRepeatItemFormulaRule.test.ts +143 -0
  37. package/src/rules/issues/formulas/unknownRepeatItemFormulaRule.ts +6 -4
  38. package/src/types.d.ts +2 -0
@@ -1,4 +1,5 @@
1
1
  import { createActionNameRule } from './createActionNameRule';
2
+ import { duplicateActionArgumentNameRule } from './duplicateActionArgumentNameRule';
2
3
  import { legacyActionRule } from './legacyActionRule';
3
4
  import { noReferenceProjectActionRule } from './noReferenceProjectActionRule';
4
5
  import { unknownProjectActionRule } from './unknownProjectActionRule';
@@ -7,6 +8,7 @@ export default [
7
8
  name: '@toddle/logToConsole',
8
9
  code: 'no-console',
9
10
  }),
11
+ duplicateActionArgumentNameRule,
10
12
  legacyActionRule,
11
13
  noReferenceProjectActionRule,
12
14
  unknownProjectActionRule,
@@ -1 +1 @@
1
- {"version":3,"file":"actionRules.index.js","sourceRoot":"","sources":["../../../../src/rules/issues/actions/actionRules.index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAErE,eAAe;IACb,oBAAoB,CAAC;QACnB,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,YAAY;KACnB,CAAC;IACF,gBAAgB;IAChB,4BAA4B;IAC5B,wBAAwB;CACzB,CAAA"}
1
+ {"version":3,"file":"actionRules.index.js","sourceRoot":"","sources":["../../../../src/rules/issues/actions/actionRules.index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAErE,eAAe;IACb,oBAAoB,CAAC;QACnB,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,YAAY;KACnB,CAAC;IACF,+BAA+B;IAC/B,gBAAgB;IAChB,4BAA4B;IAC5B,wBAAwB;CACzB,CAAA"}
@@ -0,0 +1,18 @@
1
+ export const duplicateActionArgumentNameRule = {
2
+ code: 'duplicate action argument name',
3
+ level: 'error',
4
+ category: 'Quality',
5
+ visit: (report, { path, value, nodeType }) => {
6
+ if (nodeType !== 'project-action') {
7
+ return;
8
+ }
9
+ const argumentNames = new Set();
10
+ value.arguments?.forEach((arg) => {
11
+ if (argumentNames.has(arg.name)) {
12
+ report(path, { name: arg.name });
13
+ }
14
+ argumentNames.add(arg.name);
15
+ });
16
+ },
17
+ };
18
+ //# sourceMappingURL=duplicateActionArgumentNameRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicateActionArgumentNameRule.js","sourceRoot":"","sources":["../../../../src/rules/issues/actions/duplicateActionArgumentNameRule.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,+BAA+B,GAEvC;IACH,IAAI,EAAE,gCAAgC;IACtC,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YAClC,OAAM;QACR,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;QACvC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YAClC,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA"}
@@ -0,0 +1,131 @@
1
+ import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils';
2
+ import { describe, expect, test } from 'bun:test';
3
+ import { searchProject } from '../../../searchProject';
4
+ import { duplicateActionArgumentNameRule } from './duplicateActionArgumentNameRule';
5
+ describe('duplicateActionArgumentNameRule', () => {
6
+ test('should detect duplicate argument names in actions', () => {
7
+ const files = {
8
+ actions: {
9
+ myAction: {
10
+ name: 'myAction',
11
+ variableArguments: false,
12
+ arguments: [
13
+ {
14
+ name: 'arg1',
15
+ formula: valueFormula(null),
16
+ },
17
+ {
18
+ name: 'arg2',
19
+ formula: valueFormula(null),
20
+ },
21
+ {
22
+ name: 'arg1', // Duplicate
23
+ formula: valueFormula(null),
24
+ },
25
+ ],
26
+ handler: '',
27
+ version: 2,
28
+ },
29
+ },
30
+ components: {},
31
+ };
32
+ const problems = Array.from(searchProject({
33
+ files,
34
+ rules: [duplicateActionArgumentNameRule],
35
+ }));
36
+ expect(problems).toHaveLength(1);
37
+ expect(problems[0].code).toBe('duplicate action argument name');
38
+ expect(problems[0].details).toEqual({ name: 'arg1' });
39
+ expect(problems[0].path).toEqual(['actions', 'myAction']);
40
+ });
41
+ test('should not report when all argument names are unique', () => {
42
+ const files = {
43
+ actions: {
44
+ uniqueArgsAction: {
45
+ name: 'uniqueArgsAction',
46
+ variableArguments: false,
47
+ arguments: [
48
+ { name: 'arg1', formula: valueFormula(null) },
49
+ { name: 'arg2', formula: valueFormula(null) },
50
+ { name: 'arg3', formula: valueFormula(null) },
51
+ ],
52
+ handler: '',
53
+ version: 2,
54
+ },
55
+ },
56
+ components: {},
57
+ };
58
+ const problems = Array.from(searchProject({
59
+ files,
60
+ rules: [duplicateActionArgumentNameRule],
61
+ }));
62
+ expect(problems).toHaveLength(0);
63
+ });
64
+ test('should not report when there are no arguments', () => {
65
+ const files = {
66
+ actions: {
67
+ noArgsAction: {
68
+ name: 'noArgsAction',
69
+ variableArguments: false,
70
+ arguments: [],
71
+ handler: '',
72
+ version: 2,
73
+ },
74
+ },
75
+ components: {},
76
+ };
77
+ const problems = Array.from(searchProject({
78
+ files,
79
+ rules: [duplicateActionArgumentNameRule],
80
+ }));
81
+ expect(problems).toHaveLength(0);
82
+ });
83
+ test('should not report when arguments is undefined', () => {
84
+ const files = {
85
+ actions: {
86
+ undefinedArgsAction: {
87
+ name: 'undefinedArgsAction',
88
+ variableArguments: false,
89
+ handler: '',
90
+ version: 2,
91
+ }, // Force arguments to be undefined
92
+ },
93
+ components: {},
94
+ };
95
+ const problems = Array.from(searchProject({
96
+ files,
97
+ rules: [duplicateActionArgumentNameRule],
98
+ }));
99
+ expect(problems).toHaveLength(0);
100
+ });
101
+ test('should report multiple duplicates', () => {
102
+ const files = {
103
+ actions: {
104
+ multiDupAction: {
105
+ name: 'multiDupAction',
106
+ variableArguments: false,
107
+ arguments: [
108
+ { name: 'arg1', formula: valueFormula(null) },
109
+ { name: 'arg2', formula: valueFormula(null) },
110
+ { name: 'arg1', formula: valueFormula(null) }, // Duplicate
111
+ { name: 'arg2', formula: valueFormula(null) }, // Duplicate
112
+ { name: 'arg3', formula: valueFormula(null) },
113
+ { name: 'arg1', formula: valueFormula(null) }, // Duplicate
114
+ ],
115
+ handler: '',
116
+ version: 2,
117
+ },
118
+ },
119
+ components: {},
120
+ };
121
+ const problems = Array.from(searchProject({
122
+ files,
123
+ rules: [duplicateActionArgumentNameRule],
124
+ }));
125
+ expect(problems).toHaveLength(3);
126
+ expect(problems[0].details).toEqual({ name: 'arg1' });
127
+ expect(problems[1].details).toEqual({ name: 'arg2' });
128
+ expect(problems[2].details).toEqual({ name: 'arg1' });
129
+ });
130
+ });
131
+ //# sourceMappingURL=duplicateActionArgumentNameRule.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicateActionArgumentNameRule.test.js","sourceRoot":"","sources":["../../../../src/rules/issues/actions/duplicateActionArgumentNameRule.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { ApiMethod } from '@nordcraft/core/dist/api/apiTypes';
1
2
  import { pathFormula, valueFormula, } from '@nordcraft/core/dist/formula/formulaUtils';
2
3
  import { describe, expect, test } from 'bun:test';
3
4
  import { searchProject } from '../../../searchProject';
@@ -17,6 +18,7 @@ describe('noReferenceApiInputRule', () => {
17
18
  name: 'my-api',
18
19
  type: 'http',
19
20
  version: 2,
21
+ method: ApiMethod.POST,
20
22
  autoFetch: valueFormula(true),
21
23
  inputs: {
22
24
  first: { formula: valueFormula('hello') },
@@ -1 +1 @@
1
- {"version":3,"file":"noReferenceApiInputRule.test.js","sourceRoot":"","sources":["../../../../src/rules/issues/apis/noReferenceApiInputRule.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"noReferenceApiInputRule.test.js","sourceRoot":"","sources":["../../../../src/rules/issues/apis/noReferenceApiInputRule.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { ApiMethod } from '@nordcraft/core/dist/api/apiTypes';
1
2
  import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils';
2
3
  import { describe, expect, test } from 'bun:test';
3
4
  import { searchProject } from '../../../searchProject';
@@ -16,6 +17,7 @@ describe('unknownApiInput', () => {
16
17
  name: 'my-api',
17
18
  type: 'http',
18
19
  version: 2,
20
+ method: ApiMethod.POST,
19
21
  autoFetch: valueFormula(true),
20
22
  inputs: {},
21
23
  body: {
@@ -1 +1 @@
1
- {"version":3,"file":"unknownApiInputRule.test.js","sourceRoot":"","sources":["../../../../src/rules/issues/apis/unknownApiInputRule.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,aAAa,CAAC;YACZ,KAAK,EAAE;gBACL,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE;4BACJ,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,CAAC;gCACV,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC;gCAC7B,MAAM,EAAE,EAAE;gCACV,IAAI,EAAE;oCACJ,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC;iCACrC;gCACD,qBAAqB,EAAE;oCACrB,QAAQ,EAAE,IAAI;iCACf;6BACF;yBACF;wBACD,UAAU,EAAE,EAAE;wBACd,SAAS,EAAE,EAAE;qBACd;iBACF;aACF;YACD,KAAK,EAAE,CAAC,mBAAmB,CAAC;SAC7B,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,aAAa,CAAC;YACZ,KAAK,EAAE;gBACL,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE;4BACJ,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,CAAC;gCACV,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC;gCAC7B,MAAM,EAAE;oCACN,aAAa,EAAE;wCACb,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;qCAC/B;iCACF;gCACD,IAAI,EAAE;oCACJ,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC;iCACnC;gCACD,qBAAqB,EAAE;oCACrB,QAAQ,EAAE,IAAI;iCACf;6BACF;yBACF;wBACD,UAAU,EAAE,EAAE;wBACd,SAAS,EAAE,EAAE;qBACd;iBACF;aACF;YACD,KAAK,EAAE,CAAC,mBAAmB,CAAC;SAC7B,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"unknownApiInputRule.test.js","sourceRoot":"","sources":["../../../../src/rules/issues/apis/unknownApiInputRule.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,aAAa,CAAC;YACZ,KAAK,EAAE;gBACL,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE;4BACJ,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,CAAC;gCACV,MAAM,EAAE,SAAS,CAAC,IAAI;gCACtB,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC;gCAC7B,MAAM,EAAE,EAAE;gCACV,IAAI,EAAE;oCACJ,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC;iCACrC;gCACD,qBAAqB,EAAE;oCACrB,QAAQ,EAAE,IAAI;iCACf;6BACF;yBACF;wBACD,UAAU,EAAE,EAAE;wBACd,SAAS,EAAE,EAAE;qBACd;iBACF;aACF;YACD,KAAK,EAAE,CAAC,mBAAmB,CAAC;SAC7B,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,aAAa,CAAC;YACZ,KAAK,EAAE;gBACL,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE;4BACJ,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,CAAC;gCACV,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC;gCAC7B,MAAM,EAAE;oCACN,aAAa,EAAE;wCACb,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;qCAC/B;iCACF;gCACD,IAAI,EAAE;oCACJ,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC;iCACnC;gCACD,qBAAqB,EAAE;oCACrB,QAAQ,EAAE,IAAI;iCACf;6BACF;yBACF;wBACD,UAAU,EAAE,EAAE;wBACd,SAAS,EAAE,EAAE;qBACd;iBACF;aACF;YACD,KAAK,EAAE,CAAC,mBAAmB,CAAC;SAC7B,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ export const duplicateFormulaArgumentNameRule = {
2
+ code: 'duplicate formula argument name',
3
+ level: 'error',
4
+ category: 'Quality',
5
+ visit: (report, { path, value, nodeType }) => {
6
+ if (nodeType !== 'project-formula' && nodeType !== 'component-formula') {
7
+ return;
8
+ }
9
+ const argumentNames = new Set();
10
+ value.arguments?.forEach((arg) => {
11
+ if (argumentNames.has(arg.name)) {
12
+ report(path, { name: arg.name });
13
+ }
14
+ argumentNames.add(arg.name);
15
+ });
16
+ },
17
+ };
18
+ //# sourceMappingURL=duplicateFormulaArgumentNameRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicateFormulaArgumentNameRule.js","sourceRoot":"","sources":["../../../../src/rules/issues/formulas/duplicateFormulaArgumentNameRule.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gCAAgC,GAExC;IACH,IAAI,EAAE,iCAAiC;IACvC,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,IAAI,QAAQ,KAAK,iBAAiB,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACvE,OAAM;QACR,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;QACvC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YAClC,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA"}
@@ -0,0 +1,163 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+ import { searchProject } from '../../../searchProject';
3
+ import { duplicateFormulaArgumentNameRule } from './duplicateFormulaArgumentNameRule';
4
+ describe('duplicateFormulaArgumentNameRule', () => {
5
+ test('should detect duplicate argument names in formulas', () => {
6
+ const problems = Array.from(searchProject({
7
+ files: {
8
+ components: {
9
+ test: {
10
+ name: 'test',
11
+ nodes: {},
12
+ formulas: {
13
+ myFormula: {
14
+ name: 'myFormula',
15
+ arguments: [
16
+ { name: 'arg1', testValue: 'bla' },
17
+ { name: 'arg2', testValue: 'bla' },
18
+ { name: 'arg1', testValue: 'bla' }, // Duplicate
19
+ ],
20
+ formula: {
21
+ type: 'value',
22
+ value: null,
23
+ },
24
+ },
25
+ },
26
+ apis: {},
27
+ attributes: {},
28
+ variables: {},
29
+ },
30
+ },
31
+ },
32
+ rules: [duplicateFormulaArgumentNameRule],
33
+ }));
34
+ expect(problems).toHaveLength(1);
35
+ expect(problems[0].code).toBe('duplicate formula argument name');
36
+ expect(problems[0].details).toEqual({ name: 'arg1' });
37
+ expect(problems[0].path).toEqual([
38
+ 'components',
39
+ 'test',
40
+ 'formulas',
41
+ 'myFormula',
42
+ ]);
43
+ });
44
+ test('should detect duplicate argument names in project formulas', () => {
45
+ const problems = Array.from(searchProject({
46
+ files: {
47
+ formulas: {
48
+ myFormula: {
49
+ name: 'myFormula',
50
+ arguments: [
51
+ { name: 'arg1', testValue: 'bla' },
52
+ { name: 'arg2', testValue: 'bla' },
53
+ { name: 'arg1', testValue: 'bla' }, // Duplicate
54
+ ],
55
+ formula: {
56
+ type: 'value',
57
+ value: null,
58
+ },
59
+ },
60
+ },
61
+ components: {},
62
+ },
63
+ rules: [duplicateFormulaArgumentNameRule],
64
+ }));
65
+ expect(problems).toHaveLength(1);
66
+ expect(problems[0].code).toBe('duplicate formula argument name');
67
+ expect(problems[0].details).toEqual({ name: 'arg1' });
68
+ expect(problems[0].path).toEqual(['formulas', 'myFormula']);
69
+ });
70
+ test('should not report when there are no duplicate argument names', () => {
71
+ const problems = Array.from(searchProject({
72
+ files: {
73
+ components: {
74
+ test: {
75
+ name: 'test',
76
+ nodes: {},
77
+ formulas: {
78
+ myFormula: {
79
+ name: 'myFormula',
80
+ arguments: [
81
+ { name: 'arg1', testValue: 'bla' },
82
+ { name: 'arg2', testValue: 'bla' },
83
+ { name: 'arg3', testValue: 'bla' },
84
+ ],
85
+ formula: {
86
+ type: 'value',
87
+ value: null,
88
+ },
89
+ },
90
+ },
91
+ apis: {},
92
+ attributes: {},
93
+ variables: {},
94
+ },
95
+ },
96
+ },
97
+ rules: [duplicateFormulaArgumentNameRule],
98
+ }));
99
+ expect(problems).toHaveLength(0);
100
+ });
101
+ test('should detect multiple duplicates', () => {
102
+ const problems = Array.from(searchProject({
103
+ files: {
104
+ components: {
105
+ test: {
106
+ name: 'test',
107
+ nodes: {},
108
+ formulas: {
109
+ myFormula: {
110
+ name: 'myFormula',
111
+ arguments: [
112
+ { name: 'arg1', testValue: 'bla' },
113
+ { name: 'arg2', testValue: 'bla' },
114
+ { name: 'arg1', testValue: 'bla' }, // Duplicate
115
+ { name: 'arg2', testValue: 'bla' }, // Duplicate
116
+ ],
117
+ formula: {
118
+ type: 'value',
119
+ value: null,
120
+ },
121
+ },
122
+ },
123
+ apis: {},
124
+ attributes: {},
125
+ variables: {},
126
+ },
127
+ },
128
+ },
129
+ rules: [duplicateFormulaArgumentNameRule],
130
+ }));
131
+ expect(problems).toHaveLength(2);
132
+ expect(problems[0].details).toEqual({ name: 'arg1' });
133
+ expect(problems[1].details).toEqual({ name: 'arg2' });
134
+ });
135
+ test('should not report for formulas with no arguments', () => {
136
+ const problems = Array.from(searchProject({
137
+ files: {
138
+ components: {
139
+ test: {
140
+ name: 'test',
141
+ nodes: {},
142
+ formulas: {
143
+ myFormula: {
144
+ name: 'myFormula',
145
+ arguments: [],
146
+ formula: {
147
+ type: 'value',
148
+ value: null,
149
+ },
150
+ },
151
+ },
152
+ apis: {},
153
+ attributes: {},
154
+ variables: {},
155
+ },
156
+ },
157
+ },
158
+ rules: [duplicateFormulaArgumentNameRule],
159
+ }));
160
+ expect(problems).toHaveLength(0);
161
+ });
162
+ });
163
+ //# sourceMappingURL=duplicateFormulaArgumentNameRule.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicateFormulaArgumentNameRule.test.js","sourceRoot":"","sources":["../../../../src/rules/issues/formulas/duplicateFormulaArgumentNameRule.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
+ import { duplicateFormulaArgumentNameRule } from './duplicateFormulaArgumentNameRule';
1
2
  import { legacyFormulaRule } from './legacyFormulaRule';
2
3
  import { noReferenceComponentFormulaRule } from './noReferenceComponentFormulaRule';
3
4
  import { noReferenceProjectFormulaRule } from './noReferenceProjectFormulaRule';
4
5
  export default [
5
6
  legacyFormulaRule,
7
+ duplicateFormulaArgumentNameRule,
6
8
  noReferenceComponentFormulaRule,
7
9
  noReferenceProjectFormulaRule,
8
10
  // unknownComponentFormulaInputRule,
@@ -1 +1 @@
1
- {"version":3,"file":"formulaRules.index.js","sourceRoot":"","sources":["../../../../src/rules/issues/formulas/formulaRules.index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAA;AACnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA;AAE/E,eAAe;IACb,iBAAiB;IACjB,+BAA+B;IAC/B,6BAA6B;IAC7B,oCAAoC;IACpC,iCAAiC;CAClC,CAAA"}
1
+ {"version":3,"file":"formulaRules.index.js","sourceRoot":"","sources":["../../../../src/rules/issues/formulas/formulaRules.index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAA;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAA;AACnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA;AAE/E,eAAe;IACb,iBAAiB;IACjB,gCAAgC;IAChC,+BAA+B;IAC/B,6BAA6B;IAC7B,oCAAoC;IACpC,iCAAiC;CAClC,CAAA"}
@@ -6,12 +6,13 @@ export const unknownRepeatIndexFormulaRule = {
6
6
  if (nodeType !== 'formula' ||
7
7
  value.type !== 'path' ||
8
8
  value.path?.[0] !== 'ListItem' ||
9
- value.path?.[1] !== 'Index' ||
10
- path.length < 3 ||
11
- path[0] !== 'components' ||
12
- path[2] !== 'nodes') {
9
+ value.path?.[1] !== 'Index') {
13
10
  return;
14
11
  }
12
+ if (path[0] !== 'components' || path[2] !== 'nodes') {
13
+ // Any use outside of a component node is invalid
14
+ return report(path);
15
+ }
15
16
  const [_components, componentName, _nodes, nodeId] = path;
16
17
  const component = files.components[componentName];
17
18
  if (!component) {
@@ -1 +1 @@
1
- {"version":3,"file":"unknownRepeatIndexFormulaRule.js","sourceRoot":"","sources":["../../../../src/rules/issues/formulas/unknownRepeatIndexFormulaRule.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,6BAA6B,GAAS;IACjD,IAAI,EAAE,8BAA8B;IACpC,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,mBAAmB;IAC7B,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAClD,IACE,QAAQ,KAAK,SAAS;YACtB,KAAK,CAAC,IAAI,KAAK,MAAM;YACrB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,UAAU;YAC9B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO;YAC3B,IAAI,CAAC,MAAM,GAAG,CAAC;YACf,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY;YACxB,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EACnB,CAAC;YACD,OAAM;QACR,CAAC;QACD,MAAM,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAgB,CAAA;QACrE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAM;QACR,CAAC;QACD,MAAM,oBAAoB,GAAG,CAC3B,IAA+C,EACxB,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAM;YACR,CAAC;YACD,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAA;YACvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAChE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAC5B,CAAA;YACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACrC,CAAC,CAAA;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;QAC7D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,CAAA;QACd,CAAC;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"unknownRepeatIndexFormulaRule.js","sourceRoot":"","sources":["../../../../src/rules/issues/formulas/unknownRepeatIndexFormulaRule.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,6BAA6B,GAAS;IACjD,IAAI,EAAE,8BAA8B;IACpC,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,mBAAmB;IAC7B,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAClD,IACE,QAAQ,KAAK,SAAS;YACtB,KAAK,CAAC,IAAI,KAAK,MAAM;YACrB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,UAAU;YAC9B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,EAC3B,CAAC;YACD,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACpD,iDAAiD;YACjD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,MAAM,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAgB,CAAA;QACrE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAM;QACR,CAAC;QACD,MAAM,oBAAoB,GAAG,CAC3B,IAA+C,EACxB,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAM;YACR,CAAC;YACD,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAA;YACvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAChE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAC5B,CAAA;YACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACrC,CAAC,CAAA;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;QAC7D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,CAAA;QACd,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -61,6 +61,127 @@ describe('unknownRepeatIndexFormulaRule', () => {
61
61
  'value',
62
62
  ]);
63
63
  });
64
+ test('should find unknown repeat index formulas outside of nodes', () => {
65
+ const problems = Array.from(searchProject({
66
+ files: {
67
+ formulas: {},
68
+ components: {
69
+ test: {
70
+ name: 'test',
71
+ nodes: {},
72
+ formulas: {},
73
+ apis: {},
74
+ attributes: {},
75
+ variables: {},
76
+ workflows: {
77
+ myWorkflow: {
78
+ name: 'myWorkflow',
79
+ parameters: [],
80
+ actions: [
81
+ {
82
+ name: '@toddle/logToConsole',
83
+ group: 'debugging',
84
+ label: 'Log to console',
85
+ arguments: [
86
+ {
87
+ name: 'Label',
88
+ formula: { type: 'value', value: '' },
89
+ description: 'A label for the message.',
90
+ },
91
+ {
92
+ name: 'Data',
93
+ type: { type: 'Any' },
94
+ formula: {
95
+ type: 'path',
96
+ path: ['ListItem', 'Index'],
97
+ },
98
+ description: 'The data you want to log to the console.',
99
+ },
100
+ ],
101
+ description: 'Log a message to the browser console.',
102
+ },
103
+ ],
104
+ },
105
+ },
106
+ },
107
+ },
108
+ },
109
+ rules: [unknownRepeatIndexFormulaRule],
110
+ }));
111
+ expect(problems).toHaveLength(1);
112
+ expect(problems[0].code).toBe('unknown repeat index formula');
113
+ expect(problems[0].path).toEqual([
114
+ 'components',
115
+ 'test',
116
+ 'workflows',
117
+ 'myWorkflow',
118
+ 'actions',
119
+ 0,
120
+ 'arguments',
121
+ '1',
122
+ 'formula',
123
+ ]);
124
+ });
125
+ test('should find unknown repeat index outside of a component', () => {
126
+ const problems = Array.from(searchProject({
127
+ files: {
128
+ formulas: {
129
+ myFormula: {
130
+ name: 'myFormula',
131
+ formula: {
132
+ name: '@toddle/concatenate',
133
+ type: 'function',
134
+ arguments: [
135
+ {
136
+ name: '0',
137
+ type: {
138
+ type: 'Array \\| String \\| Object',
139
+ },
140
+ formula: {
141
+ path: ['Args', 'First'],
142
+ type: 'path',
143
+ },
144
+ },
145
+ {
146
+ name: '0',
147
+ type: {
148
+ type: 'Array \\| String \\| Object',
149
+ },
150
+ formula: {
151
+ type: 'path',
152
+ path: ['ListItem', 'Index'],
153
+ },
154
+ },
155
+ ],
156
+ display_name: 'Concatenate',
157
+ variableArguments: true,
158
+ },
159
+ version: 2,
160
+ arguments: [
161
+ {
162
+ name: 'First',
163
+ formula: null,
164
+ testValue: 'sdfsdf',
165
+ },
166
+ ],
167
+ description: 'sdfsdfsdf',
168
+ },
169
+ },
170
+ components: {},
171
+ },
172
+ rules: [unknownRepeatIndexFormulaRule],
173
+ }));
174
+ expect(problems).toHaveLength(1);
175
+ expect(problems[0].code).toBe('unknown repeat index formula');
176
+ expect(problems[0].path).toEqual([
177
+ 'formulas',
178
+ 'myFormula',
179
+ 'formula',
180
+ 'arguments',
181
+ 1,
182
+ 'formula',
183
+ ]);
184
+ });
64
185
  test('should ignore known repeat index formulas', () => {
65
186
  const problems = Array.from(searchProject({
66
187
  files: {
@@ -1 +1 @@
1
- {"version":3,"file":"unknownRepeatIndexFormulaRule.test.js","sourceRoot":"","sources":["../../../../src/rules/issues/formulas/unknownRepeatIndexFormulaRule.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unknownRepeatIndexFormulaRule.test.js","sourceRoot":"","sources":["../../../../src/rules/issues/formulas/unknownRepeatIndexFormulaRule.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA;AAE/E,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,aAAa,CAAC;YACZ,KAAK,EAAE;gBACL,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE;4BACL,uBAAuB,EAAE;gCACvB,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE;oCACL,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;iCAC5B;6BACF;4BACD,uBAAuB,EAAE;gCACvB,GAAG,EAAE,IAAI;gCACT,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,EAAE;gCACT,KAAK,EAAE;oCACL,aAAa,EAAE,4BAA4B;oCAC3C,iBAAiB,EAAE,QAAQ;iCAC5B;gCACD,MAAM,EAAE,EAAE;gCACV,OAAO,EAAE,EAAE;gCACX,QAAQ,EAAE,CAAC,uBAAuB,CAAC;6BACpC;4BACD,IAAI,EAAE;gCACJ,GAAG,EAAE,IAAI;gCACT,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,EAAE;gCACT,KAAK,EAAE;oCACL,GAAG,EAAE,KAAK;oCACV,KAAK,EAAE,MAAM;iCACd;gCACD,MAAM,EAAE,EAAE;gCACV,OAAO,EAAE,EAAE;gCACX,QAAQ,EAAE,CAAC,uBAAuB,CAAC;6BACpC;yBACF;wBACD,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE,EAAE;wBACR,UAAU,EAAE,EAAE;wBACd,SAAS,EAAE,EAAE;qBACd;iBACF;aACF;YACD,KAAK,EAAE,CAAC,6BAA6B,CAAC;SACvC,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC7D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC/B,YAAY;YACZ,MAAM;YACN,OAAO;YACP,uBAAuB;YACvB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,aAAa,CAAC;YACZ,KAAK,EAAE;gBACL,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE,EAAE;wBACR,UAAU,EAAE,EAAE;wBACd,SAAS,EAAE,EAAE;wBACb,SAAS,EAAE;4BACT,UAAU,EAAE;gCACV,IAAI,EAAE,YAAY;gCAClB,UAAU,EAAE,EAAE;gCACd,OAAO,EAAE;oCACP;wCACE,IAAI,EAAE,sBAAsB;wCAC5B,KAAK,EAAE,WAAW;wCAClB,KAAK,EAAE,gBAAgB;wCACvB,SAAS,EAAE;4CACT;gDACE,IAAI,EAAE,OAAO;gDACb,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;gDACrC,WAAW,EAAE,0BAA0B;6CACxC;4CACD;gDACE,IAAI,EAAE,MAAM;gDACZ,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;gDACrB,OAAO,EAAE;oDACP,IAAI,EAAE,MAAM;oDACZ,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;iDAC5B;gDACD,WAAW,EACT,0CAA0C;6CAC7C;yCACF;wCACD,WAAW,EAAE,uCAAuC;qCACrD;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;YACD,KAAK,EAAE,CAAC,6BAA6B,CAAC;SACvC,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC7D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC/B,YAAY;YACZ,MAAM;YACN,WAAW;YACX,YAAY;YACZ,SAAS;YACT,CAAC;YACD,WAAW;YACX,GAAG;YACH,SAAS;SACV,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,aAAa,CAAC;YACZ,KAAK,EAAE;gBACL,QAAQ,EAAE;oBACR,SAAS,EAAE;wBACT,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE;4BACP,IAAI,EAAE,qBAAqB;4BAC3B,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE;gCACT;oCACE,IAAI,EAAE,GAAG;oCACT,IAAI,EAAE;wCACJ,IAAI,EAAE,6BAA6B;qCACpC;oCACD,OAAO,EAAE;wCACP,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;wCACvB,IAAI,EAAE,MAAM;qCACb;iCACF;gCACD;oCACE,IAAI,EAAE,GAAG;oCACT,IAAI,EAAE;wCACJ,IAAI,EAAE,6BAA6B;qCACpC;oCACD,OAAO,EAAE;wCACP,IAAI,EAAE,MAAM;wCACZ,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;qCAC5B;iCACF;6BACF;4BACD,YAAY,EAAE,aAAa;4BAC3B,iBAAiB,EAAE,IAAI;yBACxB;wBACD,OAAO,EAAE,CAAC;wBACV,SAAS,EAAE;4BACT;gCACE,IAAI,EAAE,OAAO;gCACb,OAAO,EAAE,IAAI;gCACb,SAAS,EAAE,QAAQ;6BACpB;yBACF;wBACD,WAAW,EAAE,WAAW;qBACzB;iBACF;gBACD,UAAU,EAAE,EAAE;aACf;YACD,KAAK,EAAE,CAAC,6BAA6B,CAAC;SACvC,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC7D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC/B,UAAU;YACV,WAAW;YACX,SAAS;YACT,WAAW;YACX,CAAC;YACD,SAAS;SACV,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,aAAa,CAAC;YACZ,KAAK,EAAE;gBACL,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE;4BACL,uBAAuB,EAAE;gCACvB,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE;oCACL,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;iCAC5B;6BACF;4BACD,uBAAuB,EAAE;gCACvB,GAAG,EAAE,IAAI;gCACT,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,EAAE;gCACT,KAAK,EAAE;oCACL,aAAa,EAAE,4BAA4B;oCAC3C,iBAAiB,EAAE,QAAQ;iCAC5B;gCACD,MAAM,EAAE,EAAE;gCACV,OAAO,EAAE,EAAE;gCACX,QAAQ,EAAE,CAAC,uBAAuB,CAAC;gCACnC,MAAM,EAAE;oCACN,IAAI,EAAE,OAAO;oCACb,SAAS,EAAE;wCACT;4CACE,OAAO,EAAE;gDACP,IAAI,EAAE,OAAO;gDACb,KAAK,EAAE,CAAC;6CACT;yCACF;wCACD;4CACE,OAAO,EAAE;gDACP,IAAI,EAAE,OAAO;gDACb,KAAK,EAAE,CAAC;6CACT;yCACF;qCACF;iCACF;6BACF;4BACD,IAAI,EAAE;gCACJ,GAAG,EAAE,IAAI;gCACT,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,EAAE;gCACT,KAAK,EAAE;oCACL,GAAG,EAAE,KAAK;oCACV,KAAK,EAAE,MAAM;iCACd;gCACD,MAAM,EAAE,EAAE;gCACV,OAAO,EAAE,EAAE;gCACX,QAAQ,EAAE,CAAC,uBAAuB,CAAC;6BACpC;yBACF;wBACD,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE,EAAE;wBACR,UAAU,EAAE,EAAE;wBACd,SAAS,EAAE,EAAE;qBACd;iBACF;aACF;YACD,KAAK,EAAE,CAAC,6BAA6B,CAAC;SACvC,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}