@nordcraft/search 1.0.21 → 1.0.23

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.
@@ -5,60 +5,36 @@ export const duplicateRouteRule = {
5
5
  category: 'Quality',
6
6
  visit: (report, args) => {
7
7
  const { nodeType, value, files, memo, path } = args;
8
- if ((nodeType !== 'component' || !isPageComponent(value)) &&
9
- nodeType !== 'project-route') {
8
+ if (nodeType !== 'component' || !isPageComponent(value)) {
10
9
  return;
11
10
  }
12
11
  const getRouteKey = (route) => route.reduce((acc, part) => `${acc}/${part.type === 'static' ? part.name : '*'}`, '/');
13
12
  const allRoutes = memo('allRoutes', () => {
14
13
  const routes = new Map();
15
- Object.entries(files.routes ?? {}).map(([route, routeValue]) => {
16
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
17
- if (routeValue.source) {
18
- const key = getRouteKey(routeValue.source.path);
19
- const existing = routes.get(key);
20
- if (existing) {
21
- existing.push({ name: route, type: 'route' });
22
- }
23
- else {
24
- routes.set(key, [{ name: route, type: 'route' }]);
25
- }
26
- }
27
- });
28
14
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
29
15
  Object.entries(files.components ?? {}).map(([component, componentValue]) => {
30
16
  if (componentValue && isPageComponent(componentValue)) {
31
17
  const key = getRouteKey(componentValue.route.path);
32
18
  const existing = routes.get(key);
33
19
  if (existing) {
34
- existing.push({ name: component, type: 'page' });
20
+ existing.push(component);
35
21
  }
36
22
  else {
37
- routes.set(key, [{ name: component, type: 'page' }]);
23
+ routes.set(key, [component]);
38
24
  }
39
25
  }
40
26
  });
41
27
  return routes;
42
28
  });
43
- if (nodeType === 'project-route') {
44
- const match = allRoutes.get(getRouteKey(value.source.path));
45
- if (match && match.length > 1) {
46
- report([...path, 'source', 'path'], {
47
- name: args.routeName,
48
- type: 'route',
49
- duplicates: match.filter((m) => m.name !== args.routeName || m.type === 'page'),
50
- });
51
- }
52
- }
53
- else if (isPageComponent(value)) {
54
- const match = allRoutes.get(getRouteKey(value.route?.path));
55
- if (match && match.length > 1) {
56
- report([...path, 'route', 'path'], {
57
- name: value.name,
58
- type: 'page',
59
- duplicates: match.filter((m) => m.name !== value.name || m.type === 'route'),
60
- });
61
- }
29
+ const match = allRoutes.get(getRouteKey(value.route?.path));
30
+ if (match && match.length > 1) {
31
+ report([...path, 'route', 'path'], {
32
+ name: value.name,
33
+ type: 'page',
34
+ duplicates: match
35
+ .filter((m) => m !== value.name)
36
+ .map((name) => ({ name, type: 'page' })),
37
+ });
62
38
  }
63
39
  },
64
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"duplicateRouteRule.js","sourceRoot":"","sources":["../../src/rules/duplicateRouteRule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"duplicateRouteRule.js","sourceRoot":"","sources":["../../src/rules/duplicateRouteRule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAA;AAGhF,MAAM,CAAC,MAAM,kBAAkB,GAI1B;IACH,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QACnD,IAAI,QAAQ,KAAK,WAAW,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,OAAM;QACR,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,KAA+B,EAAE,EAAE,CACtD,KAAK,CAAC,MAAM,CACV,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,EACnE,GAAG,CACJ,CAAA;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAA;YAC1C,uEAAuE;YACvE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CACxC,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE;gBAC9B,IAAI,cAAc,IAAI,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;oBACtD,MAAM,GAAG,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBAC1B,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;oBAC9B,CAAC;gBACH,CAAC;YACH,CAAC,CACF,CAAA;YACD,OAAO,MAAM,CAAA;QACf,CAAC,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;QAC3D,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE;gBACjC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,KAAK;qBACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;qBAC/B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;aAC3C,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -1,4 +1,3 @@
1
- import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils';
2
1
  import { describe, expect, test } from 'bun:test';
3
2
  import { searchProject } from '../searchProject';
4
3
  import { duplicateRouteRule } from './duplicateRouteRule';
@@ -33,42 +32,15 @@ describe('duplicateRouteRule', () => {
33
32
  },
34
33
  },
35
34
  },
36
- routes: {
37
- home: {
38
- type: 'redirect',
39
- source: {
40
- path: [],
41
- query: {},
42
- },
43
- destination: {
44
- path: {},
45
- queryParams: {},
46
- url: valueFormula(''),
47
- },
48
- },
49
- oldBlog: {
50
- type: 'rewrite',
51
- source: {
52
- path: [],
53
- query: {},
54
- },
55
- destination: {
56
- path: {},
57
- queryParams: {},
58
- url: valueFormula(''),
59
- },
60
- },
61
- },
35
+ routes: {},
62
36
  },
63
37
  rules: [duplicateRouteRule],
64
38
  }));
