@nordcraft/search 1.0.0 → 1.0.1

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.
@@ -7,17 +7,16 @@ export const unknownSetUrlParameterRule = {
7
7
  args.value.type !== 'SetURLParameter') {
8
8
  return;
9
9
  }
10
- const parameterName = args.value.parameter;
11
- const component = args.component;
12
- if (
10
+ const isValidParameter = (parameterName) =>
13
11
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
14
- component.route?.path?.some((p) => p.name === parameterName &&
12
+ args.component.route?.path?.some((p) => p.name === parameterName &&
15
13
  // It's only valid to set non-static path parameters
16
14
  p.type === 'param') ||
17
- Object.values(component.route?.query ?? {}).some((q) => q.name === parameterName)) {
18
- return;
15
+ Object.values(args.component.route?.query ?? {}).some((q) => q.name === parameterName);
16
+ const parameterName = args.value.parameter;
17
+ if (!isValidParameter(parameterName)) {
18
+ report(args.path, { name: parameterName });
19
19
  }
20
- report(args.path, { name: parameterName });
21
20
  },
22
21
  };
23
22
  //# sourceMappingURL=unknownSetUrlParameterRule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unknownSetUrlParameterRule.js","sourceRoot":"","sources":["../../../src/rules/urlParameters/unknownSetUrlParameterRule.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAElC;IACH,IAAI,EAAE,2BAA2B;IACjC,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,mBAAmB;IAC7B,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACtB,IACE,IAAI,CAAC,QAAQ,KAAK,cAAc;YAChC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,EACrC,CAAC;YACD,OAAM;QACR,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAA;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC;QACE,uEAAuE;QACvE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,aAAa;YACxB,oDAAoD;YACpD,CAAC,CAAC,IAAI,KAAK,OAAO,CACrB;YACD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAChC,EACD,CAAC;YACD,OAAM;QACR,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA;IAC5C,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"unknownSetUrlParameterRule.js","sourceRoot":"","sources":["../../../src/rules/urlParameters/unknownSetUrlParameterRule.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAElC;IACH,IAAI,EAAE,2BAA2B;IACjC,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,mBAAmB;IAC7B,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACtB,IACE,IAAI,CAAC,QAAQ,KAAK,cAAc;YAChC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,EACrC,CAAC;YACD,OAAM;QACR,CAAC;QACD,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAE,EAAE;QACjD,uEAAuE;QACvE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,aAAa;YACxB,oDAAoD;YACpD,CAAC,CAAC,IAAI,KAAK,OAAO,CAErB;YACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAChC,CAAA;QACH,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAA;QAC1C,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -1,7 +1,6 @@
1
1
  import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils';
2
2
  import { searchProject } from '../../searchProject';
3
3
  import { unknownSetUrlParameterRule } from './unknownSetUrlParameterRule';