65
- expect(problems).toHaveLength(4);
39
+ expect(problems).toHaveLength(2);
66
40
  expect(problems[0].code).toBe('duplicate route');
67
41
  expect(problems[0].details.name).toEqual('home');
68
42
  expect(problems[0].details.type).toEqual('page');
69
43
  expect(problems[0].details.duplicates).toEqual([
70
- { name: 'home', type: 'route' },
71
- { name: 'oldBlog', type: 'route' },
72
44
  { name: 'home2', type: 'page' },
73
45
  ]);
74
46
  expect(problems[0].path).toEqual(['components', 'home', 'route', 'path']);
@@ -156,42 +128,7 @@ describe('duplicateRouteRule', () => {
156
128
  },
157
129
  },
158
130
  },
159
- routes: {
160
- unknown: {
161
- type: 'redirect',
162
- source: {
163
- path: [
164
- {
165
- name: 'unused-path',
166
- type: 'static',
167
- },
168
- ],
169
- query: {},
170
- },
171
- destination: {
172
- path: {},
173
- queryParams: {},
174
- url: valueFormula(''),
175
- },
176
- },
177
- oldBlog: {
178
- type: 'rewrite',
179
- source: {
180
- path: [
181
- {
182
- name: 'old-blog',
183
- type: 'static',
184
- },
185
- ],
186
- query: {},
187
- },
188
- destination: {
189
- path: {},
190
- queryParams: {},
191
- url: valueFormula(''),
192
- },
193
- },
194
- },
131
+ routes: {},
195
132
  },
196
133
  rules: [duplicateRouteRule],
197
134
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"duplicateRouteRule.test.js","sourceRoot":"","sources":["../../src/rules/duplicateRouteRule.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"duplicateRouteRule.test.js","sourceRoot":"","sources":["../../src/rules/duplicateRouteRule.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.21"
8
+ "@nordcraft/ssr": "1.0.23"
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.21"
20
+ "version": "1.0.23"
21
21
  }
@@ -1,4 +1,3 @@
1
- import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils'
2
1
  import { describe, expect, test } from 'bun:test'
3
2
  import { searchProject } from '../searchProject'
4
3
  import { duplicateRouteRule } from './duplicateRouteRule'
@@ -35,44 +34,17 @@ describe('duplicateRouteRule', () => {
35
34
  },
36
35
  },
37
36
  },
38
- routes: {
39
- home: {
40
- type: 'redirect',
41
- source: {
42
- path: [],
43
- query: {},
44
- },
45
- destination: {
46
- path: {},
47
- queryParams: {},
48
- url: valueFormula(''),
49
- },
50
- },
51
- oldBlog: {
52
- type: 'rewrite',
53
- source: {
54
- path: [],
55
- query: {},
56
- },
57
- destination: {
58
- path: {},
59
- queryParams: {},
60
- url: valueFormula(''),
61
- },
62
- },
63
- },
37
+ routes: {},
64
38
  },
65
39
  rules: [duplicateRouteRule],
66
40
  }),
67
41
  )
68
42
 
69
- expect(problems).toHaveLength(4)
43
+ expect(problems).toHaveLength(2)
70
44
  expect(problems[0].code).toBe('duplicate route')
71
45
  expect(problems[0].details.name).toEqual('home')
72
46
  expect(problems[0].details.type).toEqual('page')
73
47
  expect(problems[0].details.duplicates).toEqual([
74
- { name: 'home', type: 'route' },
75
- { name: 'oldBlog', type: 'route' },
76
48
  { name: 'home2', type: 'page' },
77
49
  ])