4
- import { unknownUrlParameterRule } from './unknownUrlParameterRule';
5
4
  describe('unknownSetUrlParameterRule', () => {
6
5
  test('should report setting unknown URL parameters', () => {
7
6
  const problems = Array.from(searchProject({
@@ -143,7 +142,7 @@ describe('unknownSetUrlParameterRule', () => {
143
142
  },
144
143
  },
145
144
  },
146
- rules: [unknownUrlParameterRule],
145
+ rules: [unknownSetUrlParameterRule],
147
146
  }));
148
147
  expect(problems).toEqual([]);
149
148
  });
@@ -1 +1 @@
1
- {"version":3,"file":"unknownSetUrlParameterRule.test.js","sourceRoot":"","sources":["../../../src/rules/urlParameters/unknownSetUrlParameterRule.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unknownSetUrlParameterRule.test.js","sourceRoot":"","sources":["../../../src/rules/urlParameters/unknownSetUrlParameterRule.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export const unknownSetUrlParametersRule = {
2
+ code: 'unknown set url parameters',
3
+ level: 'error',
4
+ category: 'Unknown Reference',
5
+ visit: (report, args) => {
6
+ if (args.nodeType !== 'action-model' ||
7
+ args.value.type !== 'SetURLParameters') {
8
+ return;
9
+ }
10
+ const isValidParameter = (parameterName) =>
11
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
12
+ args.component.route?.path?.some((p) => p.name === parameterName &&
13
+ // It's only valid to set non-static path parameters
14
+ p.type === 'param') ||
15
+ Object.values(args.component.route?.query ?? {}).some((q) => q.name === parameterName);
16
+ for (const key of Object.keys(args.value.parameters ?? {})) {
17
+ if (!isValidParameter(key)) {
18
+ report([...args.path, 'parameters', key], { name: key });
19
+ }
20
+ }
21
+ },
22
+ };
23
+ //# sourceMappingURL=unknownSetUrlParametersRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknownSetUrlParametersRule.js","sourceRoot":"","sources":["../../../src/rules/urlParameters/unknownSetUrlParametersRule.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,2BAA2B,GAEnC;IACH,IAAI,EAAE,4BAA4B;IAClC,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,mBAAmB;IAC7B,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACtB,IACE,IAAI,CAAC,QAAQ,KAAK,cAAc;YAChC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,EACtC,CAAC;YACD,OAAM;QACR,CAAC;QACD,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAE,EAAE;QACjD,uEAAuE;QACvE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,aAAa;YACxB,oDAAoD;YACpD,CAAC,CAAC,IAAI,KAAK,OAAO,CAErB;YACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAChC,CAAA;QACH,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,148 @@
1
+ import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils';
2
+ import { searchProject } from '../../searchProject';
3
+ import { unknownSetUrlParametersRule } from './unknownSetUrlParametersRule';
4
+ describe('unknownSetUrlParametersRule', () => {
5
+ test('should report setting unknown URL parameters', () => {
6
+ const problems = Array.from(searchProject({
7
+ files: {
8
+ components: {
9
+ test: {
10
+ name: 'test',
11
+ nodes: {
12
+ root: {
13
+ type: 'element',
14
+ attrs: {},
15
+ classes: {},
16
+ events: {
17
+ click: {
18
+ trigger: 'click',
19
+ actions: [
20
+ {
21
+ type: 'SetURLParameters',
22
+ parameters: { unknown: valueFormula('newValue') },
23
+ },
24
+ ],
25
+ },
26
+ },
27
+ tag: 'div',
28
+ children: [],
29
+ style: {},
30
+ },
31
+ },
32
+ formulas: {},
33
+ apis: {},
34
+ attributes: {},
35
+ variables: {},
36
+ },
37
+ },
38
+ },
39
+ rules: [unknownSetUrlParametersRule],
40
+ }));
41
+ expect(problems).toHaveLength(1);
42
+ expect(problems[0].code).toBe('unknown set url parameters');
43
+ expect(problems[0].details).toEqual({ name: 'unknown' });
44
+ });
45
+ test('should report setting static path parameters', () => {
46
+ const problems = Array.from(searchProject({
47
+ files: {
48
+ components: {
49
+ test: {
50
+ name: 'test',
51
+ nodes: {
52
+ root: {
53
+ type: 'element',
54
+ attrs: {},
55
+ classes: {},
56
+ events: {
57
+ click: {
58
+ trigger: 'click',
59
+ actions: [
60
+ {
61
+ type: 'SetURLParameters',
62
+ parameters: { knownPath: valueFormula('newValue') },
63
+ },
64
+ ],
65
+ },
66
+ },
67
+ tag: 'div',
68
+ children: [],
69
+ style: {},
70
+ },
71
+ },
72
+ formulas: {},
73
+ apis: {},
74
+ attributes: {},
75
+ variables: {},
76
+ route: {
77
+ path: [
78
+ {
79
+ name: 'knownPath',
80
+ type: 'static',
81
+ },
82
+ ],
83
+ query: {},
84
+ },
85
+ },
86
+ },
87
+ },
88
+ rules: [unknownSetUrlParametersRule],
89
+ }));
90
+ expect(problems).toHaveLength(1);
91
+ expect(problems[0].code).toBe('unknown set url parameters');
92
+ expect(problems[0].details).toEqual({ name: 'knownPath' });
93
+ });
94
+ test('should not report valid url updates', () => {
95
+ const problems = Array.from(searchProject({
96
+ files: {
97
+ components: {
98
+ test: {
99
+ name: 'test',
100
+ nodes: {
101
+ root: {
102
+ type: 'element',
103
+ attrs: {},
104
+ classes: {},
105
+ events: {
106
+ click: {
107
+ trigger: 'click',
108
+ actions: [
109
+ {
110
+ type: 'SetURLParameter',
111
+ parameter: 'known-query',
112
+ data: valueFormula('newValue'),
113
+ },
114
+ {
115
+ type: 'SetURLParameter',
116
+ parameter: 'known-path',
117
+ data: valueFormula('newValue'),
118
+ },
119
+ ],
120
+ },
121
+ },
122
+ tag: 'div',
123
+ children: [],
124
+ style: {},
125
+ },
126
+ },
127
+ formulas: {},
128
+ apis: {},
129
+ attributes: {},
130
+ variables: {},
131
+ route: {
132
+ path: [{ name: 'known-path', type: 'param', testValue: 'bla' }],
133
+ query: {
134
+ 'known-query': {
135
+ name: 'known-query',
136
+ testValue: '',
137
+ },
138
+ },
139
+ },
140
+ },
141
+ },
142
+ },
143
+ rules: [unknownSetUrlParametersRule],
144
+ }));
145
+ expect(problems).toEqual([]);
146
+ });
147
+ });
148
+ //# sourceMappingURL=unknownSetUrlParametersRule.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknownSetUrlParametersRule.test.js","sourceRoot":"","sources":["../../../src/rules/urlParameters/unknownSetUrlParametersRule.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/nordcraftengine/nordcraft",
7
7
  "dependencies": {
8
- "@nordcraft/ssr": "1.0.0"
8
+ "@nordcraft/ssr": "1.0.1"
9
9
  },
10
10
  "scripts": {
11
11
  "build": "tsc",
@@ -17,5 +17,5 @@
17
17
  "test:watch:only": "bun test --watch --only"
18
18
  },
19
19
  "files": ["dist", "src"],
20
- "version": "1.0.0"
20
+ "version": "1.0.1"
21
21
  }
@@ -1,7 +1,6 @@
1
1
  import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils'
2
2
  import { searchProject } from '../../searchProject'
3
3
  import { unknownSetUrlParameterRule } from './unknownSetUrlParameterRule'
4
- import { unknownUrlParameterRule } from './unknownUrlParameterRule'
5
4
 
6
5
  describe('unknownSetUrlParameterRule', () => {
7
6
  test('should report setting unknown URL parameters', () => {
@@ -153,7 +152,7 @@ describe('unknownSetUrlParameterRule', () => {
153
152
  },
154
153
  },
155
154
  },
156
- rules: [unknownUrlParameterRule],
155
+ rules: [unknownSetUrlParameterRule],
157
156
  }),
158
157
  )
159
158
 
@@ -13,22 +13,21 @@ export const unknownSetUrlParameterRule: Rule<{
13
13
  ) {
14
14
  return
15
15
  }
16
- const parameterName = args.value.parameter
17
- const component = args.component
18
- if (
16
+ const isValidParameter = (parameterName: string) =>
19
17
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
20
- component.route?.path?.some(
18
+ args.component.route?.path?.some(
21
19
  (p) =>
22
20
  p.name === parameterName &&
23
21
  // It's only valid to set non-static path parameters
24
22
  p.type === 'param',
23
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
25
24
  ) ||
26
- Object.values(component.route?.query ?? {}).some(
25
+ Object.values(args.component.route?.query ?? {}).some(
27
26
  (q) => q.name === parameterName,
28
27
  )
29
- ) {
30
- return
28
+ const parameterName = args.value.parameter
29
+ if (!isValidParameter(parameterName)) {
30
+ report(args.path, { name: parameterName })
31
31
  }
32
- report(args.path, { name: parameterName })
33
32
  },
34
33
  }
@@ -0,0 +1,159 @@
1
+ import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils'
2
+ import { searchProject } from '../../searchProject'
3
+ import { unknownSetUrlParametersRule } from './unknownSetUrlParametersRule'
4
+
5
+ describe('unknownSetUrlParametersRule', () => {
6
+ test('should report setting unknown URL parameters', () => {
7
+ const problems = Array.from(
8
+ searchProject({
9
+ files: {
10
+ components: {
11
+ test: {
12
+ name: 'test',
13
+ nodes: {
14
+ root: {
15
+ type: 'element',
16
+ attrs: {},
17
+ classes: {},
18
+ events: {
19
+ click: {
20
+ trigger: 'click',
21
+ actions: [
22
+ {
23
+ type: 'SetURLParameters',
24
+ parameters: { unknown: valueFormula('newValue') },
25
+ },
26
+ ],
27
+ },
28
+ },
29
+ tag: 'div',
30
+ children: [],
31
+ style: {},
32
+ },
33
+ },
34
+ formulas: {},
35
+ apis: {},
36
+ attributes: {},
37
+ variables: {},
38
+ },
39
+ },
40
+ },
41
+ rules: [unknownSetUrlParametersRule],
42
+ }),
43
+ )
44
+
45
+ expect(problems).toHaveLength(1)
46
+ expect(problems[0].code).toBe('unknown set url parameters')
47
+ expect(problems[0].details).toEqual({ name: 'unknown' })
48
+ })
49
+
50
+ test('should report setting static path parameters', () => {
51
+ const problems = Array.from(
52
+ searchProject({
53
+ files: {
54
+ components: {
55
+ test: {
56
+ name: 'test',
57
+ nodes: {
58
+ root: {
59
+ type: 'element',
60
+ attrs: {},
61
+ classes: {},
62
+ events: {
63
+ click: {
64
+ trigger: 'click',
65
+ actions: [
66
+ {
67
+ type: 'SetURLParameters',
68
+ parameters: { knownPath: valueFormula('newValue') },
69
+ },
70
+ ],
71
+ },
72
+ },
73
+ tag: 'div',
74
+ children: [],
75
+ style: {},
76
+ },
77
+ },
78
+ formulas: {},
79
+ apis: {},
80
+ attributes: {},
81
+ variables: {},
82
+ route: {
83
+ path: [
84
+ {
85
+ name: 'knownPath',
86
+ type: 'static',
87
+ },
88
+ ],
89
+ query: {},
90
+ },
91
+ },
92
+ },
93
+ },
94
+ rules: [unknownSetUrlParametersRule],
95
+ }),
96
+ )
97
+
98
+ expect(problems).toHaveLength(1)
99
+ expect(problems[0].code).toBe('unknown set url parameters')
100
+ expect(problems[0].details).toEqual({ name: 'knownPath' })
101
+ })
102
+
103
+ test('should not report valid url updates', () => {
104
+ const problems = Array.from(
105
+ searchProject({
106
+ files: {
107
+ components: {
108
+ test: {
109
+ name: 'test',
110
+ nodes: {
111
+ root: {
112
+ type: 'element',
113
+ attrs: {},
114
+ classes: {},
115
+ events: {
116
+ click: {
117
+ trigger: 'click',
118
+ actions: [
119
+ {
120
+ type: 'SetURLParameter',
121
+ parameter: 'known-query',
122
+ data: valueFormula('newValue'),
123
+ },
124
+ {
125
+ type: 'SetURLParameter',
126
+ parameter: 'known-path',
127
+ data: valueFormula('newValue'),
128
+ },
129
+ ],
130
+ },
131
+ },
132
+ tag: 'div',
133
+ children: [],
134
+ style: {},
135
+ },
136
+ },
137
+ formulas: {},
138
+ apis: {},
139
+ attributes: {},
140
+ variables: {},
141
+ route: {
142
+ path: [{ name: 'known-path', type: 'param', testValue: 'bla' }],
143
+ query: {
144
+ 'known-query': {
145
+ name: 'known-query',
146
+ testValue: '',
147
+ },
148
+ },
149
+ },
150
+ },
151
+ },
152
+ },
153
+ rules: [unknownSetUrlParametersRule],
154
+ }),
155
+ )
156
+
157
+ expect(problems).toEqual([])
158
+ })
159
+ })
@@ -0,0 +1,34 @@
1
+ import type { Rule } from '../../types'
2
+
3
+ export const unknownSetUrlParametersRule: Rule<{
4
+ name: string
5
+ }> = {
6
+ code: 'unknown set url parameters',
7
+ level: 'error',
8
+ category: 'Unknown Reference',
9
+ visit: (report, args) => {
10
+ if (
11
+ args.nodeType !== 'action-model' ||
12
+ args.value.type !== 'SetURLParameters'
13
+ ) {
14
+ return
15
+ }
16
+ const isValidParameter = (parameterName: string) =>
17
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
18
+ args.component.route?.path?.some(
19
+ (p) =>
20
+ p.name === parameterName &&
21
+ // It's only valid to set non-static path parameters
22
+ p.type === 'param',
23
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
24
+ ) ||
25
+ Object.values(args.component.route?.query ?? {}).some(
26
+ (q) => q.name === parameterName,
27
+ )
28
+ for (const key of Object.keys(args.value.parameters ?? {})) {
29
+ if (!isValidParameter(key)) {
30
+ report([...args.path, 'parameters', key], { name: key })
31
+ }
32
+ }
33
+ },
34
+ }
package/src/types.d.ts CHANGED
@@ -74,6 +74,7 @@ type Code =
74
74
  | 'unknown repeat index formula'
75
75
  | 'unknown repeat item formula'
76
76
  | 'unknown set url parameter'
77
+ | 'unknown set url parameters'
77
78
  | 'unknown trigger event'
78
79
  | 'unknown trigger workflow'
79
80
  | 'unknown url parameter'