78
50
  expect(problems[0].path).toEqual(['components', 'home', 'route', 'path'])
@@ -164,42 +136,7 @@ describe('duplicateRouteRule', () => {
164
136
  },
165
137
  },
166
138
  },
167
- routes: {
168
- unknown: {
169
- type: 'redirect',
170
- source: {
171
- path: [
172
- {
173
- name: 'unused-path',
174
- type: 'static',
175
- },
176
- ],
177
- query: {},
178
- },
179
- destination: {
180
- path: {},
181
- queryParams: {},
182
- url: valueFormula(''),
183
- },
184
- },
185
- oldBlog: {
186
- type: 'rewrite',
187
- source: {
188
- path: [
189
- {
190
- name: 'old-blog',
191
- type: 'static',
192
- },
193
- ],
194
- query: {},
195
- },
196
- destination: {
197
- path: {},
198
- queryParams: {},
199
- url: valueFormula(''),
200
- },
201
- },
202
- },
139
+ routes: {},
203
140
  },
204
141
  rules: [duplicateRouteRule],
205
142
  }),
@@ -12,10 +12,7 @@ export const duplicateRouteRule: Rule<{
12
12
  category: 'Quality',
13
13
  visit: (report, args) => {
14
14
  const { nodeType, value, files, memo, path } = args
15
- if (
16
- (nodeType !== 'component' || !isPageComponent(value)) &&
17
- nodeType !== 'project-route'
18
- ) {
15
+ if (nodeType !== 'component' || !isPageComponent(value)) {
19
16
  return
20
17
  }
21
18
  const getRouteKey = (route: RouteDeclaration['path']) =>
@@ -24,22 +21,7 @@ export const duplicateRouteRule: Rule<{
24
21
  '/',
25
22
  )
26
23
  const allRoutes = memo('allRoutes', () => {
27
- const routes = new Map<
28
- string,
29
- Array<{ name: string; type: 'route' | 'page' }>
30
- >()
31
- Object.entries(files.routes ?? {}).map(([route, routeValue]) => {
32
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
33
- if (routeValue.source) {
34
- const key = getRouteKey(routeValue.source.path)
35
- const existing = routes.get(key)
36
- if (existing) {
37
- existing.push({ name: route, type: 'route' })
38
- } else {
39
- routes.set(key, [{ name: route, type: 'route' }])
40
- }
41
- }
42
- })
24
+ const routes = new Map<string, string[]>()
43
25
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
44
26
  Object.entries(files.components ?? {}).map(
45
27
  ([component, componentValue]) => {
@@ -47,37 +29,24 @@ export const duplicateRouteRule: Rule<{
47
29
  const key = getRouteKey(componentValue.route.path)
48
30
  const existing = routes.get(key)
49
31
  if (existing) {
50
- existing.push({ name: component, type: 'page' })
32
+ existing.push(component)
51
33
  } else {
52
- routes.set(key, [{ name: component, type: 'page' }])
34
+ routes.set(key, [component])
53
35
  }
54
36
  }
55
37
  },
56
38
  )
57
39
  return routes
58
40
  })
59
- if (nodeType === 'project-route') {
60
- const match = allRoutes.get(getRouteKey(value.source.path))
61
- if (match && match.length > 1) {
62
- report([...path, 'source', 'path'], {
63
- name: args.routeName,
64
- type: 'route',
65
- duplicates: match.filter(
66
- (m) => m.name !== args.routeName || m.type === 'page',
67
- ),
68
- })
69
- }
70
- } else if (isPageComponent(value)) {
71
- const match = allRoutes.get(getRouteKey(value.route?.path))
72
- if (match && match.length > 1) {
73
- report([...path, 'route', 'path'], {
74
- name: value.name,
75
- type: 'page',
76
- duplicates: match.filter(
77
- (m) => m.name !== value.name || m.type === 'route',
78
- ),
79
- })
80
- }
41
+ const match = allRoutes.get(getRouteKey(value.route?.path))
42
+ if (match && match.length > 1) {
43
+ report([...path, 'route', 'path'], {
44
+ name: value.name,
45
+ type: 'page',
46
+ duplicates: match
47
+ .filter((m) => m !== value.name)
48
+ .map((name) => ({ name, type: 'page' })),
49
+ })
81
50
  }
82
51
  },
83
52
  }